【问题标题】:Run xgboost model on single test data point在单个测试数据点上运行 xgboost 模型
【发布时间】:2018-02-05 14:43:21
【问题描述】:

我正在尝试在单个测试数据点上使用 Xg 提升模型。

a <- data.frame(satisfaction_level=0.14,
                     last_evaluation=0.92,
                     number_project=2,
                     average_montly_hours=350,
                      time_spend_company=5,
                   Work_accident=0,
                   promotion_last_5years=1,
                   sales=factor("sales",levels=levels(Bdata$sales)),

                 salary=factor("medium",levels=levels(Bdata$salary)))
#Converting it into matrix format
str(a) 
a <- as.data.frame.model.matrix(a)

当我使用模型进行预测时,我得到了以下错误

xgb.preds = predict(xgb.model, a) 

xgb.DMatrix 中的错误(新数据,缺失 = 缺失): xgb.DMatrix: 不支持从列表构造

使用以下方法创建模型:

xgb.model <- xgboost(param =param,  data = xgb.train.data,nrounds = 1500 ,eta = 0.05,subsample = 1 )

Bdata 包含:

head(Bdata)
  satisfaction_level last_evaluation number_project average_montly_hours time_spend_company Work_accident left promotion_last_5years sales salary
1               0.38            0.53              2                  157                  3             0    1                     0 sales    low
2               0.80            0.86              5                  262                  6             0    1                     0 sales medium
3               0.11            0.88              7                  272                  4             0    1                     0 sales medium
4               0.72            0.87              5                  223                  5             0    1                     0 sales    low
5               0.37            0.52              2                  159                  3             0    1                     0 sales    low
6               0.41            0.50              2                  153                  3             0    1                     0 sales    low
> 

【问题讨论】:

  • 你能分享你的Bdata吗?你在使用xgboost 库吗?另外,添加如何创建xgb.model 的代码。
  • 请发布一个可重现的示例,说明您是如何做到这一点的。
  • @suchait 添加了编辑
  • 但是我对预测单个数据点更感兴趣,因为我可以通过简单地使用 Predict the model on test data xgb.preds = predict(xgb.model, xgb.test.数据)
  • xgb.train.data 和 Bdata 一样吗?您是否在 Bdata 上训练您的模型?

标签: r predict xgboost


【解决方案1】:

您不应使用 as.data.frame.model.matrix。您的 a 对象仍然是一个 data.frame。您需要使用a &lt;- as.matrix(a)

有关使用 iris 数据集的可行示例,请参见下文。

library(xgboost)

x = as.matrix(iris[, 1:4])
y = as.numeric(factor(iris[, 5]))-1

model <- xgboost(data = x, label = y, nrounds = 10)

new <- data.frame(Sepal.Length = 5.1,
                  Sepal.Width = 3.5,
                  Petal.Length = 1.4,
                  Petal.Width = 0.2)

#error because it is a data.frame
preds <- predict(model, newdata = new)

# Error in xgb.DMatrix(newdata, missing = missing) : 
#   xgb.DMatrix: does not support to construct from  list

# This works because data.frame is turned into a matrix
preds <- predict(model, newdata = as.matrix(new))

【讨论】:

    猜你喜欢
    • 2021-12-23
    • 1970-01-01
    • 2019-08-18
    • 2021-01-31
    • 1970-01-01
    • 1970-01-01
    • 2020-07-02
    • 1970-01-01
    • 2021-06-06
    相关资源
    最近更新 更多