python - 将用 python 训练的 XGBoost 模型移植到另一个用 C/C++ 编写的系统

标签 python machine-learning xgboost

假设我已经在 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。

最佳答案

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#
  • 飞镖
  • Haskell
  • Java
  • JavaScript
  • PHP
  • PowerShell
  • python
  • 电话
  • Visual Basic

  • 我希望这有帮助!

    关于python - 将用 python 训练的 XGBoost 模型移植到另一个用 C/C++ 编写的系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58143075/

    相关文章:

    python - Spark SQL 分区依据、窗口、排序依据、计数

    python - Python 中是否有相当于 Unix 中 vfork 的工具?

    python - 如何向矢量化数据集添加特征?

    python - xgboost 的哪些功能受种子(random_state)影响?

    python - XGBClassifier 的特征重要性

    包含双引号字符的python字符串

    machine-learning - 缩减文本文档采样

    machine-learning - 我的 sklearn 管道是否也会缩放我的因变量 y?

    python - 提取每个终端节点的路径

    python - 添加来自不同数据框的值