xgboost C API 不会产生与 Python 相同的结果
xgboost C api doesn't produce same results as Python
我有一个非常简单的数据集(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++和共享结果。
- 为什么"do while"循环不断退出,即使条件计算结果为 false?
- valgrind-hellgrind与泄漏检查的结果不同
- Tensorflow对象检测在Python和C++(OpenCV)之间有不同的结果
- 将 c++-Programm 的结果导入 python
- 为什么同一个逻辑方程在python和c++中返回两个不同的结果
- xgboost C API 不会产生与 Python 相同的结果
- 在C /OBJ-C 中运行Tensorflow分类器模型与Python的结果不同
- python 和 c++ 的结果对于嵌套的 for 语句是不同的
- C++(LAPACK,sgels)和Python(Numpy,lstsq)结果之间的差异
- 相同的算术运算在 C++ 和 Python 中给出不同的结果
- 比较CPP和Python上的程序结果
- (欧拉计划#3)试图将Python中的解决方案复制到C++,结果非常糟糕,不知道如何
- Python和C++使用OpenCV计算基本矩阵的结果不同
- Python vs. c++.不同的结果
- 当计算SHA-1摘要时,Python和c++的结果不同
- Python使用ctypes传递char *数组并填充结果
- Murmurhash3的Javascript实现,给出与Murmurhash3相同的结果.cpp Python的sklearn中可用的transform使用Murmurhash3
- 如何在C或c++中获得与Java中的toLowerCase或Python中的string.lower()相同的结果
- 从Excel VBA/Python调用c++ dll时返回不同的结果
- 将 python 结果传递到C++列表框