Випадковий ліс та передбачення


14

Я намагаюся зрозуміти, як працює Випадковий ліс. Я розумію, як будуються дерева, але не можу зрозуміти, як випадковий ліс робить передбачення щодо зразка мішка. Хтось може мені дати просте пояснення, будь ласка? :)

Відповіді:


17

Кожне дерево в лісі побудовано із зразка завантажувальних даних із спостережень у ваших навчальних даних. Ці спостереження у зразку завантажувального пристрою будують дерево, тоді як ті, які не є у зразку завантажувального пристрою, утворюють зразки з мішка (або OOB).

Повинно бути зрозуміло, що ті ж змінні доступні для випадків у даних, що використовуються для побудови дерева, як для випадків у зразку OOB. Щоб отримати прогнози для вибірки OOB, кожне з них передається вниз по поточному дереву та дотримується правил для дерева, поки воно не надійде в термінальний вузол. Це дає прогнози OOB для цього конкретного дерева.

Цей процес повторюється велика кількість разів, кожне дерево тренувалося на новому зразку завантажувальної програми з даних тренувань та прогнозів для нових отриманих зразків OOB.

Зі збільшенням кількості дерев будь-який зразок буде знаходитись у зразках OOB не один раз, таким чином "середній" прогноз щодо N дерев, де зразок знаходиться в OOB, використовується як прогноз OOB для кожного навчального зразка для дерева 1, ..., Н. Під "середнім" ми використовуємо середнє значення прогнозів для безперервної відповіді, або більшість голосів може бути використана для категоричної відповіді (більшість голосів - це клас з більшістю голосів за безліч дерева 1, ..., N).

Наприклад, припустимо, що у нас були такі передбачення OOB для 10 зразків у навчальному наборі на 10 деревах

set.seed(123)
oob.p <- matrix(rpois(100, lambda = 4), ncol = 10)
colnames(oob.p) <- paste0("tree", seq_len(ncol(oob.p)))
rownames(oob.p) <- paste0("samp", seq_len(nrow(oob.p)))
oob.p[sample(length(oob.p), 50)] <- NA
oob.p

> oob.p
       tree1 tree2 tree3 tree4 tree5 tree6 tree7 tree8 tree9 tree10
samp1     NA    NA     7     8     2     1    NA     5     3      2
samp2      6    NA     5     7     3    NA    NA    NA    NA     NA
samp3      3    NA     5    NA    NA    NA     3     5    NA     NA
samp4      6    NA    10     6    NA    NA     3    NA     6     NA
samp5     NA     2    NA    NA     2    NA     6     4    NA     NA
samp6     NA     7    NA     4    NA     2     4     2    NA     NA
samp7     NA    NA    NA     5    NA    NA    NA     3     9      5
samp8      7     1     4    NA    NA     5     6    NA     7     NA
samp9      4    NA    NA     3    NA     7     6     3    NA     NA
samp10     4     8     2     2    NA    NA     4    NA    NA      4

Де NAозначає, що зразок був у навчальних даних для цього дерева (іншими словами, він не був у зразку OOB).

Середнє NAзначення, яке не має значення для кожного ряду, дає прогноз OOB для кожного зразка, для всього лісу

> rowMeans(oob.p, na.rm = TRUE)
 samp1  samp2  samp3  samp4  samp5  samp6  samp7  samp8  samp9 samp10 
  4.00   5.25   4.00   6.20   3.50   3.80   5.50   5.00   4.60   4.00

Оскільки кожне дерево додається до лісу, ми можемо обчислити помилку OOB до включення цього дерева. Наприклад, нижче наведені кумулятивні засоби для кожного зразка:

FUN <- function(x) {
  na <- is.na(x)
  cs <- cumsum(x[!na]) / seq_len(sum(!na))
  x[!na] <- cs
  x
}
t(apply(oob.p, 1, FUN))

> print(t(apply(oob.p, 1, FUN)), digits = 3)
       tree1 tree2 tree3 tree4 tree5 tree6 tree7 tree8 tree9 tree10
samp1     NA    NA  7.00  7.50  5.67  4.50    NA   4.6  4.33    4.0
samp2      6    NA  5.50  6.00  5.25    NA    NA    NA    NA     NA
samp3      3    NA  4.00    NA    NA    NA  3.67   4.0    NA     NA
samp4      6    NA  8.00  7.33    NA    NA  6.25    NA  6.20     NA
samp5     NA     2    NA    NA  2.00    NA  3.33   3.5    NA     NA
samp6     NA     7    NA  5.50    NA  4.33  4.25   3.8    NA     NA
samp7     NA    NA    NA  5.00    NA    NA    NA   4.0  5.67    5.5
samp8      7     4  4.00    NA    NA  4.25  4.60    NA  5.00     NA
samp9      4    NA    NA  3.50    NA  4.67  5.00   4.6    NA     NA
samp10     4     6  4.67  4.00    NA    NA  4.00    NA    NA    4.0

Таким чином ми бачимо, як прогноз накопичується на N деревах у лісі аж до заданої ітерації. Якщо ви читаєте в рядках, найвище NAзначення, яке я праворуч, - це те, що я показую вище для прогнозу OOB. Ось так можна зробити сліди продуктивності OOB - RMSEP можна обчислити для зразків OOB на основі прогнозів OOB, накопичених кумулятивно на N деревах.

Зауважте, що показаний R код не береться з внутрішнього коду randomForest у пакеті randomForest для R - я просто збив якийсь простий код, щоб ви могли слідкувати за тим, що відбувається після того, як будуть визначені прогнози з кожного дерева.

Саме тому, що кожне дерево побудоване із зразка завантажувальної програми та що у випадковому лісі є велика кількість дерев, так що кожне спостереження набору навчальних програм є у зразку OOB для одного або декількох дерев, можна передбачити OOB для всіх вибірки в навчальних даних.

Я обговорював такі питання, як відсутні дані для деяких випадків OOB тощо, але ці питання також стосуються одного регресу або дерева класифікації. Також зауважте, що кожне дерево в лісі використовує лише mtryвипадково вибрані змінні.


Чудова відповідь Гевін! Коли ви пишете "To get predictions for the OOB sample, each one is passed down the current tree and the rules for the tree followed until it arrives in a terminal node", чи маєте ви просте пояснення, що таке rules for the tree? І чи я sampleправильно розумію рядок, якщо розумію, що вибірки - це groupsспостереження, на які дерева ділять дані?
користувач1665355

@ user1665355 Я гадав, що ви зрозуміли, як будуються дерева регресії чи класифікації? Дерева в РФ нічим не відрізняються (крім, можливо, в правилах зупинки). Кожне дерево розбиває навчальні дані на групи зразків із подібними «значеннями» для відповіді. Місце змінної та розділеної (наприклад, pH> 4,5), що найкраще прогнозує (тобто мінімізує "помилку"), формує перший розкол або правило в дереві. Кожна гілка цього розколу потім розглядається по черзі і визначаються нові розбиття / правила, що мінімізують "помилку" дерева. Це алгоритм бінарного рекурсивного розподілу. Розколи - це правила.
Відновіть Моніку - Г. Сімпсон

@ user1665355 Так, вибачте, я прийшов із поля, де зразок - це спостереження, рядок у наборі даних. Але коли ви починаєте говорити про зразок завантаження, це набір N спостережень, проведених із заміною з навчальних даних і, отже, має N рядків або спостережень. Я спробую очистити свою термінологію пізніше.
Відновіть Моніку - Г. Сімпсон

Спасибі! Я дуже новачок в РФ, тому шкода, можливо, дурних питань :) Я думаю, що розумію майже все, що ви написали, дуже хороше пояснення! Мені просто цікаво, що місце змінної та розділеної (наприклад, pH> 4,5), яке найкраще прогнозує (тобто мінімізує "помилку"), формує перший розкол або правило на дереві ... Я не можу зрозуміти, що таке помилка. : / Я читаю і намагаюся зрозуміти http://www.ime.unicamp.br/~ra109078/PED/Data%20Minig%20with%20R/Data%20Mining%20with%20R.pdf. На сторінці 115-116 автори використовують РФ для вибору variable importanceтехнічних показників.
користувач1665355

"Помилка" залежить від того, який тип дерева встановлюється. Відхилення - звичайна міра для постійних (гауссових) відповідей. У пакеті rpart коефіцієнт Джині є типовим для категоричних відповідей, але існують інші для різних моделей тощо. Вам слід скористатися хорошою книгою про Дерева та РФ, якщо ви хочете її успішно розгорнути. Заходи змінної удосконалення є дещо різними - вони вимірюють "важливість" кожної змінної у наборі даних, бачачи, наскільки щось змінюється, коли ця змінна використовується для установки дерева та коли ця змінна не використовується.
Відновіть Моніку - Г. Сімпсон
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.