gpt4 book ai didi

python - sklearn ColumnTransformer : Duplicate columns in transformers

转载 作者:行者123 更新时间:2023-12-05 07:02:41 25 4
gpt4 key购买 nike

我正在寻求使用 sklearn 的 ColumnTransformer 函数构建数据预处理管道的帮助。

目前我的流水线看起来像这样:

from scipy.stats.mstats import winsorize 
from sklearn.compose import ColumnTransformer
from sklearn.impute import SimpleImputer

ColumnTransformer(remainder='passthrough',
transformers=[
('Winsorize', FunctionTransformer(winsorize,
kw_args={'axis': 0, 'inplace': False, 'limits': [0, 0.01]}), ['feat_1','feat_2']),
('num_impute', SimpleImputer(strategy='median'), ['feat_3', 'feat_4']),
])

请注意,每个转换器都提供了一组独特的功能。

我遇到的问题是如何对相同的特征应用堆叠分析。例如,

ColumnTransformer(remainder='passthrough',
transformers=[
('Winsorize', FunctionTransformer(winsorize,
kw_args={'axis': 0, 'inplace': False, 'limits': [0, 0.01]}), ['feat_1','feat_2']),
('num_impute', SimpleImputer(strategy='median'), ['feat_1', 'feat_2', 'feat_3']),
])

请注意,为两个变压器提供了 feat_1 和 feat_2。

像这样的管道将为 feat_1 和 feat_2 创建重复的列(两列基于 Winsorize,两列基于 num_impute)

最佳答案

据我了解,您可以使用两个 ColumnTransformer 和一个 FeatureUnion 来实现您想要的。一个 ColumnTransformer 将使用 remainder='passthrough' 来保留除被转换的列之外的所有列,另一个将使用 remainder='drop' .这可能看起来像这样:

from sklearn.pipeline import FeatureUnion

ct1 = ColumnTransformer(
remainder='passthrough',
transformers=[(
'Winsorize', FunctionTransformer(
winsorize,
kw_args={'axis': 0, 'inplace': False, 'limits': [0, 0.01]}
),
['feat_1', 'feat_2']
)]
)

ct2 = ColumnTransformer(
remainder='drop',
transformers=[('num_impute', SimpleImputer(strategy='median'), ['feat_1', 'feat_2', 'feat_3'])],
)

union = FeatureUnion([('ct1', ct1), ('ct2', ct2)])

关于python - sklearn ColumnTransformer : Duplicate columns in transformers,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63475704/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com