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

use*_*764 6 c++ python machine-learning xgboost

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

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

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

当使用相同的保存模型时,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]
Run Code Online (Sandbox Code Playgroud)

C++程序

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

$ ./jl_functions
628180.062500
Run Code Online (Sandbox Code Playgroud)

nit*_*hin 0

a) 您将模型保存为 model.save,它存在特征向量排序问题,您可以尝试使用 model.dump xgboost 在 c++ 中加载模型(python -> c++ 预测分数不匹配)

b)请检查你的Python代码,你没有使用稀疏矩阵来创建模型 - 我的直觉说问题就在这里

免责声明:我不是 C++ 方面的专家或专家,但我发现这可能是预测不匹配的原因,而且我没有任何方便的环境来测试 C++ 并共享结果。