当 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语言对一个信用卡数据实现logit,GBM,knn,xgboost

了解 R gbm 包中的树结构

R中的gbm崩溃

R使用gbm包构建gbdt模型进行回归分析实战

R语言使用gbm包的gbm函数构建梯度提升机模型(Gradient Boosting Machine)指定分布为贝努力分布bernoulli