XGBoost预测输入维度错误排查求助
XGBoost预测维度不匹配问题解决
核心错误原因
你遇到的报错本质是输入维度不匹配:
C:/buildkite-agent/builds/buildkite-windows-cpu-autoscaling-group-i-08de971ced8a8cdc6-1/xgboost/xgboost-ci-windows/src/predictor/cpu_predictor.cc:377: Check failed: m->NumColumns() == model.learner_model_param->num_feature (1 vs. 170) : Number of columns in data must equal to trained model.
XGBoost的predict方法要求输入必须是二维数组(格式为[样本数, 特征数])。当你用test_point = X_test_xgb[42]取单条样本时,得到的是一维数组(你提到的(170,0)大概率是笔误,实际shape应为(170,))。此时XGBoost会将这个一维数组误识别为[170, 1]的二维结构——也就是170个样本、每个样本仅1个特征,这和训练时的170个特征完全不匹配,因此触发报错。
为什么X_test_xgb[42:43]能正常运行?
切片42:43取到的是一个二维数组,shape为(1, 170),刚好符合[1个样本, 170个特征]的要求,所以模型能正常处理。
你的疑问解答
predict不需要表头:你用numpy数组训练的模型,只关心特征的数量和顺序,和表头没有任何关系,不用考虑表头的问题。- 转置无效的原因:一维数组的转置依然是一维结构,
X_test_xgb[42].T的shape还是(170,),并没有转换成模型需要的二维格式。
解决方法
你可以用两种方式修正输入维度:
- 方式一:保持切片写法
test_point = X_test_xgb[42:43] original_model_prediction = xgb_model.predict(test_point) - 方式二:用
reshape转换一维数组为二维test_point = X_test_xgb[42].reshape(1, -1) # -1自动计算特征数,这里就是170 original_model_prediction = xgb_model.predict(test_point)
内容的提问来源于stack exchange,提问作者Paul1911
相关产品推荐
相关产品推荐

