Как отобразить ошибку OOB в зависимости Количество деревьев, использующих ranger?

#r #machine-learning #random-forest #r-ranger

#r #машинное обучение #случайный лес #r-ranger

Вопрос:

Я хочу получить оптимальное количество деревьев для случайного леса путем отображения ошибки OOB в зависимости от Количество деревьев и посмотреть, в какой момент ошибка достигает максимума. Однако, поскольку моя проблема связана с интеллектуальным анализом текста, мои обучающие данные имеют тип разреженной матрицы, т. Е. В dgCMatrix. Это означает, что я не могу использовать пакет randomForest для обучения моей модели, поскольку randomForest не поддерживает разреженную матрицу. Вместо этого я должен использовать пакет ranger, но ranger не выдает ошибку OOB против Количество деревьев. Я попытался преобразовать свою разреженную матрицу в фрейм данных размером 90 000 на 5500 для запуска в randomForest, но это занимает очень много времени даже при параллельном выполнении, и у меня нет такой вычислительной мощности.

Итак, мои вопросы:

  1. Как я могу отобразить ошибку OOB в зависимости от Количество деревьев, использующих ranger?

  2. Каковы другие методы преобразования разреженной матрицы в фрейм данных? До сих пор я пытался

    train_matrix <- as.data.frame(as.matrix(train_dtm))

  3. Какие есть способы сократить время выполнения randomForest с использованием преобразованного фрейма данных?

  4. Существуют ли другие способы определения оптимального количества деревьев без отображения ошибки OOB в зависимости от Количество деревьев, если вышеуказанный сбой?

Был бы признателен за любую помощь, если это возможно. Спасибо!

Ответ №1:

Я столкнулся с аналогичной проблемой, и в итоге я использовал подход «бедный человек» (это отвечает только на ваш первый вопрос):

 library(ranger)

# sample data
# install.packages("AmesHousing")
d <- AmesHousing::make_ames()

nt <- seq(1, 501, 10)

oob_mse <- vector("numeric", length(nt))

for(i in 1:length(nt)){
  rf <- ranger(Sale_Price ~ ., d, num.trees = nt[i], write.forest = FALSE)
  oob_mse[i] <- rf$prediction.error
}


plot(x = nt, y = oob_mse, col = "red", type = "l")
  

Я не знаю, существует ли «оптимальное» количество деревьев, но построение большего количества деревьев, чем необходимо, может значительно замедлить ваши прогнозы, особенно при построении графиков частичной зависимости. Это единственная причина, по которой я это сделал.