You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Scikit-learn嵌套管道双下划线参数指定失效问题排查

问题原因与解决方案

你犯了一个关键错误:GridSearchCV的第一个参数传入的是单独的clf_model(LDA分类器),而不是你构建好的full_pipeline。

当你把clf_model传给GridSearchCV时,它只会识别LDA自身的参数(比如solver),完全不知道你定义的Pipeline组件(preprocessing、model)。所以你用双下划线指定的preprocessing__xxx和model__xxx会被当成LDA的参数名,而LDA根本没有这些参数,自然抛出Invalid parameter错误。

修正后的代码

把GridSearchCV的第一个参数替换为full_pipeline即可:

from sklearn.model_selection import GridSearchCV

clf_model = LinearDiscriminantAnalysis()

full_pipeline = Pipeline([
    ('preprocessing', pp_pipeline),
    ('model', clf_model),
])
    
param_grid = {
    "preprocessing__dropper__drop_attr": [True, False],
    "model__solver": ["svd", "lsqr", "eigen"],
}

# 注意这里传入的是full_pipeline,不是clf_model
search = GridSearchCV(full_pipeline, param_grid, scoring="f1", return_train_score=True, cv=5, verbose=2, n_jobs=-1)
search.fit(X_train, y_train)

验证逻辑

你之前用full_pipeline.get_params()列出的参数是属于整个Pipeline的,你的param_grid格式完全正确——只要GridSearchCV的estimator是Pipeline对象,它就会自动识别双下划线作为组件的分隔符,正确映射到Pipeline内部的各个子组件参数。

内容的提问来源于stack exchange,提问作者Ted

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 04:45:54