首页 文章

如何阅读sklearn网格搜索估算器的选定内置参数?

提问于
浏览
0

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

这种管道的一个例子是here .

但是,我正在使用'RidgeCV'选择它's own regularizer with an efficient builtin loocv. In this case I' m无法访问我的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_)

在这个代码的putput中,我可以看到'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.

1 回答

  • 0

    你可能想尝试 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})
    

相关问题