Нелинейные модели

Данные: Auto{ISLR}

## Warning: package 'tree' was built under R version 3.4.4
## Warning: package 'randomForest' was built under R version 3.4.4
## randomForest 4.6-14
## Type rfNews() to see new features/changes/bug fixes.
## Warning: package 'gbm' was built under R version 3.4.4
## Loading required package: survival
## Loading required package: lattice
## Loading required package: splines
## Loading required package: parallel
## Loaded gbm 2.1.3

Деревья решений

Загрузим таблицу с данными по 392 автомобилям и добавим к ней переменную High – “Мили на галлон” со значениями:

Убираем переменную name и непрерывный отклик mpg.

## 
## Classification tree:
## tree(formula = High ~ . - mpg - name, data = Auto)
## Variables actually used in tree construction:
## [1] "horsepower"   "year"         "weight"       "displacement"
## Number of terminal nodes:  10 
## Residual mean deviance:  0.2449 = 93.56 / 382 
## Misclassification error rate: 0.05102 = 20 / 392

## node), split, n, deviance, yval, (yprob)
##       * denotes terminal node
## 
##  1) root 392 451.500 0 ( 0.737245 0.262755 )  
##    2) horsepower < 84.5 132 161.900 1 ( 0.303030 0.696970 )  
##      4) year < 76.5 51  67.350 0 ( 0.627451 0.372549 )  
##        8) weight < 2091 22  23.580 1 ( 0.227273 0.772727 )  
##         16) displacement < 90.5 15   7.348 1 ( 0.066667 0.933333 ) *
##         17) displacement > 90.5 7   9.561 0 ( 0.571429 0.428571 ) *
##        9) weight > 2091 29  14.560 0 ( 0.931034 0.068966 ) *
##      5) year > 76.5 81  52.220 1 ( 0.098765 0.901235 )  
##       10) weight < 2255 58   0.000 1 ( 0.000000 1.000000 ) *
##       11) weight > 2255 23  29.720 1 ( 0.347826 0.652174 ) *
##    3) horsepower > 84.5 260  91.110 0 ( 0.957692 0.042308 )  
##      6) year < 79.5 227  12.850 0 ( 0.995595 0.004405 )  
##       12) year < 78.5 208   0.000 0 ( 1.000000 0.000000 ) *
##       13) year > 78.5 19   7.835 0 ( 0.947368 0.052632 ) *
##      7) year > 79.5 33  40.490 0 ( 0.696970 0.303030 )  
##       14) displacement < 137 10  12.220 1 ( 0.300000 0.700000 )  
##         28) displacement < 115.5 5   6.730 0 ( 0.600000 0.400000 ) *
##         29) displacement > 115.5 5   0.000 1 ( 0.000000 1.000000 ) *
##       15) displacement > 137 23  17.810 0 ( 0.869565 0.130435 ) *

Теперь построим дерево на обучающей выборке и оценим ошибку на тестовой.

##          High.test
## tree.pred   0   1
##         0 132   9
##         1  10  45
## [1] 0.9030612

Доля верных прогнозов: 0.9030612.

Теперь обрезаем дерево, используя в качестве критерия частоту ошибок классификации. Функция cv.tree() проводит кросс-валидацию для выбора лучшего дерева, аргумент prune.misclass означает, что мы минимизируем ошибку классификации.

## [1] "size"   "dev"    "k"      "method"
## $size
## [1] 8 6 4 3 2 1
## 
## $dev
## [1] 22 22 17 21 31 49
## 
## $k
## [1] -Inf  0.0  1.5  6.0 10.0 23.0
## 
## $method
## [1] "misclass"
## 
## attr(,"class")
## [1] "prune"         "tree.sequence"

Как видно на графике слева, минимум частоты ошибок достигается при числе узлов 4. Оценим точность дерева с 4 узлами.

##          High.test
## tree.pred   0   1
##         0 136  11
##         1   6  43
## [1] 0.9132653

Теперь точность выше, чем в предыдущем случае: 0.9132653.

Дерево с обрезкой ветвей

Построим дерево регрессии для зависимой переменной mpg: мили на галлон. Также теперь не учитываем переменную High, с которой мы ранее имели дело, не забывая исключить переменную name.

## 
## Regression tree:
## tree(formula = mpg ~ . - name - High, data = Auto, subset = train)
## Variables actually used in tree construction:
## [1] "displacement" "horsepower"   "year"         "weight"      
## Number of terminal nodes:  7 
## Residual mean deviance:  9.306 = 1759 / 189 
## Distribution of residuals:
##     Min.  1st Qu.   Median     Mean  3rd Qu.     Max. 
## -9.06700 -1.55500 -0.06667  0.00000  1.48800 10.99000

Снова сделаем обрезку дерева в целях улучшения качества прогноза.

В данном случаем минимум ошибки соответствует самому сложному дереву, с 7 узлами. Покажем, как при желании можно обрезать дерево до 6 узлов (ошибка ненамного выше, чем минимальная).

Прогноз сделаем по необрезанному дереву, т.к. там ошибка, оцененная по методу перекрёстной проверки, минимальна.

## [1] 14.29394

MSE на тестовой выборке равна 14.29394(мили на галлон).