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

use*_*486 7 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)
Run Code Online (Sandbox Code Playgroud)

我想将此模型移植到另一个将用 C/C++ 编写的系统。要做到这一点,我需要知道 XGboost 训练模型的内部逻辑,如果我没猜错的话,将它们翻译成一系列 if-then-else 语句,如决策树。

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

我正在使用 python 3.7。

小智 8

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)
Run Code Online (Sandbox Code Playgroud)

这个包真正棒的是,它支持许多不同类型的模型,例如

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

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

  • C
  • C#
  • 哈斯克尔
  • 爪哇
  • JavaScript
  • PHP
  • 电源外壳
  • Python
  • 电阻
  • 视觉基础

我希望这有帮助!


Aar*_*ron 5

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