如何使用R中的h2o.grid在精细尺度上找到验证错误作为时期数的函数

时间:2016-08-29 13:08:16

标签: r neural-network deep-learning h2o

我有一个非常嘈杂的数据集,有2000个观测值和42个特征(财务数据),我正在执行二进制分类。在这里,我使用h2o.grid调整网络并提供验证集。我已经设置了epochs=1000,并且当5个评分事件(stopping_rounds=5, stopping_tolerance=0.01)的错误分类错误没有提高≥1%时,我强制停止训练。我很想知道最小化验证错误的epochs的值是什么。

hyper_params = list(rho = c(0.9,0.95,0.99),
                 epsilon = 10^(c(-10, -8, -6, -4)),
                 hidden=list(c(64, 64)),
                 activation=c("Tanh", "Rectifier", "RectifierWithDropout"))
grid = h2o.grid("deeplearning", x = predictors, y = response,
                training_frame = tempTrain, validation_frame = tempValid,
                grid_id="h2oGrid10", hyper_params = hyper_params,
                adaptive_rate = TRUE, stopping_metric="misclassification",
                variable_importances = TRUE, epochs = 1000,
                stopping_rounds=5, stopping_tolerance=0.01, max_w2 = 20)

根据this问题,解决方案应如下:

gridErr = h2o.getGrid("h2oGrid10", sort_by="err", decreasing=FALSE)
best_model = h2o.getModel(gridErr@model_ids[[1]])
solution = rev(best_model@model$scoring_history$epochs)[1]

solution=1000。无论如何,检查scoring_history我们观察到以下非常模糊的输出。

cbind(best_model@model$scoring_history$epochs,
+       best_model@model$scoring_history$validation_classification_error)
      [,1]      [,2]
 [1,]    0       NaN
 [2,]   10 0.4971347
 [3,]  160 0.4813754
 [4,]  320 0.4770774
 [5,]  490 0.4799427
 [6,]  660 0.4727794
 [7,]  840 0.4713467
 [8,] 1000 0.4727794
 [9,] 1000 0.4713467

事实上,验证错误的全局最小值似乎与840个时期和1000个时期相对应。我尝试了不同的设置,我仍然得到最佳的纪元数对应于最初设定的纪元数。考虑到stopping_rounds=5stopping_tolerance=0.01的保守值,我很惊讶地观察到如此大量的最佳时期,所以我想知道我是否遗漏了一些重要的东西。如何以更精细的比例(即1,2,......而不是10,160,......)检索最佳的历元数?

编辑:答案在幻灯片8 here。发生的事情是在执行最后一次迭代时会覆盖最佳模型。无论如何,我用参数train_samples_per_iteration玩了一段时间,但我仍然无法用更精细的规模观察验证错误的演变。有什么想法吗?

0 个答案:

没有答案