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

时间:2016-11-12 16:40:53

标签: regression svm python scikit-learn

当模型嵌入管道和网格搜索时,我无法在scikit中访问支持向量回归模型(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'对象没有属性'coef _'。

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

pipeline.named_steps['svr']

但在那里找不到系数。

1 个答案:

答案 0 :(得分:2)

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

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