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

xgboost C api doesn't produce same results as Python

本文关键字:Python 结果 API xgboost      更新时间:2023-10-16

我有一个非常简单的数据集(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文件中(:

蟒蛇程序

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

$ 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

python 和 C++ 中的不同种子参数可能会导致不同的结果,因为在算法中存在随机性的用法,尝试在第 11 行中设置 seed=xgb.XGBregressor在 python 和 C++ 中相同,甚至使用numpy.random.seed(0)通过 numpy 和 C++ 种子参数/workspace/include/xgboost/generic_parameters.h

a( 您将模型保存为 model.save 在特征向量排序方面存在问题,您可以使用 model.dump 尝试使用 C++ 中的 Xgboost 负载模型(Python -> C++ 预测分数不匹配(

b(请检查您的python代码是否没有使用稀疏矩阵来创建模型-我的直觉说问题在这里

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