Как построить ошибку OOB против количества деревьев в случайном лесу - PullRequest
0 голосов
/ 04 марта 2019

Я установил случайную модель леса.Я использовал оба пакета randomForest и ranger.Я не настраивал количество деревьев в лесу, я просто оставил для него номер по умолчанию, равный 500. Теперь я хотел бы посмотреть, достаточно ли этого, то есть достигли ли ошибки плато или нет.Поэтому я считаю, что мне нужно было бы извлечь отдельные деревья, выбрать случайным образом, например, 100, 200, 300, 400 и, наконец, 500 деревьев, вынуть из них древовидные деревья и вычислить ошибку OOB для 100, 200, ... деревьев последовательно.,Тогда я мог бы построить ошибку OOB против количества деревьев.Я обнаружил, что randomForest::getTree и ranger::treeInfo возвращают data.frame деревьев, но я не могу понять, что там есть.Более того, ranger::treeInfo возвращает фрейм данных с 50% NA, а общий результат еще сложнее для чтения.Итак, мой вопрос:

  1. Как я могу отобразить ошибку OOB против количества деревьев, используемых в лесу, если у меня уже есть случайный лес с 500 деревьями?
  2. Почему ranger::treeInfoесть 50% НС и на самом деле только у этих строк есть прогнозы?

Вот минимальный пример:

mpg2 <- mpg %>% 
  mutate(is_suv = as.factor(class == 'suv')) %>% 
  select(-class)
mpg_model <- ranger::ranger(is_suv ~ ., data = mpg2)
ranger::treeInfo(mpg_model, tree = 100)

1 Ответ

0 голосов
/ 04 марта 2019

Я думаю, что вы ищете просто plot(.), как в этом примере:

library(randomForest)

set.seed(71)
iris.rf <- randomForest(Species ~ ., data=iris, importance = TRUE, proximity=TRUE)
# plot the model
plot(iris.rf)
# add legend to know which is which
legend("top", colnames(iris.rf$err.rate), fill=1:ncol(iris.rf$err.rate))

Что касается randomForest::getTree и ranger::treeInfo, они не имеют ничего общего с OOBи они просто описывают схему -chosen- дерева, т. е. какие узлы по каким критериям разбиты и к каким узлам подключены, каждый пакет использует немного другое представление, например, следующее происходит из ranger::treeInfo:

     nodeID leftChild rightChild splitvarID splitvarName splitval terminal prediction
1       0         1          2          4  Petal.Width     0.80    FALSE       <NA>
2       1        NA         NA         NA         <NA>       NA     TRUE     setosa

, который в основном является описанием чего-то вроде этого:

enter image description here

...