管道内的变压器

2024-10-01 09:31:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在scikit学习中建立一个管道。我必须用不同的特性进行不同的转换,然后将它们全部标准化。因此,我为每组列构建了一个带有自定义转换器的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

有没有一种方法可以做到这一点,而无需为每组列构建单独的管道(结合自定义转换器和定标器)?这显然是工作,但只是看起来像无用的重复对我来说。。。谢谢


Tags: 管道pipeline特性scikitfeaturescensustransformationclimate
1条回答
网友
1楼 · 发布于 2024-10-01 09:31:44

我发现了我的错误,我正在切换类的实例化:自定义转换器必须在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())
])

相关问题 更多 >