XGBoost 错误 'DMatrix' 对象不支持索引
XGBoost error 'DMatrix' object does not support indexing
我正在尝试通过 .train 函数和 DMatrix 来使用 XGBoost 库,但由于错误我有点卡住了:
Traceback (most recent call last):
File "", line 1, in
runfile('E:/CrossValidation.py', wdir='E:/')
File
"C:\Users\users\Anaconda3\envs\Lightgbm\lib\site-packages\spyder\utils\site\sitecustomize.py",
line 705, in runfile
execfile(filename, namespace)
File
"C:\Users\users\Anaconda3\envs\Lightgbm\lib\site-packages\spyder\utils\site\sitecustomize.py",
line 102, in execfile
exec(compile(f.read(), filename, 'exec'), namespace)
File "E:/CrossValidation.py", line 218, in
mainXGB()
File "E:/CrossValidation.py", line 214, in mainXGB
crossval_preds, val_preds = cv.train(X_data=X_train.values, y_data=y_train.values, X_test=X_val.values, params=xgb_params)
File "E:/CrossValidation.py", line 136, in train
early_stopping_rounds=early_stopping_rounds)
File
"C:\Users\users\Anaconda3\envs\Lightgbm\lib\site-packages\xgboost\training.py",
line 204, in train
xgb_model=xgb_model, callbacks=callbacks)
File
"C:\Users\users\Anaconda3\envs\Lightgbm\lib\site-packages\xgboost\training.py",
line 32, in _train_internal
bst = Booster(params, [dtrain] + [d[0] for d in evals])
File
"C:\Users\users\Anaconda3\envs\Lightgbm\lib\site-packages\xgboost\training.py",
line 32, in
bst = Booster(params, [dtrain] + [d[0] for d in evals])
TypeError: 'DMatrix' object does not support indexing
这是我的一段代码:
dtrain = xgb.DMatrix(X_data[train_idx], label=np.log1p(y_data[train_idx])) # datas.slice(train_idx)
dtest = xgb.DMatrix(X_data[val_idx], label=np.log1p(y_data[val_idx]))
print('data created for xgboost')
model = self.model_base.train(params=params, dtrain=dtrain, num_boost_round=number_iteration, evals=[dtest], early_stopping_rounds=early_stopping_rounds)
有谁知道如何解决这个问题?
问题出在 evals 参数上。需要一个元组列表,因此将 evals=[dtest]
更改为 evals=[(dtest, "Test")]
.
我正在尝试通过 .train 函数和 DMatrix 来使用 XGBoost 库,但由于错误我有点卡住了:
Traceback (most recent call last):
File "", line 1, in runfile('E:/CrossValidation.py', wdir='E:/')
File "C:\Users\users\Anaconda3\envs\Lightgbm\lib\site-packages\spyder\utils\site\sitecustomize.py", line 705, in runfile execfile(filename, namespace)
File "C:\Users\users\Anaconda3\envs\Lightgbm\lib\site-packages\spyder\utils\site\sitecustomize.py", line 102, in execfile exec(compile(f.read(), filename, 'exec'), namespace)
File "E:/CrossValidation.py", line 218, in mainXGB()
File "E:/CrossValidation.py", line 214, in mainXGB crossval_preds, val_preds = cv.train(X_data=X_train.values, y_data=y_train.values, X_test=X_val.values, params=xgb_params)
File "E:/CrossValidation.py", line 136, in train early_stopping_rounds=early_stopping_rounds)
File "C:\Users\users\Anaconda3\envs\Lightgbm\lib\site-packages\xgboost\training.py", line 204, in train xgb_model=xgb_model, callbacks=callbacks)
File "C:\Users\users\Anaconda3\envs\Lightgbm\lib\site-packages\xgboost\training.py", line 32, in _train_internal bst = Booster(params, [dtrain] + [d[0] for d in evals])
File "C:\Users\users\Anaconda3\envs\Lightgbm\lib\site-packages\xgboost\training.py", line 32, in bst = Booster(params, [dtrain] + [d[0] for d in evals])
TypeError: 'DMatrix' object does not support indexing
这是我的一段代码:
dtrain = xgb.DMatrix(X_data[train_idx], label=np.log1p(y_data[train_idx])) # datas.slice(train_idx)
dtest = xgb.DMatrix(X_data[val_idx], label=np.log1p(y_data[val_idx]))
print('data created for xgboost')
model = self.model_base.train(params=params, dtrain=dtrain, num_boost_round=number_iteration, evals=[dtest], early_stopping_rounds=early_stopping_rounds)
有谁知道如何解决这个问题?
问题出在 evals 参数上。需要一个元组列表,因此将 evals=[dtest]
更改为 evals=[(dtest, "Test")]
.