在Caret GBM中,模型拟合失败,并且所有RMSE指标值均丢失:

时间:2018-08-09 11:43:02

标签: r r-caret gbm

我遇到了标题中指出的错误,并通过检查空值,将预测变量更改为数值以及使用中心和小数位数对变量进行预处理,从而浏览了在线发布的类似问题的解决方案有用。

我可以使用Caret for RF中的相同数据以及每个GBM参数的一系列tunegrid选项来运行模型,但是当我为每个GBM参数指定最佳值时,则无法运行模型。

我的火车数据包含回归目标变量(Gross.Salary0),而我的预测变量是factor(binary)或数字。我的数据中没有缺失的值。没有全部变量的数据子集如下:

structure(list(Gross.Salary0 = c(3043.7, 4170, 3148.4, 3678.4, 3586.4,
3126.4), Gender.MALE. = structure(c(1L, 2L, 1L, 1L, 2L, 1L), .Label =  
c("0", "1"), class = "factor"), Certificate...HQA.MASTER.S.DEGREE....Outflow.Date..2. 
= c(0L, 1875929344L, 0L, 1706185636L, 0L, 0L), Certificate...HQA.HONS.I.
= structure(c(1L, 1L, 1L, 1L, 1L, 1L), .Label = c("0", "1"), class = 
"factor"), Year.of.Inflow... = c(2009L, 2009L, 2009L, 2009L, 2009L, 
2009L), Year.of.Inflow..2. = c(4036081L, 4036081L, 4036081L, 4036081L,
4036081L, 4036081L), Age...5....Agency.10. = c(0, 0, 0, 0, 0, 0), 
Inflow.Date..2....Agency.10. = c(0L, 0L, 0L, 0L, 0L, 0L)), row.names = 
c(NA, 6L), class = "data.frame") 

要获得R中Caret GBM的最佳调整参数,我设法运行以下代码:

fit_control2 <- trainControl(method="repeatedcv", number=10, repeats=3, search="grid")

grid <- expand.grid(n.trees=c(10,20,50,100,500,1000),shrinkage=c(0.01,0.05,0.1,0.5),n.minobsinnode = c(3,5,10),interaction.depth=c(1,5,10))

gbm_model2 <-train(Gross.Salary0 ~ ., data=train, method='gbm',trControl=fit_control2, tuneGrid=grid)

gbm_model2

当n.trees = 1000,interaction.depth = 1,收缩率= 0.05和n.m​​inobsinnode = 3时,结果产生最低的RMSE。

我使用最佳调整参数运行最终的GBM模型,但返回模型拟合错误并丢失所有RMSE值。

fit_control3 <- trainControl(method="repeatedcv", number=10, repeats=3, search="grid")

tunegrid <- expand.grid(n.trees=1000, interaction.depth = 1, shrinkage = 0.05, n.minobsinnode = 3)

gbm_model3 <- train(Gross.Salary0 ~ ., data=train, method="gbm", tunegrid =tunegrid, trControl=fit_control3)

除了缺少的RMSE值外,还有50个或更多警告,示例如下:

50: model fit failed for Fold07.Rep2: shrinkage=0.1, interaction.depth=2, n.minobsinnode=10, n.trees=150 Error in (function (x, y, offset = NULL, misc = NULL, distribution = "bernoulli",  : 
unused argument (tunegrid = list(1000, 1, 0.05, 3))

尽管我的目标变量是数字(回归),但我注意到警告中指示的分布显示为bernoulli,因此我已将模型中的分布指定为高斯分布,但R仍返回相同的错误。

谢谢,谢谢。

0 个答案:

没有答案