【问题标题】:Port XGBoost model trained in python to another system written in C/C++将用 python 训练的 XGBoost 模型移植到另一个用 C/C++ 编写的系统
【发布时间】:2020-01-28 06:48:10
【问题描述】:

假设我已经成功地在 python 中训练了一个 XGBoost 机器学习模型。

x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=7)
model = XGBClassifier()
model.fit(x_train, y_train)
y_pred = model.predict(x_test)

我想把这个模型移植到另一个用 C/C++ 编写的系统。为此,我需要了解 XGboost 训练模型的内部逻辑,并将其转化为一系列 if-then-else 语句,如决策树,如果我没记错的话。

如何做到这一点?如何找出 XGBoost 训练模型的内部逻辑以在另一个系统上实现它?

我正在使用 python 3.7。

【问题讨论】:

标签: python machine-learning xgboost


【解决方案1】:

有人写了一个脚本来做到这一点。查看https://github.com/popcorn/xgb2cpp

【讨论】:

    【解决方案2】:

    m2cgen 是一个很棒的包,可以将 Scikit-Learn 兼容模型转换为原始代码。如果您正在使用 XGBoosts sklearn 包装器(看起来像您),那么您可以简单地调用如下内容:

    model = XGBClassifier()
    model.fit(x_train, y_train)
     ...
    import m2cgen as m2c
    
    with open('./model.c','w') as f:
        code = m2c.export_to_c(model)
        f.write(code)
    

    这个包最棒的地方在于它支持许多不同类型的模型,例如

    • 线性
    • 支持向量机
    • 随机森林
    • 提升

    还有一件事。 m2cgen还支持多种语言,如

    • C
    • C#
    • 飞镖
    • 哈斯克尔
    • Java
    • JavaScript
    • PHP
    • PowerShell
    • Python
    • R
    • Visual Basic

    我希望这会有所帮助!

    【讨论】:

      【解决方案3】:

      使用任何 ml/dl 模型的推荐方法是使用 flask/bottle(这些是轻量级 python 框架)制作简单的 RESTful API,并在任何语言中全局使用它们。

      如果您正在开发一个包含大量模型的大型项目,您还可以使用 docker 将 RESTful API 容器化。 例如,甚至容器化的 Restful API 也用于在云上部署模型。

      如果您有兴趣了解任何机器学习模型背后的逻辑,请始终查看其源代码(在 GitHub 上)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-10-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-09
        • 1970-01-01
        • 2017-01-18
        相关资源
        最近更新 更多