2016-11-12 2 views
2

У меня возникли проблемы с доступом к коэффициентам модели векторной регрессии поддержки (SVR) в scikit, когда модель встроена в конвейер и поиск по сетке. Рассмотрим следующий пример:Коэффициент в векторной регрессии поддержки (SVR) с использованием поиска сетки (GridSearchCV) и Pipeline в Scikit Learn

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

Просто случайно наткнулся на такой же проблемой и this post был ответ: grid.best_estimator_ содержит экземпляр трубопровода, который состоит из steps. Последний шаг всегда должен быть оценкой, поэтому вы всегда должны находить коэффициенты по адресу:

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