【发布时间】:2017-04-09 10:01:43
【问题描述】:
我是 R 新手,我想使用 XGBoost 预测测试集中的 Class 变量。我的训练数据集如下所示。
> str(train)
'data.frame': 5000 obs. of 37 variables:
$ ID : int 1 2 3 4 5 6 7 8 9 10 ...
$ A1 : num 0.36 0.33 0.33 0.31 0.33 0.31 0.3 0.3 0.3 0.3 ...
$ A2 : num 0.45 0.4 0.4 0.4 0.37 0.37 0.4 0.4 0.35 0.37 ...
$ A3 : num 0.47 0.42 0.4 0.4 0.4 0.38 0.42 0.42 0.38 0.38 ...
$ A4 : num 0.37 0.31 0.33 0.31 0.31 0.3 0.33 0.34 0.3 0.3 ...
$ A5 : num 0.33 0.33 0.31 0.33 0.31 0.31 0.3 0.31 0.3 0.3 ...
$ A6 : num 0.4 0.4 0.4 0.37 0.37 0.4 0.4 0.38 0.37 0.38 ...
$ A7 : num 0.42 0.4 0.4 0.4 0.38 0.4 0.42 0.42 0.38 0.4 ...
$ A8 : num 0.31 0.33 0.31 0.31 0.3 0.31 0.34 0.31 0.3 0.28 ...
$ A9 : num 0.33 0.31 0.33 0.31 0.31 0.3 0.31 0.3 0.3 0.3 ...
$ A10 : num 0.4 0.4 0.37 0.37 0.4 0.4 0.38 0.37 0.38 0.37 ...
$ A11 : num 0.4 0.4 0.4 0.38 0.4 0.4 0.42 0.4 0.4 0.35 ...
$ A12 : num 0.33 0.31 0.31 0.3 0.31 0.31 0.31 0.3 0.28 0.3 ...
$ A13 : num 0.4 0.36 0.33 0.33 0.33 0.3 0.31 0.31 0.31 0.3 ...
$ A14 : num 0.49 0.44 0.4 0.39 0.39 0.39 0.42 0.44 0.37 0.36 ...
$ A15 : num 0.52 0.46 0.41 0.41 0.41 0.41 0.46 0.46 0.41 0.41 ...
$ A16 : num 0.4 0.33 0.32 0.31 0.32 0.32 0.35 0.35 0.29 0.29 ...
$ A17 : num 0.36 0.33 0.33 0.33 0.3 0.3 0.31 0.31 0.3 0.3 ...
$ A18 : num 0.44 0.4 0.39 0.39 0.39 0.39 0.44 0.42 0.36 0.37 ...
$ A19 : num 0.46 0.41 0.41 0.41 0.41 0.42 0.46 0.44 0.41 0.39 ...
$ A20 : num 0.33 0.32 0.31 0.32 0.32 0.33 0.35 0.33 0.29 0.31 ...
$ A21 : num 0.33 0.33 0.33 0.3 0.3 0.3 0.31 0.31 0.3 0.3 ...
$ A22 : num 0.4 0.39 0.39 0.39 0.39 0.4 0.42 0.37 0.37 0.36 ...
$ A23 : num 0.41 0.41 0.41 0.41 0.42 0.46 0.44 0.39 0.39 0.39 ...
$ A24 : num 0.32 0.31 0.32 0.32 0.33 0.35 0.33 0.31 0.31 0.29 ...
$ A25 : num 0.4 0.35 0.33 0.33 0.33 0.33 0.31 0.31 0.29 0.29 ...
$ A26 : num 0.49 0.47 0.42 0.39 0.39 0.4 0.42 0.4 0.36 0.36 ...
$ A27 : num 0.53 0.5 0.44 0.41 0.41 0.41 0.44 0.41 0.38 0.38 ...
$ A28 : num 0.41 0.39 0.34 0.31 0.31 0.31 0.34 0.33 0.29 0.28 ...
$ A29 : num 0.35 0.33 0.33 0.33 0.33 0.31 0.31 0.31 0.29 0.31 ...
$ A30 : num 0.47 0.42 0.39 0.39 0.4 0.42 0.4 0.4 0.36 0.34 ...
$ A31 : num 0.5 0.44 0.41 0.41 0.41 0.43 0.41 0.41 0.38 0.36 ...
$ A32 : num 0.39 0.34 0.31 0.31 0.31 0.34 0.33 0.31 0.28 0.28 ...
$ A33 : num 0.33 0.33 0.33 0.33 0.31 0.31 0.31 0.31 0.31 0.31 ...
$ A34 : num 0.42 0.39 0.39 0.4 0.42 0.42 0.4 0.37 0.34 0.34 ...
$ A35 : num 0.44 0.41 0.41 0.41 0.43 0.43 0.41 0.39 0.36 0.36 ...
$ Class: **Factor** w/ 6 levels "A","B","C","D",..: 3 3 3 3 3 3 3 3 4 4 ...
我的测试数据集看起来完全一样,只是 Class 属性为空。我已使用此代码来预测我的测试数据集的 Class。
train <- read.csv("cse_DS_Intro2TRAIN.csv")
test <- read.csv("cse_DS_Intro2TEST.csv")
setDT(train)
setDT(test)
labels <- train$Class
ts_label <- test$Class
new_tr <- model.matrix(~.+0,data = train[,-c("Class"),with=F])
new_ts <- model.matrix(~.+0,data = test[,-c("Class"),with=F])
labels <- as.numeric(labels)-1
ts_label <- as.numeric(ts_label)-1
dtrain <- xgb.DMatrix(data = new_tr,label = labels)
dtest <- xgb.DMatrix(data = new_ts,label=ts_label)
params <- list(
booster = "gbtree",
objective = "binary:logistic",
eta=0.3,
gamma=0,
max_depth=6,
min_child_weight=1,
subsample=1,
colsample_bytree=1
)
xgbcv <- xgb.cv(params = params
,data = dtrain
,nrounds = 100
,nfold = 5
,showsd = T
,stratified = T
,print.every.n = 10
,early.stop.round = 20
,maximize = F
)
当我运行上面的代码时,我得到了这个错误。
Error in xgb.iter.update(fd$bst, fd$dtrain, iteration - 1, obj) :
[16:49:39] amalgamation/../src/objective/regression_obj.cc:108: label must
be in [0,1] for logistic regression
是否可以在 R 中使用 XGBoost 预测因子类型数据?
附:之前使用过随机森林来预测类变量,效果很好。
【问题讨论】:
-
请使用适当的工具来格式化您的问题。你可以使用
str()函数来展示你的数据是什么样子的(至少我觉得它更直观)。 -
您的
Class变量是字符串还是因子?错误消息暗示该函数需要二进制数字格式的目标/类。 -
@ulfelder 这是一个因素。我已经包含了我的训练数据集的屏幕截图。
-
屏幕截图不能作为可重复的示例,如果您真的想要解决问题,您可能需要发布这些内容。
-
你的目标类如果它们像 1 和 2,只需将它们降低到 0 和 1。那么它应该可以工作。
标签: r prediction xgboost