我正在尝试使用插入符号来查找gbm模型的最佳参数。这段代码与我在其他数据集上使用的代码相同,无法找出错误。
似乎运行模型但无法创建预测。
predictions failed for Fold2: interaction.depth=4, shrinkage=0.005, n.trees=200 Error in apply(tmp, 2, function(x, nm = modelFit$obsLevels) ifelse(x >= :
dim(X) must have a positive length
这是完整的代码:
library(caret)
library(gbm)
myControl <- trainControl(method='cv', number=2, summaryFunction=twoClassSummary,
classProbs=TRUE, savePredictions=TRUE, verboseIter=TRUE)
df1 <- data.frame(Y = round(runif(1000), 0), x1=runif(1000), x2=runif(1000) )
X <- df1[,c('x1','x2')]
Y <- factor(paste('X', df1[,'Y']))
gbm_model <- train(X, Y, method='gbm', metric='ROC', trControl=myControl
,distribution='bernoulli', tuneGrid=expand.grid(.n.trees=seq(100, 200, by=100)
,.interaction.depth=seq(2, 4, by=2), .shrinkage=c(.005)))
有什么建议吗?
编辑:我正在使用gbm 2.1
和caret 5.16.24
答案 0 :(得分:3)
这是一个错误。我今天提交了一个新版本的插入符号,但我会在发送之前进行这些更改。
您的代码和输出之间存在一点脱节。我得到一个额外的警告:“至少有一个类级别不是有效的R变量名称;如果生成类概率,这可能会导致错误,因为变量名称将转换为:X.0,X.1”。在sep = ""
命令中添加paste
,它就会消失。
最高
答案 1 :(得分:1)
如果您尝试运行插入符号模型并且错误地仅包含一个只包含一个因子的因变量,您可能也会收到此错误。