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



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

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']

这是一个简单的排版错误,您传递sfm_threshold,您应该传递sfm__threshold(注意下划线)。至少这是最开始的错误所显示的。

相关内容

  • 没有找到相关文章

最新更新