xgboost C api不会产生与Python相同的结果

时间:2019-10-12 09:34:59

标签: python c++ machine-learning xgboost

我有一个非常简单的数据集(30行32列)。

我编写了一个Python程序来加载数据并训练XGBoost模型,然后将模型保存到磁盘。

我还编译了一个使用libxgboost(C api)的C ++程序,并加载了用于推理的模型。

在使用SAME保存的模型时,Python和C ++对于相同的输入(一行全为零)给出不同的结果。

xgboost为0.90,我在此处附加了所有文件(包括numpy数据文件):

https://www.dropbox.com/s/txao5ugq6mgssz8/xgboost_mismatch.tar?dl=0

这是两个程序的输出(其源文件位于.tar文件中):

Python程序

(在构建模型时会打印一些字符串,然后会打印单个数字输出)

$ python3 jl_functions_tiny.py
Loading data
Creating model
Training model
Saving model
Deleting model
Loading model
Testing model
[587558.2]

C ++程序

(它发出的单个数字显然与单个Python数字输出不匹配)

$ ./jl_functions
628180.062500

2 个答案:

答案 0 :(得分:1)

在python和C ++中,不同的种子参数会导致不同的结果,因为在算法中使用了随机性,请尝试在Python和C ++中的第11行xgb.XGBregressor中设置seed =,甚至使用{ {1}},在C ++中,来自numpy.random.seed(0)

的种子参数

答案 1 :(得分:0)

a)您正在将模型另存为model.save,这与特征向量排序有关,您可以在model.dump中尝试 xgboost load model in c++ (python -> c++ prediction scores mismatch)

b)请检查您未使用稀疏矩阵创建模型的python代码,我的直觉表明问题在这里

免责声明:我不是C ++专家,也不擅长任何其他事情,但是我发现这可能是预测不匹配的原因,而且我没有方便的环境来测试C ++和共享结果。