传递 sklearn 管道中的所有列
passthrough all columns in sklearn pipeline
我正在尝试将 PCA 的结果加入到原始特征中,为此我尝试了 PCA 的 FeatureUnion
和一个列变换器,它只是 passthrough
所有列
feature_selector = FeatureUnion(
[
("original", make_column_transformer(('drop', []), reminder='passthrough'),
("pca", PCA())
])
my_pipeline = make_pipeline(preprocessor, feature_selector, model)
但这似乎有点违反直觉。
有没有更清洁的方法来做到这一点?也许是 select 或 select 所有列而不是列转换器的功能?
我认为也许最简洁的方法是使用 FunctionTransformer
。请特别注意,参数 func
的默认值为您提供了一个“身份转换器”:
[...] If func is None, then func will be the identity function.
为了添加,我找到了另一种方法。
简单地使用 make_pipeline('passthrough')
并且此代码按预期工作
feature_selector = FeatureUnion(
[
("original", make_pipeline('passthrough'),
("pca", PCA())
])
my_pipeline = make_pipeline(preprocessor, feature_selector, model)
这是另一种方法,只使用 ColumnTransformer
。这里的主要丑陋之处(IMO)是选择每个变压器中的所有列;有很多方法可以指定它,但到目前为止最干净的似乎是 blank/default make_column_selector
.
ColumnTransformer([
('pass', "passthrough", make_column_selector()),
('pca', PCA(), make_column_selector()),
])
我正在尝试将 PCA 的结果加入到原始特征中,为此我尝试了 PCA 的 FeatureUnion
和一个列变换器,它只是 passthrough
所有列
feature_selector = FeatureUnion(
[
("original", make_column_transformer(('drop', []), reminder='passthrough'),
("pca", PCA())
])
my_pipeline = make_pipeline(preprocessor, feature_selector, model)
但这似乎有点违反直觉。
有没有更清洁的方法来做到这一点?也许是 select 或 select 所有列而不是列转换器的功能?
我认为也许最简洁的方法是使用 FunctionTransformer
。请特别注意,参数 func
的默认值为您提供了一个“身份转换器”:
[...] If func is None, then func will be the identity function.
为了添加,我找到了另一种方法。
简单地使用 make_pipeline('passthrough')
并且此代码按预期工作
feature_selector = FeatureUnion(
[
("original", make_pipeline('passthrough'),
("pca", PCA())
])
my_pipeline = make_pipeline(preprocessor, feature_selector, model)
这是另一种方法,只使用 ColumnTransformer
。这里的主要丑陋之处(IMO)是选择每个变压器中的所有列;有很多方法可以指定它,但到目前为止最干净的似乎是 blank/default make_column_selector
.
ColumnTransformer([
('pass', "passthrough", make_column_selector()),
('pca', PCA(), make_column_selector()),
])