Як виконати пакетування в 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 ')

Графік змінної важливості в R

Ми бачимо, що 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, використаний у цьому прикладі, можна знайти тут .

Додати коментар

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *