【发布时间】:2018-11-09 22:04:36
【问题描述】:
不同语言 API 之间有多少交叉兼容性?
例如,是否可以用 Python 训练和保存模型并用 C/C++ 或任何其他语言运行它?
我会自己尝试一下,但是我在非 Python 语言方面的技能非常有限。
【问题讨论】:
标签: xgboost
不同语言 API 之间有多少交叉兼容性?
例如,是否可以用 Python 训练和保存模型并用 C/C++ 或任何其他语言运行它?
我会自己尝试一下,但是我在非 Python 语言方面的技能非常有限。
【问题讨论】:
标签: xgboost
您可以将模型转储到文本文件中,如下所示:
model.get_booster().dump_model('xgb_model.txt')
然后你应该解析文本转储并在 C++ 中重现预测函数。
如果您想节省一些时间并确保使用快速实现,我已经在我称为 FastForest 的小库中实现了这一点:
https://github.com/guitargeek/XGBoost-FastForest
图书馆的使命是:
这里是一个小例子,加载你之前转储的模型并假设模型需要 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)支持将基于树的模型(包括 XGBoost)编译为优化的 C 代码,从而比使用原生模型库更快地进行推理。
【讨论】:
您可以考虑使用将模型转储到文本文件中
model.get_booster().dump_model('xgb_model.txt', with_stats=True)
然后,经过一些解析,您可以轻松地在 C/C++ 中重现 .predict() 函数。对于其余部分,我不知道将 xgboost 本地移植到 C
【讨论】: