遍历sklearn管道中的所有列



我试图将PCA的结果加入到原始特征中,为此,我尝试了PCA的FeatureUnion与列转换器,仅passthrough所有列

feature_selector = FeatureUnion(
[
("original", make_column_transformer(('drop', []), reminder='passthrough'),
("pca", PCA())
])
my_pipeline = make_pipeline(preprocessor, feature_selector, model)

但这似乎有点违反直觉。
有没有更干净的方法?也许是一个选择所有列而不是列转换器的功能选择器?

我认为也许最干净的方法是使用FunctionTransformer。特别注意,参数func的默认值为您提供了一个"标识转换器":

[…如果func为None,则func将是恒等函数。

这里有另一种方法,只使用ColumnTransformer。这里最丑陋的地方(IMO)是选择每个变压器中的所有列;有许多方法可以指定它,但到目前为止,最干净的似乎是空白/默认make_column_selector

ColumnTransformer([
('pass', "passthrough", make_column_selector()),
('pca', PCA(), make_column_selector()),
])

添加,我发现了另一种方法…

只要使用make_pipeline('passthrough'),代码就能正常工作

feature_selector = FeatureUnion([
("original", make_pipeline('passthrough')),
("pca", PCA())
])
my_pipeline = make_pipeline(preprocessor, feature_selector, model)

最新更新