【问题标题】:XGBoost `.predict()` without label or target column?XGBoost `.predict()` 没有标签或目标列?
【发布时间】:2020-06-21 03:36:15
【问题描述】:

我正在尝试使用 XGBoost 对测试数据集没有标签的数据集进行预测。当没有提供目标列时,如何使 xgboost 模型不会失败?

# TRAIN_DATA looks similar to TEST_DATA except TEST_DATA does not have a `target` column

import xgboost as xgb
# read in data
dtrain = xgb.DMatrix(TRAIN_DATA, label=TRAIN_DATA.target)
dtest = xgb.DMatrix(TEST_DATA)
# specify parameters via map
param = {'max_depth':2, 'eta':1, 'objective':'binary:logistic' }
num_round = 2
bst = xgb.train(param, dtrain, num_round)
# make prediction
preds = bst.predict(dtest)

输出:

                raise ValueError(msg.format(self.feature_names,
>                                           data.feature_names))
E               ValueError: feature_names mismatch: ['geohash', 'uupm', 'driver_supply', 'requested_at', 'target'] ['geohash', 'uupm', 'driver_supply', 'requested_at']
E               expected target in input data

../venvs/venv3/lib/python3.6/site-packages/xgboost/core.py:1541: ValueError

【问题讨论】:

  • 训练时您的特征名称不应包含target
  • 为什么?只要我指定label=target,它就不应该使用目标列
  • 您的训练数据集中有“目标”(正如@Narendra_Prasath 所说) - 这是您的问题
  • 不,考虑在现实世界中使用您的模型。您将无法访问标签,但您仍想生成预测(进行推理)
  • 本教程介绍了如何从训练数据集中删除“目标”:datacamp.com/community/tutorials/xgboost-in-python

标签: python machine-learning xgboost training-data inference


【解决方案1】:

试试下面的代码:

选择除target列之外的所有列,如下所示

TRAIN_DATA[TRAIN_DATA.columns.difference(['target'])]

您可以更改代码以训练您的功能:

dtrain = xgb.DMatrix(TRAIN_DATA[TRAIN_DATA.columns.difference(['target'])], label=TRAIN_DATA.target)

理想情况下,对于培训,您不应公开您的 target 列以获取功能。

您可以毫无问题地进行推理。

【讨论】:

猜你喜欢
  • 2020-11-25
  • 2019-12-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-16
  • 2021-05-31
  • 1970-01-01
  • 2022-08-17
  • 2021-01-02
相关资源
最近更新 更多