Як виконати пакетування в r (крок за кроком)
Коли ми створюємо дерево рішень для певного набору даних, ми використовуємо лише один навчальний набір даних для створення моделі.
Однак недоліком використання єдиного дерева рішень є те, що воно часто страждає від великої дисперсії . Тобто, якщо ми розділимо набір даних на дві половини та застосуємо дерево рішень до обох половин, результати можуть бути дуже різними.
Один із методів, який ми можемо використати, щоб зменшити дисперсію окремого дерева рішень, відомий як пакетування , яке іноді називають завантажувальним агрегуванням .
Пакетування працює наступним чином:
1. Візьміть b початкових зразків із вихідного набору даних.
2. Створіть дерево рішень для кожного зразка початкового завантаження.
3. Усередніть прогнози з кожного дерева, щоб отримати остаточну модель.
Створюючи сотні чи навіть тисячі окремих дерев рішень і беручи усереднені прогнози всіх дерев, ми часто отримуємо модель сумки, яка дає набагато нижчий рівень помилок тестування порівняно з одним деревом рішень.
Цей підручник надає покроковий приклад того, як створити пакетну модель у R.
Крок 1: Завантажте необхідні пакети
Спочатку ми завантажимо необхідні пакети для цього прикладу:
library (dplyr) #for data wrangling library (e1071) #for calculating variable importance library (caret) #for general model fitting library (rpart) #for fitting decision trees library (ipred) #for fitting bagged decision trees
Крок 2: Встановіть модель у сумці
Для цього прикладу ми використаємо вбудований набір даних R під назвою Air Quality , який містить вимірювання якості повітря в Нью-Йорку протягом 153 окремих днів.
#view structure of air quality dataset
str(airquality)
'data.frame': 153 obs. of 6 variables:
$ Ozone: int 41 36 12 18 NA 28 23 19 8 NA ...
$Solar.R: int 190 118 149 313 NA NA 299 99 19 194 ...
$ Wind: num 7.4 8 12.6 11.5 14.3 14.9 8.6 13.8 20.1 8.6 ...
$ Temp: int 67 72 74 62 56 66 65 59 61 69 ...
$Month: int 5 5 5 5 5 5 5 5 5 5 ...
$Day: int 1 2 3 4 5 6 7 8 9 10 ...
У наведеному нижче коді показано, як вмістити пакетну модель у R за допомогою функції bagging() із бібліотеки ipred .
#make this example reproducible set.seed(1) #fit the bagged model bag <- bagging( formula = Ozone ~ ., data = airquality, nbagg = 150 , coob = TRUE , control = rpart. control (minsplit = 2 , cp = 0 ) ) #display fitted bagged model bag Bagging regression trees with 150 bootstrap replications Call: bagging.data.frame(formula = Ozone ~ ., data = airquality, nbagg = 150, coob = TRUE, control = rpart.control(minsplit = 2, cp = 0)) Out-of-bag estimate of root mean squared error: 17.4973
Зауважте, що ми вирішили використати 150 початкових зразків для побудови пакетної моделі, і ми вказали, що coob має значення TRUE , щоб отримати приблизну помилку поза пакетом.
Ми також використовували такі специфікації у функції rpart.control() :
- minsplit = 2: це вказує, що моделі потрібно лише 2 спостереження у вузлі для розділення.
- cp = 0 . Це параметр складності. Встановлюючи значення 0, ми не вимагаємо, щоб модель будь-яким чином покращувала загальну підгонку, щоб виконати розділення.
По суті, ці два аргументи дозволяють окремим деревам рости надзвичайно глибоко, що призводить до дерев із високою дисперсією, але низьким зміщенням. Тоді, коли ми застосовуємо мішки, ми можемо зменшити дисперсію кінцевої моделі, зберігаючи низький зміщення.
З результатів моделі ми бачимо, що розрахунковий RMSE без пакета становить 17,4973 . Це середня різниця між прогнозованим значенням озону та фактичним спостережуваним значенням.
Крок 3: Візуалізуйте важливість предикторів
Незважаючи на те, що моделі в мішках зазвичай дають точніші прогнози, ніж окремі дерева рішень, важко інтерпретувати та візуалізувати результати моделей у мішках.
Однак ми можемо візуалізувати важливість змінних предикторів, обчисливши загальне зменшення RSS (залишкова сума квадратів) через розподіл на даному предикторі, усереднене по всіх деревах. Чим більше значення, тим важливіший предиктор.
У наведеному нижче коді показано, як створити діаграму важливості змінної для моделі сумки, використовуючи функцію varImp() із бібліотеки вставок :
#calculate variable importance VI <- data.frame(var= names (airquality[,-1]), imp= varImp (bag)) #sort variable importance descending VI_plot <- VI[ order (VI$Overall, decreasing= TRUE ),] #visualize variable importance with horizontal bar plot barplot(VI_plot$Overall, names.arg= rownames (VI_plot), horiz= TRUE , col=' steelblue ', xlab=' Variable Importance ')
Ми бачимо, що Solar.R є найважливішою змінною предиктора в моделі, а Month — найменш важливою.
Крок 4. Використовуйте модель для прогнозування
Нарешті, ми можемо використовувати модель сумки, щоб робити прогнози щодо нових спостережень.
#define new observation new <- data.frame(Solar.R=150, Wind=8, Temp=70, Month=5, Day=5) #use fitted bagged model to predict Ozone value of new observation predict(bag, newdata=new) 24.4866666666667
Базуючись на значеннях прогностичних змінних, модель сумки передбачає, що значення озону становитиме 24 487 у цей конкретний день.
Повний код R, використаний у цьому прикладі, можна знайти тут .