使用 xgb cv 函数优化 XGBRegressor 超参数

数据挖掘 Python xgboost 交叉验证
2022-01-22 13:10:17

我正在尝试使用 xgb 的 cv 函数和贝叶斯优化(使用 hyperopt 包)优化 XGBRegressor 的超参数。这是我用于 cv 部分的代码。

dtrain = xgb.DMatrix(X_train, label=y_train)
cv_results = xgb.cv(params,dtrain,num_boost_round = 1000, folds= cv_folds, 
                        stratified = False, early_stopping_rounds = 100, metrics="rmse", seed = 44)

但是,我在xgb.cv函数中收到以下错误(跟踪的一部分):

414     cvfolds = mknfold(dtrain, nfold, params, seed, metrics, fpreproc,
--> 415                       stratified, folds, shuffle)
    416 
    417     # setup callbacks

/anaconda3/envs/py36/lib/python3.6/site-packages/xgboost/training.py in mknfold(dall, nfold, param, seed, evals, fpreproc, stratified, folds, shuffle)
    261         except TypeError:
    262             # Custom stratification using Sklearn KFoldSplit object
--> 263             splits = list(folds.split(X=dall.get_label(), y=dall.get_label()))
    264             in_idset = [x[0] for x in splits]
    265             out_idset = [x[1] for x in splits]

AttributeError: 'int' object has no attribute 'split' 

我不知道为什么我会收到这个错误。xgboost 的文档也不是很清楚和稀疏。因此,任何帮助将不胜感激。

谢谢

1个回答

它似乎在抱怨该folds.split部分,表明它folds是一个整数。如果您的cv_folds对象只是折叠数,请nfolds改为传递它;folds期望实际的 sklearn KFold 对象而不是数字。