XGBoost 错误“DMatrix"对象不支持索引 [英] XGBoost error 'DMatrix' object does not support indexing

查看:93
本文介绍了XGBoost 错误“DMatrix"对象不支持索引的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用 .train 函数和 DMatrix 来使用 XGBoost 库,但由于错误,我有点卡住了:

I am trying to use XGBoost library using .train function and DMatrix but I am a little stuck because of an error :

回溯(最近一次调用最后一次):

Traceback (most recent call last):

文件",第 1 行,在runfile('E:/CrossValidation.py', wdir='E:/')

File "", line 1, in runfile('E:/CrossValidation.py', wdir='E:/')

文件"C:\Users\users\Anaconda3\envs\Lightgbm\lib\site-packages\spyder\utils\site\sitecustomize.py",第 705 行,在运行文件中execfile(文件名,命名空间)

File "C:\Users\users\Anaconda3\envs\Lightgbm\lib\site-packages\spyder\utils\site\sitecustomize.py", line 705, in runfile execfile(filename, namespace)

文件"C:\Users\users\Anaconda3\envs\Lightgbm\lib\site-packages\spyder\utils\site\sitecustomize.py",第 102 行,在 execfile 中exec(compile(f.read(), filename, 'exec'), 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)

文件E:/CrossValidation.py",第 218 行,在mainXGB()

File "E:/CrossValidation.py", line 218, in mainXGB()

文件E:/CrossValidation.py",第 214 行,在 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 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)

文件E:/CrossValidation.py",第 136 行,火车中early_stopping_rounds=early_stopping_rounds)

File "E:/CrossValidation.py", line 136, in train early_stopping_rounds=early_stopping_rounds)

文件"C:\Users\users\Anaconda3\envs\Lightgbm\lib\site-packages\xgboost\training.py",204线,火车xgb_model=xgb_model, callbacks=callbacks)

File "C:\Users\users\Anaconda3\envs\Lightgbm\lib\site-packages\xgboost\training.py", line 204, in train xgb_model=xgb_model, callbacks=callbacks)

文件"C:\Users\users\Anaconda3\envs\Lightgbm\lib\site-packages\xgboost\training.py",第 32 行,在 _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 _train_internal bst = Booster(params, [dtrain] + [d[0] for d in evals])

文件"C:\Users\users\Anaconda3\envs\Lightgbm\lib\site-packages\xgboost\training.py",第 32 行,在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' 对象不支持索引

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)

有人知道怎么解决这个问题吗?

Does anyone know how to solve the problem ?

推荐答案

问题在于 evals 参数.需要元组列表,因此将 evals=[dtest] 更改为 evals=[(dtest, "Test")].

The problem is with the evals argument. A list of tuples is expected, so change evals=[dtest] to evals=[(dtest, "Test")].

这篇关于XGBoost 错误“DMatrix"对象不支持索引的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆