首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GridSearchCV:无法从GridSearchCV param_grid访问特征选择流水线的分类器参数

GridSearchCV:无法从GridSearchCV param_grid访问特征选择流水线的分类器参数
EN

Stack Overflow用户
提问于 2022-09-08 07:50:13
回答 1查看 21关注 0票数 0

我使用SelectFromModel进行特征选择,LogisticRegression作为估计器。我有一个调整数值列和分类列的预处理管道。并将该特征选择管与GridSearchCV管道中的模型结合使用。

param_grid中,我希望在SelectFromModel方法中访问LogisticRegressionmax_iter。所以我试了一下'selectfrommodel__logisticregression__max_iter': [400, 500],

代码语言:javascript
复制
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)

但是它抛出了这个错误:

代码语言:javascript
复制
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)

EN

回答 1

Stack Overflow用户

发布于 2022-09-08 14:46:22

您的selectfrommodel嵌套在lr_pipe下面。按照错误的建议运行lr_pipe.get_params().keys()将提示您注意到这一点。看起来你需要pipeline__selectfrommodel__logisticregression__max_iter。(也许可以考虑跳过make_pipelinemake_column_transformer,这样您就可以为这些步骤指定更短的名称了?您还可以创建一个三步管道,而不是嵌套管道fs_pipelr_pipe

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73645465

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档