我试图将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)