您需要结合使用 FeatureUnion 和 Pipeline 来实现此目的。
类似这样的:
final_classifier = Pipeline([
('features', FeatureUnion([
('f1', FeatureSelector()),
('out', XGBoostClassifierTransformer()),
])
),
('clf', LogisticRegression()),
])
这里,FeatureSelector() 和 XGBoostClassifierTransformer() 是自定义包装器,您可以轻松地自己制作。您需要实现 fit() 和 transform() 方法,并将输出发送到管道的下一部分。
FeatureUnion 将在其每个内部部件上调用transform(),然后组合输出。管道将获取此输出,然后发送到下一部分,即 LogisticRegression。
这看起来像这样。
X --> final_classifier, Pipeline
|
| <== X is passed to FeatureUnion
\/
features, FeatureUnion
|
| <== X is duplicated and passed to both parts
______________|__________________
| |
| |
\/ \/
f1, FeatureSelector out, XGBoostClassifierTransformer
| |
|<= Only f1 is selected from X | <= All features are used in XGBoost
| |
\/________________________________________\/
|
|
\/
clf, LogisticRegression