我有以下数据:
x_train 为
np.ndarray
,y_train 为 np.ndarray
,模型为 xgboost.sklearn.XGBClassifier
。类型有:
print(type(x_train))
print(x_train.dtype)
>> <class 'numpy.ndarray'>
>> float64
print(type(y_train))
print(y_train.dtype)
>> <class 'numpy.ndarray'>
>> float64
print(type(model))
>> xgboost.sklearn.XGBClassifier
我正在使用 Databricks Runtime 12.2 LTS ML,对应于
xgboost==1.7.2
。
出现以下错误:
model.fit(x_train, y_train)
>> XGBoostError: [09:28:22] ../src/data/data.cc:254: All feature_types must be one of {int, float, i, q, c}.
y_train 实际上是一个向量或 1 和 0,我也尝试过将其转换为
np.int32
或 np.int64
。然后,我尝试将其投射到 builtins.int
和 builtins.float
,如下所示:
x_train = np.array(x_train, dtype=float)
y_train = np.array(y_train, dtype=int)
print(x_train.dtype)
print(y_train.dtype)
>>float64
>>int64
和以前一样的错误。
我已经检查了这篇post,但这对我没有帮助,因为我的类型不同。我不想从 numpy dtypes 进行转换,因为这些在过去已经工作过,并且我的配置文件是以这样的方式设置的..
其他相关软件包:sklearn==0.0.post7 和 scikit-learn==1.0.2。您可以按如下方式重现错误:
import numpy as np
import xgboost as xgb
params = {'base_score': 0.5,
'booster': 'gbtree',
'callbacks': 'null',
'colsample_bylevel': 1,
'colsample_bynode': 1,
'colsample_bytree': 1,
'early_stopping_rounds': 'null',
'enable_categorical': False,
'eval_metric': 'aucpr',
'feature_types': 'null',
'gamma': 7,
'gpu_id': -1,
'grow_policy': 'lossguide',
'importance_type': 'null',
'interaction_constraints': '',
'learning_rate': 0.05610004032698376,
'max_bin': 256,
'max_cat_threshold': 64,
'max_cat_to_onehot': 4,
'max_delta_step': 0,
'max_depth': 2,
'max_leaves': 0,
'min_child_weight': 1,
'monotone_constraints': (),
'n_estimators': 1275,
'n_jobs': 4,
'num_parallel_tree': 1,
'objective': 'binary:logistic',
'predictor': 'auto',
'random_state': 0,
'reg_alpha': 0,
'reg_lambda': 60,
'sampling_method': 'uniform',
'scale_pos_weight': 11.507905606798213,
'subsample': 1,
'tree_method': 'hist',
'use_label_encoder': False,
'validate_parameters': 1,
'verbosity': 0}
model = xgb.XGBClassifier(**params)
x = np.random.normal(0,1,(100,10)).astype(np.float64)
y = np.random.uniform(0,1,100).astype(np.int64)
model.fit(x,y)
我现在才注意到我正在强制 params 字典中的
feature_types
为 'null'
...
您是否尝试过使用 float32 代替 float64 或 int32 代替 int64?
这对我有用😀