Python 如何使用MultiOutputRegressor包装器为XGBoost设置网格搜索参数

Python 如何使用MultiOutputRegressor包装器为XGBoost设置网格搜索参数,python,scikit-learn,xgboost,Python,Scikit Learn,Xgboost,我正试图用MultiOutputRegressor包装器构建一个回归器,用XGBoost从6D输入预测6D输出。但我不确定如何进行参数搜索。我的代码如下所示: gsc = GridSearchCV( estimator=xgb.XGBRegressor(), param_grid={"learning_rate": (0.05, 0.10, 0.15), "max_depth": [ 3, 4, 5,

我正试图用
MultiOutputRegressor
包装器构建一个回归器,用
XGBoost
从6D输入预测6D输出。但我不确定如何进行参数搜索。我的代码如下所示:

gsc = GridSearchCV(
            estimator=xgb.XGBRegressor(),
            param_grid={"learning_rate": (0.05, 0.10, 0.15),
                        "max_depth": [ 3, 4, 5, 6, 8],
                        "min_child_weight": [ 1, 3, 5, 7],
                        "gamma":[ 0.0, 0.1, 0.2],
                        "colsample_bytree":[ 0.3, 0.4],},
            cv=3, scoring='neg_mean_squared_error', verbose=0, n_jobs=-1)

grid_result = MultiOutputRegressor(gsc).fit(X_train, y_train)
self.best_params = grid_result.best_params_

但是,
多输出分离器
没有
最佳参数
变量。这样做的正确方式是什么?非常感谢

多输出分离器
在估计器本身具有,并且参数网格需要相应地改变


from xgboost import XGBRegressor
from sklearn.model_selection import GridSearchCV
from sklearn.datasets import make_regression
from sklearn.multioutput import MultiOutputRegressor

X_train, y_train = make_regression(n_features=6, n_targets=6)

gsc = GridSearchCV(
            estimator=MultiOutputRegressor(XGBRegressor()),
            param_grid={"estimator__learning_rate": (0.05, 0.10, 0.15)},
            cv=3, scoring='neg_mean_squared_error', verbose=0, n_jobs=-1)

grid_result = gsc.fit(X_train, y_train)
print(grid_result.best_params_)

# {'estimator__learning_rate': 0.1}
你可以试试这个

gsc = GridSearchCV(
            estimator=xgb.XGBRegressor(),
            param_grid={"learning_rate": (0.05, 0.10, 0.15),
                        "max_depth": [ 3, 4, 5, 6, 8],
                        "min_child_weight": [ 1, 3, 5, 7],
                        "gamma":[ 0.0, 0.1, 0.2],
                        "colsample_bytree":[ 0.3, 0.4],},
            cv=3, scoring='neg_mean_squared_error', verbose=0, n_jobs=-1)

grid_result = MultiOutputRegressor(gsc).fit(X_train, y_train)

self.best_params = grid_result.estimators_[0].best_params_  # for the first y_target estimator

我试过了,但有一个错误:ValueError:估计器MultiOutputRegressor(估计器=XGBRegressor)的参数学习率无效(base_score=None,booster=None,…因此我怀疑MultiOutputRegressor的参数是以这种方式设置的,但MultiOutputRegressor没有这些参数。ValueError:估计器MultiOutputRegressor的参数学习率无效(估计器=XGBRegressor(base_score=None,booster=None,colsample_bylevel=None,…),n_jobs=None)。使用
estimator.get_params().keys()检查可用参数列表
。如果你对@Venkatachalam有任何想法,请告诉我,谢谢!!你能用这个数据集创建一个可复制的错误吗
X\u train,y\u train=make\u regression(n\u features=6,n\u targets=6)
很抱歉这么晚才发表评论,非常感谢!!