当 cv.folds > 0 时,R gbm 函数出错
Posted
技术标签:
【中文标题】当 cv.folds > 0 时,R gbm 函数出错【英文标题】:Error in R gbm function when cv.folds > 0 【发布时间】:2014-10-20 06:57:56 【问题描述】:我正在使用 gbm 来预测二进制响应。
当我设置 cv.folds=0 时,一切正常。但是,当 cv.folds > 1 时,当交叉验证的第一次刺激完成时,我得到错误:Error in object$var.levels[[i]] : subscript out of bounds
。有人说这可能是因为某些因子变量在训练或测试数据中缺少水平,但我尝试只使用数字变量仍然会出现此错误。
> gbm.fit <- gbm(model.formula,
+ data=dataall_train,
+ distribution = "adaboost",
+ n.trees=10,
+ shrinkage=0.05,
+ interaction.depth=2,
+ bag.fraction = 0.5,
+ n.minobsinnode = 10,
+ train.fraction=0.5,
+ cv.folds=3,
+ verbose=T,
+ n.cores=1)
CV: 1
CV: 2
CV: 3
Error in object$var.levels[[i]] : subscript out of bounds
有人对此有一些见解吗?谢谢!
回答我自己: 问题解决了。这是因为这个函数中的一个错误。输入数据不能包含模型中变量以外的变量。
【问题讨论】:
这可能是您的数据。没有它,我们前进的速度会很慢。 我在使用 caret R 包时遇到了同样的问题,随后使用包作者的以下建议:github.com/topepo/caret/issues/330 【参考方案1】:我支持这个解决方案:R 函数 gbm() 中的输入数据不能包含不会在您的模型中使用的变量(列)。
【讨论】:
我在使用 caret 包时遇到了类似的问题,使用 github.com/topepo/caret/issues/330 解决了这个问题以上是关于当 cv.folds > 0 时,R gbm 函数出错的主要内容,如果未能解决你的问题,请参考以下文章
用R语言对一个信用卡数据实现logit,GBM,knn,xgboost
R语言使用gbm包的gbm函数构建梯度提升机模型(Gradient Boosting Machine)指定分布为贝努力分布bernoulli