我正在使用Python在25个要素列数据集和SKlearn的GridSearchCV上训练XGBoost回归参数,以进行参数调整。 GridSearchCV允许您使用“得分”参数选择您的得分手,并且grid = GridSearchCV(mdl, param_grid=params, verbose=1, cv=kfold,
n_jobs=-1, error_score='raise',scoring='r2')`
是有效的选项。
r2
但是,当我希望在grid.fit()
函数中使用r2
作为我的'eval_metric'时,我没有一个很好的方法来使用grid.fit(X_train, y_train, eval_set=[(X_test, y_test)],
eval_metric='rmse', early_stopping_rounds=150)
。
r2_score
我尝试使用内置的sklearns r2 score
方法,但是存在一些问题。首先,给定y_test
与y_pred
集的对比,计算出y_pred
。为了设置grid.fit(X_train, y_train, eval_set=[(X_test, y_test)],
eval_metric=r2_score(y_test, mdl.predict(X_test)), early_stopping_rounds=150)
,我们需要拟合模型。这样您就可以看到我遇到了循环问题。
我已经尝试了一些方法来解决此问题。首先是训练模型并在eval_metric变量中进行预测,如下所示:
xgboost.core.XGBoostError: need to call fit beforehand
但是给我以下错误:
r2_score
有道理。
是否可以通过某种方式获取GridSearchCV正在使用的当前参数,创建并存储预测,然后将{{1}}用作eval_metric?
我的想法是这样。 r2分数是标准评估指标,范围为0到1(1为完美拟合)。这是一个度量标准,如果有一种标准化的优化方法,那么在几乎所有机器学习中都将具有非常广泛的意义。
答案 0 :(得分:0)
据我了解,您正在寻找一种使用XGBoost进行建模时获得r2
得分的方法。以下代码将为您提供r2
得分作为输出,
xg = xgb.XGBRegressor()
best_xgb = GridSearchCV(
xg, param_grid=params, cv=10, verbose=0, n_jobs=-1)
scores = cross_val_score(best_xgb, X, y, scoring='r2', cv=kfold)
有关Scikit-learn documentation函数的更多详细信息,请参考cross_val_score。
希望这会有所帮助!