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

时间:2018-05-31 00:23:40

标签: xgboost

不同语言API之间有多少交叉兼容性?

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

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

3 个答案:

答案 0 :(得分:1)

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

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

然后,您应该解析文本转储并在C ++中重现预测函数。

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

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

图书馆的使命是:

  • 容易:部署xgboost模型应该尽可能轻松
  • 快速:得益于用于存储树的高效数组数据结构,该库在您的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));

答案 1 :(得分:0)

您可以考虑使用

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

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

答案 2 :(得分:0)

treelite程序包(research paperdocumentation)允许将包括XGBoost在内的基于树的模型编译为优化的C代码,从而使推理速度比本机模型库快得多。 / p>