不同语言API之间有多少交叉兼容性?
例如,是否可以在Python中训练和保存模型并以C / C ++或任何其他语言运行?
我会自己尝试,但我的非Python语言技能非常有限。
答案 0 :(得分:1)
您可以像这样将模型转储到文本文件中:
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));
答案 1 :(得分:0)
您可以考虑使用
将模型转储到文本文件中model.get_booster().dump_model('xgb_model.txt', with_stats=True)
然后,经过一些解析后,您可以轻松地在C / C ++中重现.predict()
函数。对于其他人,我不知道将xgboost本地移植到C
答案 2 :(得分:0)
treelite
程序包(research paper,documentation)允许将包括XGBoost在内的基于树的模型编译为优化的C代码,从而使推理速度比本机模型库快得多。 / p>