2016-08-13 9 views
1

아래 코드에서 다음 오류가 발생하지만 내 매개 변수가 유효하지 않은 이유를 알 수 없습니다. SelectFromModel은 적합 및 변형 기능을 가진 파이프 라인의 유효한 입력입니다. sklearn의 파이프 라인에서이 매개 변수가 유효하지 않은 이유는 무엇입니까?

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()을 실행

ValueError: Invalid parameter sfm_threshold for estimator Pipeline. 
Check the list of available parameters with 
`estimator.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

괄호를 함수에 추가하면 배정을 통해 전달 된 인스턴스 유형이 함수 유형이 아닌 함수의 반환 유형이됩니다. 내 생각 엔 파이프 라인이 함수가 아닌 함수를 전달하는 매개 변수로 함수를 사용하려고합니다. – kpie

+2

코드를 실행하는 동안 오류가 없습니다. 파이썬 2 또는 3을 사용하고 있습니까? – acknowledge

답변

4

이 간단 인쇄상의 오류입니다, 당신은 sfm_threshold 통과하고 당신은 sfm__threshold (더블 밑줄을 통지)해야한다. 최소한 이것은 처음부터의 오류가 보여주는 것입니다.

관련 문제