我试图使用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的文档也不是很清楚和稀疏。因此,任何帮助都将是非常感谢的。
谢谢
发布于 2019-04-15 19:28:21
它似乎在抱怨folds.split部件,表明folds是一个整数。如果您的cv_folds对象只是折叠的数量,则将其作为nfolds传递;folds期望实际的sklearn对象而不是数字。
https://datascience.stackexchange.com/questions/49344
复制相似问题