首页 > 解决方案 > R - 找出 xgboost 模型期望在新数据中预测的列

问题描述

我们有一个.model包含 xgboost 模型的文件。这是我们加载模型的代码片段:

> xg_model <- xgb.load("../model_outputs/our_saved_model.model")
> xg_model
##### xgb.Booster
raw: 1.6 Mb 
xgb.attributes:
  niter
niter: 149

我没有创建此模型,但我的任务是将新数据传递给模型以进行预测。不幸的是,我遇到了这个错误:

Error in predict.xgb.Booster(xg_model, xgb.DMatrix(as.matrix(our_dataframe_of_data))) : 
  [01:34:01] amalgamation/../src/learner.cc:1183: Check failed: learner_model_param_.num_feature >= p_fmat->Info().num_col_ (38 vs. 40) : Number of columns does not match number of features in booster.

...所以很明显我们的数据框有 40 列,但是这个模型被训练为期望有 38 列的数据框。xg_model尚不清楚我们所期待的究竟是哪 38 列。是否有一个函数可以调用/绘制图形/等,可以显示模型训练的 38 列?我们目前只有经过训练的模型,但没有训练模型的R代码......

标签: rxgboost

解决方案


你的 XGBoost 版本是多少?知道这一点很重要,因为 XGBoost “模式规范”已经发展得相当显着。

现在,您应该探索xgb.Booster对象上可用的属性。查看它是否定义了nfeaturesfeature_names属性:

print(xg_model$nfeatures)
print(xg_model$feature_names)

我相信您的xgb.Booster对象具有这些可用属性,因为它怎么知道需要 38 个功能?


推荐阅读