我有一个非常嘈杂的数据集,有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=5
和stopping_tolerance=0.01
的保守值,我很惊讶地观察到如此大量的最佳时期,所以我想知道我是否遗漏了一些重要的东西。如何以更精细的比例(即1,2,......而不是10,160,......)检索最佳的历元数?
编辑:答案在幻灯片8 here。发生的事情是在执行最后一次迭代时会覆盖最佳模型。无论如何,我用参数train_samples_per_iteration
玩了一段时间,但我仍然无法用更精细的规模观察验证错误的演变。有什么想法吗?