XGBoost 需要 int 或 float,而我实际上有 int 和 float [关闭]

问题描述 投票:0回答:1

我有以下数据:

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'
...

python databricks xgboost
1个回答
0
投票

您是否尝试过使用 float32 代替 float64int32 代替 int64

这对我有用😀

© www.soinside.com 2019 - 2024. All rights reserved.