【发布时间】:2014-07-27 16:32:42
【问题描述】:
一个类似的问题是asked 但是答案中的链接指向随机森林示例,它似乎不适用于我的情况。
这是我正在尝试做的一个例子:
gbmGrid <- expand.grid(interaction.depth = c(5, 9),
n.trees = (1:3)*200,
shrinkage = c(0.05, 0.1))
fitControl <- trainControl(
method = "cv",
number = 3,
classProbs = TRUE)
gbmFit <- train(strong~.-Id-PlayerName, data = train[1:10000,],
method = "gbm",
trControl = fitControl,
verbose = TRUE,
tuneGrid = gbmGrid)
gbmFit
一切都很好,我得到了最好的参数。现在,如果我进行预测:
predictStrong = predict(gbmFit, newdata=train[11000:50000,])
我得到一个预测的二进制向量,这很好:
[1] 0 1 0 0 1 0 0 0 0 0 0 0 1 1 0 0 1 1 1 0 0 0 1 ...
但是,当我尝试获取概率时,我得到一个错误:
predictStrong = predict(gbmFit, newdata=train[11000:50000,], type="prob")
Error in `[.data.frame`(out, , obsLevels, drop = FALSE) :
undefined columns selected
问题出在哪里?
附加信息:
traceback()
5: stop("undefined columns selected")
4: `[.data.frame`(out, , obsLevels, drop = FALSE)
3: out[, obsLevels, drop = FALSE]
2: predict.train(gbmFit, newdata = train[11000:50000, ], type = "prob")
1: predict(gbmFit, newdata = train[11000:50000, ], type = "prob")
版本:
R version 3.1.0 (2014-04-10) -- "Spring Dance"
Copyright (C) 2014 The R Foundation for Statistical Computing
Platform: x86_64-unknown-linux-gnu (64-bit)
caret version: 6.0-29
编辑:
我也见过this topic,我没有收到关于变量名的错误,尽管我有几个带下划线的变量名,我认为它是有效的,因为我使用make.names 并获得与原创。
colnames(train) == make.names(colnames(train))
[1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
【问题讨论】:
-
train数据集从何而来?没有它,此代码将无法运行。 -
你应该显示
str(train$strong)的结果。我怀疑您正在进行回归(而不是分类),因为预测值似乎是数字。对于分类,将strong设为非“0”和“1”级别的因子。 -
MrFlick,很遗憾我不能分享数据。 @topepo 我要到周日才能检查,我很确定这是 0 级和 1 级的因素,但是当我能够检查时,我会回复你。当然我想做一个分类,而不是回归。谢谢。
-
如果它是一个因子,您应该在拟合模型时看到一个警告,即因子水平值可能会导致错误(因为它们不是有效的变量名称)。
-
@topepo 问题是,正如你所说的那样,水平是“0”和“1”,将水平改变为“强”和“弱”我得到了你所说的概率。谢谢你。请提供正式的答案,以便我给予您信任并结束问题。