在多次迭代中全局保存函数内的结果

时间:2018-03-29 11:38:58

标签: r function xgboost

我正在使用以下代码,取自here

我正在尝试为evaluation_log

保存nfold = 2的结果

这是我要修改的行;

xvalidationScores <- as.data.frame(xgboostModelCV$evaluation_log)

我可以使用以下内容全局保存结果;

xvalidationScores <<- as.data.frame(xgboostModelCV$evaluation_log)

然而,这只会保存最后的nfold结果。但我希望保存所有折叠以评估训练/测试错误。

我试过for loop但没有成功。

for(i in 1:2){
xvalidationScores[[i]] <<- as.data.frame(xgboostModelCV$evaluation_log)
}

代码:

searchGridSubCol <- expand.grid(subsample = c(0.5, 0.6), 
                                colsample_bytree = c(0.5, 0.6),
                                max_depth = c(3, 4),
                                min_child = seq(1), 
                                eta = c(0.01)
)

ntrees <- 5

system.time(
rmseErrorsHyperparameters <- apply(searchGridSubCol, 1, function(parameterList){

  #Extract Parameters to test
  currentSubsampleRate <- parameterList[["subsample"]]
  currentColsampleRate <- parameterList[["colsample_bytree"]]
  currentDepth <- parameterList[["max_depth"]]
  currentEta <- parameterList[["eta"]]
  currentMinChild <- parameterList[["min_child"]]
  xgboostModelCV <- xgb.cv(data =  dtrain, nrounds = ntrees, nfold = 2, showsd = TRUE, 
                       metrics = "rmse", verbose = TRUE, "eval_metric" = "rmse",
                     "objective" = "reg:linear", "max.depth" = currentDepth, "eta" = currentEta,                               
                     "subsample" = currentSubsampleRate, "colsample_bytree" = currentColsampleRate
                      , print_every_n = 10, "min_child_weight" = currentMinChild, booster = "gbtree",
                     early_stopping_rounds = 10)

  xvalidationScores <- as.data.frame(xgboostModelCV$evaluation_log)
  rmse <- tail(xvalidationScores$test_rmse_mean, 1)
  trmse <- tail(xvalidationScores$train_rmse_mean,1)
  output <- return(c(rmse, trmse, currentSubsampleRate, currentColsampleRate, currentDepth, currentEta, currentMinChild))

}))

编辑:

这是原始结构(xvalidationScores中没有output。这是一个矩阵。

          V1         V2         V3        V4         V5         V6
1: 0.9537040  0.9750880  0.9856087 0.9696030  0.9860550  0.9936100
2: 0.9023817  0.9007057  0.8997263 0.9046303  0.9051127  0.9041987
3: 0.6000000  0.6000000  0.6000000 0.6000000  0.6000000  0.6000000
4: 1.0000000  1.0000000  1.0000000 1.0000000  1.0000000  1.0000000
5: 8.0000000 10.0000000 12.0000000 8.0000000 10.0000000 12.0000000
6: 0.0100000  0.0100000  0.0100000 0.0500000  0.0500000  0.0500000
7: 1.0000000  1.0000000  1.0000000 1.0000000  1.0000000  1.0000000

当我加入xvalidationScore时,rmseErrorHyperparameters原来是一个列表。

0 个答案:

没有答案