Для этого вам понадобится комбинация 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