在 Scikit Learn 中使用网格搜索 (GridSearchCV) 和管道的支持向量回归 (SVR) 中的系数

Posted

技术标签:

【中文标题】在 Scikit Learn 中使用网格搜索 (GridSearchCV) 和管道的支持向量回归 (SVR) 中的系数【英文标题】:Coefficient in support vector regression (SVR) using grid search (GridSearchCV) and Pipeline in Scikit Learn 【发布时间】:2017-03-26 21:55:29 【问题描述】:

当模型嵌入管道和网格搜索时,我无法在 scikit learn 中访问支持向量回归模型 (SVR) 的系数。 考虑以下示例:

from sklearn.datasets import load_iris
import numpy as np
from sklearn.grid_search import GridSearchCV
from sklearn.svm import SVR
from sklearn.feature_selection import SelectKBest
from sklearn.pipeline import Pipeline

iris = load_iris()
X_train = iris.data
y_train = iris.target

clf = SVR(kernel='linear')
select = SelectKBest(k=2)
steps = [('feature_selection', select), ('svr', clf)]
pipeline = Pipeline(steps)
grid = GridSearchCV(pipeline, param_grid="svr__C":[10,10,100],"svr__gamma": np.logspace(-2, 2))
grid.fit(X_train, y_train)

这似乎工作正常,但是当我尝试访问最佳拟合模型的系数时

grid.best_estimator_.coef_

我收到一条错误消息:AttributeError: 'Pipeline' object has no attribute 'coef_'。

我还尝试访问管道的各个步骤:

pipeline.named_steps['svr']

但在那里找不到系数。

【问题讨论】:

【参考方案1】:

刚好遇到同样的问题,this post 有答案: grid.best_estimator_ 包含管道的一个实例,它由steps 组成。最后一步应该始终是估算器,因此您应该始终在以下位置找到系数:

grid.best_estimator_.steps[-1][1].coef_

【讨论】:

以上是关于在 Scikit Learn 中使用网格搜索 (GridSearchCV) 和管道的支持向量回归 (SVR) 中的系数的主要内容,如果未能解决你的问题,请参考以下文章

如何在 scikit-learn 的管道中对变换参数进行网格搜索

在 scikit-learn 中结合递归特征消除和网格搜索

scikit-learn 中的超参数优化(网格搜索)

使用 scikit-learn 进行递归特征消除和网格搜索

带有 SVM 回归的 Scikit-learn 网格搜索

Scikit learn 中的交叉验证与网格搜索