我正在使用以下代码,取自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
原来是一个列表。