Я не могу понять, почему мой случайный поиск в лесной сетке зависает. Я попробовал много вещей, предложенных на 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
)
Вот что я уже пробовал:
- Не задал nthreads в init: нет эффекта.
- Установите nthreads на 4: нет эффекта.
- Установить нижнюю память (у меня 16 ГБ): без эффекта.
- Добавлен параллелизм = 0 при поиске по сетке: без эффекта
- Не использовать h2o.removeAll (): без эффекта
- Всегда использовал h2o.shutdown (prompt = FALSE) в конце: без эффекта
- Использовал другую версию JDK, R и h2o. (теперь используются самые последние для всех)
Проблема в том, что прогресс поиска по сетке останавливается на уровне около 25%, иногда меньше.
Что помогает, так это переключение кода на GBM вместо RF, но иногда там тоже висит (а мне нужен RF!). Также помогло уменьшить количество моделей до 500 вместо 5000, но только для 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 ГБ ОЗУ и установите max_mem_size на 18 и 22 ГБ соответственно: эффект = останавливается на уровне около 65% и 80% вместо 25%. Что интересно, индикатор выполнения становится все медленнее и медленнее, пока не остановится полностью. Затем происходит нечто вроде аппаратного сброса, поскольку я использую другую раскладку клавиатуры (Win10), и для нее установлено значение по умолчанию ... Примечание: 500 ГБ или NN работают нормально с тем же набором данных. 7. Уменьшено количество моделей до 300: безрезультатно.
Итак, я пришел к выводу, что это определенно проблема с памятью, но я не могу реально контролировать ее. Объем оперативной памяти в диспетчере задач не на 100%, а на выделенном значении max_mem_size. Любая помощь, которая может помочь мне точно определить проблему, очень ценится - спасибо, ребята !!