R - 找出 xgboost 模型在预测新数据中期望的列

R - figuring out what columns an xgboost model is expecting in new data for predictions

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

> 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 代码...

您的 XGBoost 版本是多少?了解这一点很重要,因为 XGBoost“模式规范”一直在显着发展。

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

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

我相信您的 xgb.Booster 对象具有这些可用属性,否则它怎么知道需要 38 个特征?

我遇到了同样的问题,像这样提取模型特征后就解决了。

ModelVars<- xgb.importance(feature_names = colnames(our_dataframe_of_data),model=xg_model)

在此之后,只需将我的数据框子集化为 ModelVars 中的数据框即可。即使特征数量少于预期的训练数据集中的特征数量,我也能够使用预测功能并获得分数。