Я намагаюся зрозуміти, як працює Випадковий ліс. Я розумію, як будуються дерева, але не можу зрозуміти, як випадковий ліс робить передбачення щодо зразка мішка. Хтось може мені дати просте пояснення, будь ласка? :)
Я намагаюся зрозуміти, як працює Випадковий ліс. Я розумію, як будуються дерева, але не можу зрозуміти, як випадковий ліс робить передбачення щодо зразка мішка. Хтось може мені дати просте пояснення, будь ласка? :)
Відповіді:
Кожне дерево в лісі побудовано із зразка завантажувальних даних із спостережень у ваших навчальних даних. Ці спостереження у зразку завантажувального пристрою будують дерево, тоді як ті, які не є у зразку завантажувального пристрою, утворюють зразки з мішка (або 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
випадково вибрані змінні.
http://www.ime.unicamp.br/~ra109078/PED/Data%20Minig%20with%20R/Data%20Mining%20with%20R.pdf
. На сторінці 115-116 автори використовують РФ для вибору variable importance
технічних показників.
"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
спостереження, на які дерева ділять дані?