我使用SelectFromModel进行特征选择,LogisticRegression作为估计器。我有一个调整数值列和分类列的预处理管道。并将该特征选择管与GridSearchCV管道中的模型结合使用。
在param_grid中,我希望在SelectFromModel方法中访问LogisticRegression的max_iter。所以我试了一下'selectfrommodel__logisticregression__max_iter': [400, 500],。
preprocessor = make_column_transformer(
(num_transformer, make_column_selector(dtype_include=np.number)),
(cat_transformer, make_column_selector(dtype_include=object))
)
fs_pipe = make_pipeline(
preprocessor,
SelectFromModel(estimator=LogisticRegression(solver='saga'))
)
lr_pipe = make_pipeline(fs_pipe, LogisticRegression(n_jobs=-1))
param_grid = {
'selectfrommodel__logisticregression__max_iter': [400, 500],
'logisticregression__penalty': ['l1', 'l2'],
'logisticregression__solver': ['saga'],
'logisticregression__max_iter': [400, 500],
}
lr_grid = GridSearchCV(
estimator=lr_pipe,
param_grid=param_grid,
verbose=1, scoring='f1_micro',
error_score='raise')
lr_grid.fit(trainX, trainY)但是它抛出了这个错误:
ValueError: Invalid parameter selectfrommodel for estimator Pipeline(steps=[('pipeline',
Pipeline(steps=[('columntransformer',
ColumnTransformer(transformers=[('pipeline-1',
Pipeline(steps=[('simpleimputer',
SimpleImputer()),
('minmaxscaler',
MinMaxScaler())]),
<sklearn.compose._column_transformer.make_column_selector object at 0x0000027DBB9E1C48>),
('pipeline-2',
Pipeline(steps=[('simpleimputer',
SimpleImputer(fill_value='missing',
strategy='constant')),
('onehotencoder',
OneHotEncoder(handle_unknown='ignore'))]),
<sklearn.compose._column_transformer.make_column_selector object at 0x0000027DCA939D88>)])),
('selectfrommodel',
SelectFromModel(estimator=LogisticRegression(solver='saga')))])),
('logisticregression', LogisticRegression(n_jobs=-1))]). Check the list of available parameters with `estimator.get_params().keys()`.如何从max_iter param_grid访问LogisticRegression()的estimator参数(在SelectFromModel()中用作estimator)
发布于 2022-09-08 14:46:22
您的selectfrommodel嵌套在lr_pipe下面。按照错误的建议运行lr_pipe.get_params().keys()将提示您注意到这一点。看起来你需要pipeline__selectfrommodel__logisticregression__max_iter。(也许可以考虑跳过make_pipeline和make_column_transformer,这样您就可以为这些步骤指定更短的名称了?您还可以创建一个三步管道,而不是嵌套管道fs_pipe和lr_pipe。
https://stackoverflow.com/questions/73645465
复制相似问题