管道内的 ColumnTransformer

Posted

技术标签:

【中文标题】管道内的 ColumnTransformer【英文标题】:ColumnTransformer inside a Pipeline 【发布时间】:2021-03-05 01:28:24 【问题描述】:

我正在 scikit-learn 中构建管道。我必须对不同的特性进行不同的转换,然后将它们全部标准化。所以我为每组列构建了一个带有自定义转换器的ColumnTransformer

transformation_pipeline = ColumnTransformer([
    ('adoption', TransformAdoptionFeatures, features_adoption),
    ('census', TransformCensusFeaturesRegr, features_census),
    ('climate', TransformClimateFeatures, features_climate),
    ('soil', TransformSoilFeatures, features_soil),
    ('economic', TransformEconomicFeatures, features_economic)
],
    remainder='drop')

然后,由于我想创建两个不同的管道来标准化和规范化我的功能,我正在考虑将transformation_pipeline 和缩放器合并到一个管道中:

full_pipeline_stand = Pipeline([
    ('transformation', transformation_pipeline()),
    ('scaling', StandardScaler())
])

但是,我收到以下错误:

TypeError: 'ColumnTransformer' object is not callable

有没有办法在不为每组列构建单独的管道(结合自定义转换器和缩放器)的情况下做到这一点?这显然有效,但对我来说似乎是无用的重复......谢谢!

【问题讨论】:

【参考方案1】:

我发现了我的错误,我正在切换类的实例化:自定义转换器必须在 ColumnTransformer 内实例化,而 ColumnTransformer 不必在管道内实例化。

正确的代码如下:

transformation_pipeline = ColumnTransformer([
    ('adoption', TransformAdoptionFeatures(), features_adoption),
    ('census', TransformCensusFeaturesRegr(), features_census),
    ('climate', TransformClimateFeatures(), features_climate),
    ('soil', TransformSoilFeatures(), features_soil),
    ('economic', TransformEconomicFeatures(), features_economic)
],
    remainder='drop')

full_pipeline_stand = Pipeline([
    ('transformation', transformation_pipeline),
    ('scaling', StandardScaler())
])

【讨论】:

以上是关于管道内的 ColumnTransformer的主要内容,如果未能解决你的问题,请参考以下文章

访问数据流管道内的文件

管道内的吞咽状况

一个数据流作业内的并行管道

gitlab yaml管道内的while循环

解析字符串中管道分隔符内的文本[重复]

GitLab Runner CI 管道内的 SSH 连接无法验证主机密钥