xgboost从numpy数组创建dmatrix时预测错误结果

时间:2019-05-21 06:19:28

标签: pandas numpy xgboost

我有一个训练有素的XGBoost模型,当我在测试过程中从熊猫数据帧创建xgboost dmatrix时,该模型预测良好。但是,当我从numpy数组创建xgboost dmatrix时,该模型总是会预测错误的结果。

加载数据和模型

import xgboost as xgb
import pandas as pd
import numpy as np
from PIL import Image

# load data
img_obj = Image.open('bob_digit/5/aaaa0_x0_y2.bmp')
data_list = list((255 - np.array(img_obj)).reshape(-1))

# load bst model
bst_model = xgb.Booster({'bthread': 2})
bst_model.load_model('bob_digit/bob_digit_classification.model')

预测正确,从数据框创建dmatrix

df = pd.DataFrame()
col_names = ['f%d' % i for i in range(680)]
df = df.append(pd.Series(data=data_list, index=col_names), ignore_index=True)

result1 = bst_model.predict(xgb.DMatrix(df))
print(np.around(result1[0], decimals=2))

输出:

  

[0.00 0.00 0.00 0.00 1.00 0.00 0.00 0.00 0.00]

预测正确,从numpy数组创建dmatrix:

np_arr = np.zeros(shape=(1, 680))
np_arr[0] = data_list

result2 = bst_model.predict(xgb.DMatrix(np_arr))
print(np.around(result2[0], decimals=2))

输出:

  

[0.03 0.20 0.00 0.00 0.09 0.58 0.02 0.02 0.08]

正如输出所示,预测完全不同,我的代码有什么问题?谁能帮助我?提前致谢。

0 个答案:

没有答案