Python 将xgboost的“val”分数与;早停轮;“返回”;“索引器”;

Python 将xgboost的“val”分数与;早停轮;“返回”;“索引器”;,python,scikit-learn,cross-validation,xgboost,Python,Scikit Learn,Cross Validation,Xgboost,我正在使用sklearn和xgboost在python(v3.6)中开发一个回归模型。 我想计算sklearn.cross\u val\u分数和提前停止轮数。以下代码返回一个错误: xgb_model = xgb.XGBRegressor(n_estimators=600, learning_rate=0.06) xgb_cv = cross_val_score(xgb_model, train_x, train_y,

我正在使用sklearn和xgboost在python(v3.6)中开发一个回归模型。 我想计算sklearn.cross\u val\u分数和提前停止轮数。以下代码返回一个错误:

xgb_model = xgb.XGBRegressor(n_estimators=600,
                             learning_rate=0.06)

xgb_cv = cross_val_score(xgb_model, train_x, train_y, 
                         cv=5, scoring='neg_mean_absolute_error',
                         fit_params={'early_stopping_rounds':3})

IndexError: list index out of range
此外,如果我尝试将参数作为“xgbregressor_uuuearly_ustopping_rounds”(在一些相关主题中在线找到)传递,则会显示以下错误:

TypeError: fit() got an unexpected keyword argument
'xgbregressor__early_stopping_rounds'
如果我运行相同的模型,但没有“fit_params”,则一切正常。
在使用cross\u val\u score时,有什么方法可以避免这个错误吗?

根据lbcommer的建议,用glao的回答解决了这个问题-谢谢

为了避免过度拟合,我使用训练数据的单独部分作为验证数据集来评估算法。请参见下面的我的代码:

train_x, val_x, train_y, val_y = train_test_split(train_x, train_y, test_size = 0.30, random_state=1)

xgb_model = xgb.XGBRegressor(n_estimators=600, learning_rate=0.06)

fit_params={'early_stopping_rounds': 30, 
            'eval_metric': 'mae',
            'verbose': False,
            'eval_set': [[val_x, val_y]]}

xgb_cv = cross_val_score(xgb_model, train_x, train_y, 
                         cv = 5, 
                         scoring = 'neg_mean_absolute_error',
                         fit_params = fit_params)

按照lbcommer的建议,从这里用glao的答案解决了这个问题-谢谢

为了避免过度拟合,我使用训练数据的单独部分作为验证数据集来评估算法。请参见下面的我的代码:

train_x, val_x, train_y, val_y = train_test_split(train_x, train_y, test_size = 0.30, random_state=1)

xgb_model = xgb.XGBRegressor(n_estimators=600, learning_rate=0.06)

fit_params={'early_stopping_rounds': 30, 
            'eval_metric': 'mae',
            'verbose': False,
            'eval_set': [[val_x, val_y]]}

xgb_cv = cross_val_score(xgb_model, train_x, train_y, 
                         cv = 5, 
                         scoring = 'neg_mean_absolute_error',
                         fit_params = fit_params)

我想你可以在这个stackoverflow回答中找到解决方案:你是对的,谢谢!xgboost有自己的交叉验证功能<代码>xgboost.cv。链接:。不使用它有什么原因吗?最初,我在这篇文章后面用
xgboost.cv
尝试了它,但后来又切换回sklearn框架。我只是觉得比较舒服。您认为使用
xgboost.cv
有什么实际优势吗?只是它更兼容。我认为您可以在这个stackoverflow响应中找到解决方案:您是对的,谢谢!xgboost有自己的交叉验证功能<代码>xgboost.cv。链接:。不使用它有什么原因吗?最初,我在这篇文章后面用
xgboost.cv
尝试了它,但后来又切换回sklearn框架。我只是觉得比较舒服。您认为使用
xgboost.cv
有什么实际优势吗?只是因为它更兼容。显然,在进行K-fold cv时,不需要有支撑。eval_集合应该只是每个k折叠的测试分割。最终,我不得不在一个简单的for循环中使用xgb.train来完成这项工作。显然,在执行K-fold CV时,不需要保持。eval_集合应该只是每个k折叠的测试分割。最终,我不得不在一个简单的for循环中使用xgb.train来实现这一点。