Как построить график ошибки OOB и количества деревьев с помощью рейнджера?

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

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

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

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

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

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

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

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


person mlfos    schedule 17.09.2020    source источник


Ответы (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")

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

person Fernando.-    schedule 24.05.2021