使用 Scikit-Learn 在 RegressorChain 上进行 GridSearch?

GridSearch over RegressorChain using Scikit-Learn?

我目前正在研究多输出回归问题,我试图同时预测多个输出值。我知道有标准的回归器本身就支持这个任务。

但是,我想使用 RegressorChain 并使用 GridSearchCV 调整 RegressorChain 中 Regressor 的超参数。我为此编写了以下代码:

from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVR
from sklearn.model_selection import GridSearchCV

# setup the pipeline
pipeline = Pipeline(steps = [('scale', StandardScaler(with_mean=True, with_std=True)),
                             ('estimator', RegressorChain(SVR())])

# setup the parameter grid
param_grid = {'estimator__estimator__C': [0.1,1,10,100]}           

# setup the grid search
grid = GridSearchCV(pipeline, 
                    param_grid, 
                    scoring='neg_mean_squared_error')
# fit model   
grid.fit(X, y)

它尝试过:

param_grid = {'estimator__C': [0.1,1,10,100]}  

和:

param_grid = {'estimator__estimator__C': [0.1,1,10,100]}

但我两次都得到以下结果 ValueError:

ValueError: Invalid parameter C for estimator RegressorChain(base_estimator=SVR(C=1.0, cache_size=200, coef0=0.0, degree=3, epsilon=0.1, gamma='auto_deprecated', kernel='rbf', max_iter=-1, shrinking=True, tol=0.001, verbose=False), cv=None, order=None, random_state=None). Check the list of available parameters with estimator.get_params().keys().

有没有人知道如何正确设置此管道?谢谢!

如错误信息所示,打印RegressorChain(SVR()).get_params()的结果,你会得到:

{
    'base_estimator__C': 1.0, 
    'base_estimator__cache_size': 200, 
    'base_estimator__coef0': 0.0, 
    'base_estimator__degree': 3,
    ...
}

鉴于您定义的管道,这意味着您应该使用

param_grid = {'estimator__base_estimator__C': [0.1, 1, 10, 100]} 

在网格搜索迭代期间为 SVR 对象的 C 设置可能的值。