对于同一MOD,C++和Python的XGBOOST预测不同

2024-04-26 00:04:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用下面的代码在python中训练了一个模型(在这个例子中,我没有使用测试集,我使用同一个数据集进行训练和预测,以便更容易地说明问题):

params = {'learning_rate':0.1,'obj':'binary:logistic','n_estimators':250, 'scale_pos_weight':0.2, 'max_depth' : 15, 'min_weight' : 1, 'colsample_bytree' : 1, 'gamma' : 0.1, 'subsample':0.95} 

X = np.array(trainingData,dtype = np.uint32) #training data was generated from a csv

X = xgb.DMatrix(np.asmatrix(X), label = Y)

clf = xgb.train(params, X)
clf.save_model('xgb_test.model')
X.save_binary('test.buffer')

answer = clf.predict(X) 

这个预测产生了大约40k个零点和270k个零点

然后使用以下代码将模型加载到c++中:

^{pr2}$

对于c++预测,我得到了大约55k个零。在

我试过以下方法:

  1. 确保使用密集矩阵在python中训练模型,因为xgbooserpredict接受密集矩阵(这个假设来自stackoverflow的一个类似问题)
  2. 使用xgb.列车,而不是Xgbclassifier.fit. 火车进站了,菲特没有
  3. 将训练数据转换为np矩阵np.A矩阵(十) 一。在

有人知道我做错了什么吗?谢谢


Tags: 数据代码模型testmodelsavenp矩阵