2016-08-13 4 views
1

Я получаю следующую ошибку для приведенного ниже кода, но не могу понять, почему мой параметр недействителен. SelectFromModel - это допустимый ввод в конвейере, поскольку он имеет функцию подгонки и преобразования.Почему этот параметр недействителен в конвейере Sklearn?

ValueError: Invalid parameter sfm_threshold for estimator Pipeline. 
Check the list of available parameters with 
`estimator.get_params().keys()` 

from sklearn.preprocessing import PolynomialFeatures, StandardScaler 
from sklearn.linear_model import LassoCV, LinearRegression 
from sklearn.feature_selection import SelectFromModel 
from sklearn.pipeline import Pipeline 

poly = PolynomialFeatures() 
std = StandardScaler() 
ls = LassoCV(cv=10) 
sfm = SelectFromModel(estimator=ls) 
lr = LinearRegression() 

pipe_lr = Pipeline([('poly', poly), 
        ('std', std), 
        ('sfm', sfm), 
        ('lr', lr)]) 

param_range_degree = [2, 3] 
param_range_threshold = [0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5] 

param_grid_lr = [{'poly__degree': param_range_degree, 
        'sfm__threshold': param_range_threshold}] 

Когда я бегу pipe_lr.get_params().keys() я получаю следующий вывод, который делает на самом деле включают sfm__threshold, который я скопировать и вставить точно так, как есть.

['std__with_mean', 
'sfm__estimator__precompute', 
'lr__n_jobs', 
'sfm__prefit', 
'poly', 
'sfm__threshold', 
'sfm__estimator__cv', 
'sfm__estimator__max_iter', 
'sfm__estimator__positive', 
'sfm__estimator__n_alphas', 
'std__with_std', 
'sfm__estimator__random_state', 
'std__copy', 
'lr__normalize', 
'sfm__estimator__copy_X', 
'lr', 
'sfm__estimator__n_jobs', 
'poly__interaction_only', 
'sfm__estimator__fit_intercept', 
'sfm__estimator__tol', 
'sfm__estimator', 
'sfm__estimator__verbose', 
'sfm', 
'sfm__estimator__normalize', 
'std', 
'sfm__estimator__selection', 
'poly__degree', 
'lr__copy_X', 
'sfm__estimator__alphas', 
'lr__fit_intercept', 
'steps', 
'poly__include_bias', 
'sfm__estimator__eps'] 
+0

Не могли бы вы дать нам * [Минимальный, полный и проверенный пример] (// stackoverflow.com/help/mcve)* вашей проблемы? –

+0

Помещая скобки в функцию, тип экземпляра, переданного через присваивание, является возвращаемым типом функции function not type. Я предполагаю, что линия трубопровода ищет функцию как параметр, в котором вы пропускаете нефункцию. – kpie

+2

У меня нет ошибки при выполнении кода. Вы используете python 2 или 3? – acknowledge

ответ

4

Это просто опечатка, вы передаете sfm_threshold и вы должны sfm__threshold (обратите внимание двойной подчеркивание). По крайней мере, это то, что показывает ошибка в самом начале.

Смежные вопросы