Как подобрать деревья классификации и регрессии в R

Как подобрать деревья классификации и регрессии в R

Когда взаимосвязь между набором переменных-предикторов и переменной отклика является линейной, такие методы, как множественная линейная регрессия , могут создавать точные прогностические модели.

Однако, когда взаимосвязь между набором предикторов и откликом более сложная, нелинейные методы часто могут создавать более точные модели.

Одним из таких методов являются деревья классификации и регрессии (CART), которые используют набор переменных-предикторов для построения деревьев решений, которые предсказывают значение переменной ответа.

Если переменная ответа непрерывна, мы можем построить деревья регрессии, а если переменная ответа является категориальной, мы можем построить деревья классификации.

В этом руководстве объясняется, как построить деревья регрессии и классификации в R.

Пример 1. Построение дерева регрессии в R

В этом примере мы будем использовать набор данных Hitters из пакета ISLR , который содержит различную информацию о 263 профессиональных бейсболистах.

Мы будем использовать этот набор данных для построения дерева регрессии, которое использует переменные-предикторы домашних пробегов и количество сыгранных лет для прогнозирования зарплаты данного игрока.

Используйте следующие шаги, чтобы построить это дерево регрессии.

Шаг 1: Загрузите необходимые пакеты.

Во-первых, мы загрузим необходимые пакеты для этого примера:

library (ISLR) #contains Hitters dataset
library (rpart) #for fitting decision trees
library (rpart.plot) #for plotting decision trees

Шаг 2: Постройте начальное дерево регрессии.

Во-первых, мы построим большое начальное дерево регрессии. Мы можем гарантировать, что дерево большое, используя небольшое значение для cp , что означает «параметр сложности».

Это означает, что мы будем выполнять новые разбиения дерева регрессии до тех пор, пока общий R-квадрат модели увеличивается по крайней мере на значение, указанное cp.

Затем мы воспользуемся функцией printcp() для печати результатов модели:

#build the initial tree
tree <- rpart(Salary ~ Years + HmRun, data=Hitters, control=rpart. control (cp= .0001 ))

#view results
printcp(tree)

Variables actually used in tree construction:
[1] HmRun Years

Root node error: 53319113/263 = 202734

n=263 (59 observations deleted due to missingness)

 CP nsplit rel error xerror xstd
1 0.24674996 0 1.00000 1.00756 0.13890
2 0.10806932 1 0.75325 0.76438 0.12828
3 0.01865610 2 0.64518 0.70295 0.12769
4 0.01761100 3 0.62652 0.70339 0.12337
5 0.01747617 4 0.60891 0.70339 0.12337
6 0.01038188 5 0.59144 0.66629 0.11817
7 0.01038065 6 0.58106 0.65697 0.11687
8 0.00731045 8 0.56029 0.67177 0.11913
9 0.00714883 9 0.55298 0.67881 0.11960
10 0.00708618 10 0.54583 0.68034 0.11988
11 0.00516285 12 0.53166 0.68427 0.11997
12 0.00445345 13 0.52650 0.68994 0.11996
13 0.00406069 14 0.52205 0.68988 0.11940
14 0.00264728 15 0.51799 0.68874 0.11916
15 0.00196586 16 0.51534 0.68638 0.12043
16 0.00016686 17 0.51337 0.67577 0.11635
17 0.00010000 18 0.51321 0.67576 0.11615
n=263 (59 observations deleted due to missingness)

Шаг 3: Обрежьте дерево.

Затем мы обрежем дерево регрессии, чтобы найти оптимальное значение для cp (параметра сложности), которое приводит к наименьшей ошибке теста.

Обратите внимание, что оптимальным значением cp является то, которое приводит к наименьшей xerror в предыдущем выводе, который представляет собой ошибку в наблюдениях из данных перекрестной проверки.

#identify best cp value to use
best <- tree$cptable[which. min (tree$cptable[," xerror "])," CP "]

#produce a pruned tree based on the best cp value
pruned_tree <- prune (tree, cp=best)

#plot the pruned tree
prp(pruned_tree,
 faclen= 0 , #use full names for factor labels
 extra= 1 , #display number of obs. for each terminal node
 roundint= F , #don't round to integers in output
 digits= 5 ) #display 5 decimal places in output
Дерево регрессии в R

Мы видим, что окончательное обрезанное дерево имеет шесть конечных узлов. Каждый конечный узел показывает прогнозируемую зарплату игрока в этом узле вместе с количеством наблюдений из исходного набора данных, принадлежащих этой заметке.

Например, мы видим, что в исходном наборе данных было 90 игроков со стажем менее 4,5 лет, а их средняя зарплата составляла 225,83 тысячи долларов.

Интерпретация дерева регрессии в R

Шаг 4: Используйте дерево, чтобы делать прогнозы.

Мы можем использовать итоговое обрезанное дерево, чтобы предсказать зарплату данного игрока на основе его многолетнего опыта и среднего количества хоум-ранов.

Например, игрок с 7-летним стажем и 4 средними хоум-ранами имеет прогнозируемую зарплату в размере 502,81 тыс.долларов.

Пример дерева регрессии в R

Мы можем использовать функцию предсказания() в R, чтобы подтвердить это:

#define new player
new <- data.frame(Years=7, HmRun=4)

#use pruned tree to predict salary of this player
predict(pruned_tree, newdata=new)

502.8079 

Пример 2: построение дерева классификации в R

В этом примере мы будем использовать набор данных ptitanic из пакета rpart.plot , который содержит различную информацию о пассажирах на борту «Титаника».

Мы будем использовать этот набор данных для построения дерева классификации, которое использует класс предикторов, пол и возраст , чтобы предсказать, выжил ли данный пассажир.

Используйте следующие шаги, чтобы построить это дерево классификации.

Шаг 1: Загрузите необходимые пакеты.

Во-первых, мы загрузим необходимые пакеты для этого примера:

library (rpart) #for fitting decision trees
library (rpart.plot) #for plotting decision trees

Шаг 2: Постройте начальное дерево классификации.

Во-первых, мы построим большое начальное дерево классификации. Мы можем гарантировать, что дерево большое, используя небольшое значение для cp , что означает «параметр сложности».

Это означает, что мы будем выполнять новые разбиения дерева классификации до тех пор, пока общее соответствие модели не увеличится по крайней мере на значение, указанное cp.

Затем мы воспользуемся функцией printcp() для печати результатов модели:

#build the initial tree
tree <- rpart(survived~pclass+sex+age, data=ptitanic, control=rpart. control (cp= .0001 ))

#view results
printcp(tree)

Variables actually used in tree construction:
[1] age pclass sex 

Root node error: 500/1309 = 0.38197

n= 1309 

 CP nsplit rel error xerror xstd
1 0.4240 0 1.000 1.000 0.035158
2 0.0140 1 0.576 0.576 0.029976
3 0.0095 3 0.548 0.578 0.030013
4 0.0070 7 0.510 0.552 0.029517
5 0.0050 9 0.496 0.528 0.029035
6 0.0025 11 0.486 0.532 0.029117
7 0.0020 19 0.464 0.536 0.029198
8 0.0001 22 0.458 0.528 0.029035

Шаг 3: Обрежьте дерево.

Затем мы обрежем дерево регрессии, чтобы найти оптимальное значение для cp (параметра сложности), которое приводит к наименьшей ошибке теста.

Обратите внимание, что оптимальным значением cp является то, которое приводит к наименьшей xerror в предыдущем выводе, который представляет собой ошибку в наблюдениях из данных перекрестной проверки.

#identify best cp value to use
best <- tree$cptable[which. min (tree$cptable[," xerror "])," CP "]

#produce a pruned tree based on the best cp value
pruned_tree <- prune (tree, cp=best)

#plot the pruned tree
prp(pruned_tree,
 faclen= 0 , #use full names for factor labels
 extra= 1 , #display number of obs. for each terminal node
 roundint= F , #don't round to integers in output
 digits= 5 ) #display 5 decimal places in output
Дерево классификации в R

Мы видим, что окончательное обрезанное дерево имеет 10 конечных узлов. Каждый терминальный узел показывает количество погибших пассажиров и количество выживших.

Например, в крайнем левом узле мы видим, что 664 пассажира погибли, а 136 выжили.

Интерпретация дерева классификации в R

Шаг 4: Используйте дерево, чтобы делать прогнозы.

Мы можем использовать окончательное обрезанное дерево, чтобы предсказать вероятность того, что данный пассажир выживет, исходя из его класса, возраста и пола.

Например, у пассажира-мужчины 1-го класса в возрасте 8 лет вероятность выживания составляет 11/29 = 37,9%.

Дерево классификации в R

Полный код R, использованный в этих примерах, вы можете найти здесь .

Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.