python - xgboost C api 不会产生与 Python 相同的结果
问题描述
我有一个非常简单的数据集(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]
C++ 程序
(它发出一个明显与单个 Python 数字输出不匹配的数字)
$ ./jl_functions
628180.062500
解决方案
python 和 C++ 中的不同种子参数可能会导致不同的结果,因为算法中存在随机性,请尝试在第 11 行中设置 seed= 在xgb.XGBregressor
python 和 C++ 中相同,甚至通过 numpy 使用numpy.random.seed(0)
和 C++ 中的种子参数/workspace/include/xgboost/generic_parameters.h
推荐阅读
- c# - .net core 2.x 的 UI
- javascript - JavaScript onclick 可见/隐藏 div - 我该如何解决这个问题?
- javascript - 如何通过数组中xy坐标给出的点画一条线?
- command-line - Lilypond:跳过标题(命令行)
- python - 多级组和重复检查
- javascript - 如何通过其中包含 javascript 的 mongo_go_driver 运行聚合查询?
- python - 正则表达式匹配精确单词
- mysql - 在 MAC .bash 文件中运行 MySQL 语句
- php - 如何使用php在mysql中插入字符串列表
- php - CURL DOMXPath 不同的值