我有一个训练有素的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]
正如输出所示,预测完全不同,我的代码有什么问题?谁能帮助我?提前致谢。