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

如何构建细粒度管道以筛选每个特征列的最佳preprocessing方案

实现细粒度列级预处理最优方案筛选的方法

你原来拆分多步ColumnTransformer的写法虽然可行,但参数配置路径不对,更推荐将所有列的预处理逻辑合并到同一个ColumnTransformer中,再配置网格搜索参数,结构更清晰且易维护:

1. 核心原理

sklearn的网格搜索支持通过双下划线__逐层定位嵌套对象的参数,我们可以直接在参数网格中为ColumnTransformer里绑定不同列的转换器,指定独立的可选预处理方法。

2. 正确配置步骤

首先简化管道结构,无需拆分多个preprocessing步骤:

import pandas as pd
from sklearn.preprocessing import MaxAbsScaler, MinMaxScaler, StandardScaler
from sklearn.compose import ColumnTransformer
from sklearn.pipeline import Pipeline
from sklearn.neural_network import MLPClassifier
from sklearn.model_selection import GridSearchCV

# 替换为你的实际数据
x_data = pd.DataFrame(..., columns=['Variable1', 'Variable2', 'Variable3'])
y_data = ...

# 定义单步列转换器,初始转换器随便指定即可,后续网格搜索会自动替换
col_transformer = ColumnTransformer(
    transformers=[
        ('trans_var1', StandardScaler(), ['Variable1']),
        ('trans_var2', StandardScaler(), ['Variable2']),
        ('trans_var3', StandardScaler(), ['Variable3'])
    ],
    remainder='passthrough'
)

# 组装管道:仅包含预处理+分类器两步
pipeline = Pipeline(steps=[
    ('preprocess', col_transformer),
    ('clf', MLPClassifier())
])

接着配置参数网格,通过[列转换器前缀]__[绑定列的转换器名]的路径,为每个列指定独立的可选预处理方法:

params = {
    # 三个列的预处理选项完全独立,互不影响
    'preprocess__trans_var1': [MinMaxScaler(), MaxAbsScaler(), StandardScaler()],
    'preprocess__trans_var2': [MinMaxScaler(), MaxAbsScaler(), StandardScaler()],
    'preprocess__trans_var3': [MinMaxScaler(), MaxAbsScaler(), StandardScaler()],
    # 分类器参数注意前缀要和管道里的分类器命名对应
    'clf__hidden_layer_sizes': [(100,), (200,)],
    'clf__solver': ['adam', 'lbfgs', 'sgd']
}

# 运行网格搜索
cv = GridSearchCV(pipeline, params, cv=10, verbose=1, n_jobs=-1, refit=True)
cv.fit(x_data, y_data)

3. 结果查看

搜索完成后通过cv.best_params_即可直接查看每一列对应的最优预处理方法,以及分类器的最优参数。

如果你一定要保留原来拆分多步preprocessing的写法,调整参数路径即可,但可读性远低于上述方案:

params = {
    'preprocessing1__columntransformer__transformers__0__1': [MinMaxScaler(), MaxAbsScaler(), StandardScaler()],
    'preprocessing2__columntransformer__transformers__0__1': [MinMaxScaler(), MaxAbsScaler(), StandardScaler()],
    'preprocessing3__columntransformer__transformers__0__1': [MinMaxScaler(), MaxAbsScaler(), StandardScaler()],
    # 后续接分类器参数
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 08:06:05