为什么这个参数在sklearn的管道中无效?

Mel*_*nie 2 python machine-learning scikit-learn

我收到以下代码的以下错误,但无法弄清楚为什么我的参数无效.SelectFromModel是管道中的有效输入,因为它具有拟合和变换功能.

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

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}]
Run Code Online (Sandbox Code Playgroud)

当我运行时,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']
Run Code Online (Sandbox Code Playgroud)

lej*_*lot 6

这是一个简单的印刷错误,你通过sfm_threshold,你应该sfm__threshold(注意下划线).至少这是一开始的错误所显示的.