是否可以在 Python 中训练 xgboost 模型并在 运行 中部署它 C/C++?

Is it possible to train an xgboost model in Python and deploy it Run it in C/C++?

不同语言 API 之间的交叉兼容性如何?

例如,是否可以在 Python 和 运行 中用 C/C++ 或任何其他语言训练和保存模型?

我会自己尝试,但是我在非Python语言方面的技能非常有限。

您可以考虑使用

将您的模型转储到文本文件中
model.get_booster().dump_model('xgb_model.txt', with_stats=True)

然后,经过一些解析,您可以轻松地在 C/C++ 中重现 .predict() 函数。对于其余部分,我不知道 xgboost 到 C

的本地移植

您可以像这样将模型转储到文本文件中:

model.get_booster().dump_model('xgb_model.txt')

然后你应该解析文本转储并用 C++ 重现预测函数。

我已经在一个我称之为 FastForest 的小库中实现了这个,如果您想节省一些时间并确保使用快速实现:

https://github.com/guitargeek/XGBoost-FastForest

图书馆的使命是:

  • 简单:部署您的 xgboost 模型应该尽可能轻松
  • Fast:感谢用于存储树的高效 structure-of-array 数据结构,这个库在您的 CPU 和内存上非常容易(大约在预测中比 xgboost 快 3 到 5 倍)
  • 安全:FastForest 对象是不可变的,因此它们是多线程环境中的绝佳选择
  • 可移植:FastForest除了C++标准库外没有任何依赖

这是一个小用法示例,加载您之前转储的模型并假设该模型需要 5 个特征:

std::vector<std::string> features{"f0",  "f1",  "f2",  "f3",  "f4"};
FastForest fastForest("xgb_model.txt", features);

std::vector<float> input{0.0, 0.2, 0.4, 0.6, 0.8};
float output = fastForest(input.data());

当您创建 FastForest 时,您必须告诉它您打算以何种顺序传递功能,因为文本文件不存储功能的顺序。

另请注意,FastForest 不会为您进行逻辑转换,因此为了重现 predict_proba() 您需要应用逻辑转换:

float proba = 1./(1. + std::exp(-output));

treelite 程序包 (research paper, documentation) 支持将 tree-based 模型(包括 XGBoost)编译为优化的 C 代码,从而使推理速度比原生模型库快得多。