【发布时间】:2020-05-18 08:34:38
【问题描述】:
我无法弄清楚为什么我的随机森林网格搜索会挂起。我尝试了 Stackoverflow 上建议的很多东西,但没有任何效果。 首先,这是我的代码:
library(data.table)
library(h2o)
library(dplyr)
# Initialise H2O
localH2O = h2o.init(nthreads = -1, min_mem_size = "9240M", max_mem_size = "11336M")
h2o.removeAll()
# Specify some dirs, inputs etc. (not shown)
laufnummer <- 10
set.seed(laufnummer)
maxmodels <- 500
# Convert to h2o
h2o_input <- as.h2o(input)
# Split: 80% = train; 0 = valid; rest = 20% = test
splits <- h2o.splitFrame(h2o_input, c(0.80,0))
train <- h2o.assign(splits[[1]], "train") # 80%
test <- h2o.assign(splits[[3]], "test") # 10%
设置参数:
# Select range of ntrees
min_ntrees <- 10
max_ntrees <- 2500
stepsize_ntrees <- 20
ntrees_opts <- seq(min_ntrees,max_ntrees, stepsize_ntrees)
# Select range of tries
min_mtries <- 1
max_mtries <- 12
stepsize_mtries <- 1
mtries_opts <- seq(min_mtries,max_mtries, stepsize_mtries)
# Cross-validation number of folds
nfolds <- 5
hyper_params_dl = list(ntrees = ntrees_opts,
mtries = mtries_opts)
search_criteria_dl = list(
strategy = "RandomDiscrete",
max_models = maxmodels)
最后是随机网格搜索(这就是它挂起的地方,几乎总是在 25%)
rf_grid <- h2o.grid(seed = laufnummer,
algorithm = "randomForest",
grid_id = "dlgrid",
x = predictors,
y = response,
training_frame = train,
nfolds = nfolds,
keep_cross_validation_predictions = TRUE,
model_id = "rf_grid",
hyper_params = hyper_params_dl,
search_criteria = search_criteria_dl
)
这是我已经尝试过的:
- 未在 init 中设置 nthreads:无效。
- 将 nthreads 设置为 4:无效。
- 设置较低的内存(我有 16 GB):没有效果。
- 在网格搜索中添加并行度 = 0:无效
- 没有使用 h2o.removeAll():没有效果
- 最后总是使用 h2o.shutdown(prompt = FALSE):无效
- 使用了不同版本的 JDK、R 和 h2o。 (现在使用最新的)
问题是网格搜索进度停止在 25% 左右,有时甚至更少。
有什么帮助是将代码切换到 GBM 而不是 RF, 但它有时也会挂在那里(我需要射频!)。 还有助于将模型数量从 5000 个减少到 500 个,但仅限于 NN 和 GBM,而不是 RF。
在尝试了几个星期之后,我将非常感谢任何帮助!谢谢!
更新: 感谢您的建议,这是我尝试过的: 1.使用h2o.importfile()导入已经分割的文件:无效 毫不奇怪,因为它是一个如此小的数据集,加载需要几秒钟。 2.设置nthreads为1:无效 3. 不要使用 xgboost:我不知道我在使用它。 4.不使用RF:不可能,因为我尝试比较机器学习算法。 5. h2o.init(jvm_custom_args = c("-XX:+PrintGCDetails", "-XX:+PrintGCTimeStamps")): 没用,因为h2o不会加上这个参数启动。 6. 购买了额外的 8 GB RAM 并将 max_mem_size 分别设置为 18 和 22 GB:效果 = 停止在大约 65% 和 80% 而不是 25%。有趣的是进度条越来越慢,直到完全停止。然后发生类似硬重置的事情,因为我使用了不同的键盘布局(Win10)并且设置为默认值...... 注意:500 GBM 或 NN 使用相同的数据集运行良好。 7. 模型数量减少到 300:没有效果。
所以,我的结论是这绝对是内存问题,但我无法真正监控它。任务管理器中的 RAM 不是 100%,而是分配的 max_mem_size。 非常感谢任何可以帮助我进一步查明问题的帮助 - 谢谢大家!
【问题讨论】:
-
您的资源似乎用完了。你试过 AWS / Azure 集群吗?
-
谢谢。不,我没有尝试集群。我不在乎我的机器上是否需要 1-2 天,但它不应该挂起......而且限制到 1 个 CPU 也无济于事,所以这可能(?)不是原因。
-
您可能想直接在他们的h2o gitter 流上联系 h2o 并链接到这个 SO 问题。但他们需要知道您的数据集的大小。
标签: r random-forest h2o freeze