【问题标题】:How to read selected builtin parameters of sklearn grid search estimators?如何读取 sklearn 网格搜索估计器的选定内置参数?
【发布时间】:2018-08-13 11:05:59
【问题描述】:

我正在使用 sklearn 'gridsearchcv' 来找到我的特征选择方法的最佳超参数,这里是 'selectkbest'。我正在使用“特征选择”管道和我的岭回归。

这种管道的一个例子是here

但是,我使用的是'RidgeCV',它选择了自己的正则化器和高效的内置 locv。在这种情况下,我无法访问我的 Ridgecv 的参数。

k_range = [10, 15, 30, 50, 150, 300, 500]
alpha_range = [0.01, 0.05, 
           0.1, 0.5, 
           1,
           2,
           5, 
            10,
            100]
featureSelection = SelectKBest(f_classif)
ridgecv = linear_model.RidgeCV(alphas=alpha_range, gcv_mode='eigen', 
                           store_cv_values=True)
pipe = Pipeline([('anova', featureSelection), ('ridgecv', ridgecv)])
grid = GridSearchCV(pipe, param_grid={'anova__k':k_range}, 
cv=inner_cv)
grid.fit(x_train, y_train)
print(grid.best_params_)

在此代码的输入中,我可以看到为“anova”特征选择选择的 k 是什么,但我找不到为我的“ridgecv”访问选择的“alpha”的方法

{'anova__k': 15}

我尝试获得最佳估算器并读取它的 alpha 参数,如下所示:

es = grid.estimator.named_steps['ridgecv'].score(x,y)
es.alpha_

但它说:

NotFittedError: This RidgeCV instance is not fitted yet. Call 'fit' with appropriate arguments before using this method.

【问题讨论】:

    标签: python scikit-learn grid-search


    【解决方案1】:

    您可能想尝试best_estimator_ 而不是estimator,即

    es = grid.best_estimator_.named_steps['ridgecv']
    

    在另一个主题上,虽然功能严格,但在RidgeCV 级别和GridSearchCV 级别进行交叉验证是很奇怪的。在这种情况下,我建议使用 sklearn.linear_model.Ridge 类并在 GridSearchCV 级别对 alpha 进行交叉验证,例如

    ridge = Ridge()
    pipe = Pipeline([('anova', featureSelection), ('ridge', ridge)])
    grid = GridSearchCV(pipe, param_grid={'anova__k':k_range, 'ridge__alpha': alpha_range}) 
    

    【讨论】:

      猜你喜欢
      • 2021-12-31
      • 2021-05-27
      • 2018-11-08
      • 2021-03-29
      • 2019-08-22
      • 2016-04-07
      • 2021-03-19
      • 2017-06-13
      • 2023-03-09
      相关资源
      最近更新 更多