首页 > 解决方案 > 使用一个模型的预测概率来训练另一个模型并保存为一个模型

问题描述

我有一个XGBoost用于某些二进制分类目的的模型。它利用了一些功能,即f1, f2, f3, f4, f5, f6, f7

我想利用另一个LogisticRegression模型,sklearn该模型利用模型的输出和模型的特征XGBoost来进行预测,即必须f1, out进行预测。out模型的预测在哪里XGBoost

我想将这两个模型保存到一个文件中,以了解如何在生产中进行预测。

我怎样才能做到这一点。?

标签: pythonscikit-learnxgboost

解决方案


您需要结合使用FeatureUnionPipeline来实现这一点。

像这样的东西:

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

推荐阅读