Tree Models
1. 의사결정나무(Decision tree)
- 의사결정나무는 지니 불순도(Gini Impurity) 등의 기준을 사용하여 노드(node)를 재귀적으로 분할하면서 tree 모형을 만드는 방법입니다.
- if ~ then, else 의 조건문과 같은 형식으로 구성되어 있어서 이해하기 쉽고 처리속도가 비교적 빠르며, 여러 가지 feature들간의 상호 작용을 잘 표현해주고 다양한 데이터에 적용시킬 수 있다는 장점이 있습니다.
1. 1. 노드를 나누는 기준
- 노드에는 분류의 시작점에 해당하는 Root Node, 그리고 제일 하단의 잎사귀 노드 Leaf Node가 존재합니다.
데이터가 얼마나 잘 분리되어 있는지 불순도를 기준으로 평가하며 불순도 함수 \(f\)가 존재할 때 임의의 노드 \(A\)의 불순도 \(I(A)\)는 다음과 같이 정의합니다. 여기서 \(C\)는 분류의 개수이며 \(p_{iA}\)는 노드 \(A\)에 속한 분류 \(i\)인 표본의 비율입니다.
\[I(A) = \sum^{C}_{i=1} f(p_{iA})\]
가장 기본적으로 이용되는 불순도 함수는 지니 불순도로 다음과 같이 정의됩니다.
\[f(p)=p(1-p)\]
2. 적용
2. 1. rpart()
의사 결정 나무를 만드는 다양한 패키기 중
rpart패키지 안에 내장되어 있는rpart()함수를 이용해보겠습니다.library(rpart)rpart패키지는 CART(Classification and Regression Trees)의 아이디어를 구현한 패키지 입니다.
rpart(formula, data)- formula : 모형식, 반응변수 ~ 설면변수들
- data : 모형식을 적용할 데이터프레임
기본적으로
iris데이터에 대해rpart()함수를 적용한 결과 입니다.m1 <- rpart(Species ~ ., data = iris) m1## n= 150 ## ## node), split, n, loss, yval, (yprob) ## * denotes terminal node ## ## 1) root 150 100 setosa (0.33333333 0.33333333 0.33333333) ## 2) Petal.Length< 2.45 50 0 setosa (1.00000000 0.00000000 0.00000000) * ## 3) Petal.Length>=2.45 100 50 versicolor (0.00000000 0.50000000 0.50000000) ## 6) Petal.Width< 1.75 54 5 versicolor (0.00000000 0.90740741 0.09259259) * ## 7) Petal.Width>=1.75 46 1 virginica (0.00000000 0.02173913 0.97826087) *- \(n=150\)은 150개의 데이터가 input 되어있음을 의미하고 밑으로 각 노드들이 표시되어 있습니다.
- 들여쓰기 형식으로 output이 출력됨을 볼 수 있는데 이는 가지가 갈라지는 모양을 의미합니다. ’*’ 모양은 잎사귀 노드를 의미합니다.
이 또한
predict()함수를 적용하여 예측을 수행할 수 있습니다.head( predict(m1, newdata = iris, type = "class") )## 1 2 3 4 5 6 ## setosa setosa setosa setosa setosa setosa ## Levels: setosa versicolor virginica이 밖에 과적합(over-fitting)을 피하기 위해 가지치기(pruning)
prune.rpart()함수와rpart.control()함수 등 다양한 성능 튜닝 함수가 존재합니다.
2. 2. ctree()
- CART의 과적합 등의 문제를 조금 개선한 방법으로 조건부 추론 나무(Conditional Inference Tree) 모형을 언급할 수 있습니다.
- 조건부 추론 나무는 조건부 분포에 따라 설명변수와 반응변수(분류) 사이의 연관 관계를 측정하여 노드 분할에 사용할 변수를 선택할 수 있고 노드를 반복 분할하면서 적절한 검정 절차를 적용해 적절한 시점에 노드의 분할을 중단할 수 있습니다.
이는
party패키지 안에 내장되어 있는ctree()함수를 이용하여 적용할 수 있습니다.library(party)ctree(formula, data)rpart()함수와 인자가 똑같으며 반환되는 객체는 BinaryTree 객체 입니다.
m2 <- ctree(Species ~ ., data = iris) m2## ## Conditional inference tree with 4 terminal nodes ## ## Response: Species ## Inputs: Sepal.Length, Sepal.Width, Petal.Length, Petal.Width ## Number of observations: 150 ## ## 1) Petal.Length <= 1.9; criterion = 1, statistic = 140.264 ## 2)* weights = 50 ## 1) Petal.Length > 1.9 ## 3) Petal.Width <= 1.7; criterion = 1, statistic = 67.894 ## 4) Petal.Length <= 4.8; criterion = 0.999, statistic = 13.865 ## 5)* weights = 46 ## 4) Petal.Length > 4.8 ## 6)* weights = 8 ## 3) Petal.Width > 1.7 ## 7)* weights = 46plot()함수를 이용하여 그림으로도 표현할 수 있습니다.plot(m2)마찬가지로
ctree()함수를 이용하여 반환된 BinaryTree 객체는predict()함수를 사용하여 예측을 수행할 수 있습니다.head( predict(m2, newdata = iris, type = "response") )## [1] setosa setosa setosa setosa setosa setosa ## Levels: setosa versicolor virginica
3. 랜덤 포레스트(Random Forest)
- 랜덤 포레스트는 앙상블(Ensemble) 학습 기법을 사용한 모형으로 주어진 데이터로부터 여러 개의 모형을 학습시킨 다음 예측 시 여러 모형의 예측 결과들을 종합해 사용하여 정확도를 기법입니다.
- 랜덤 포레스트는 의사 결정 나무를 만들 때 데이터의 일부를 복원 추출(sampling with replacement)을 통하여 해당 데이터에 대해서만 의사 결정 나무를 만들고, 노드 내 데이터를 나누는 기준을 정할 때 전체 변수가 아니라 일부 변수만을 대상으로 하여 가지를 나눕니다.
- 새로운 데이터에 대한 예측을 수행할 때는 여러 가지의 의사 결정 나무가 내놓은 예측 결과를 투표(voting) 방식으로 결정하여 최종 결과를 내리는 형식입니다. 예를 들어, 총 10개의 의사 결정 나무중 과반 이상이 반응변수를 Y로 예측했다면 최종 결과는 Y로 예측되게 됩니다.
- 랜덤 포레스트는 일반적으로 성능이 뛰어나고 의사 결정 나무 하나가 아니라 여러 개를 사용해 과적합 문제를 피하게 됩니다.
3. 1. randomForest()
R에서
randomForest패키지는 랜덤 포레스트를 구현한 패키지로 함수 역시randomForest()입니다.library(randomForest)randomForest(formula, data, ntree = 500, mtry, importance = FALSE)- formula : 반응변수 ~ 설명변수 모형식
- data : formula를 적용할 data.frame
- ntree = 500 : 생성할 나무의 갯수로 기본 값은 500
- mtry : 노드를 나눌 기준을 정할 때 고려할 변수의 갯수
- importance = FALSE : 변수의 중요도 평가 여부
iris데이터에 대한 랜덤 포레스트 모형은 다음과 같이 만들 수 있습니다.m3 <- randomForest(Species ~ ., data = iris) m3## ## Call: ## randomForest(formula = Species ~ ., data = iris) ## Type of random forest: classification ## Number of trees: 500 ## No. of variables tried at each split: 2 ## ## OOB estimate of error rate: 4% ## Confusion matrix: ## setosa versicolor virginica class.error ## setosa 50 0 0 0.00 ## versicolor 0 47 3 0.06 ## virginica 0 3 47 0.06- OOB(Out of Bag) estimate of error rate는 모형을 적합시킬 때 사용되지 않은 데이터를 사용한 에러 추정치를 의미합니다.
- comfusion matrix를 통해 오분류율을 확인할 수 있습니다.
importance = TRUEargument를 이용하여 변수의 중요도를 평가하고 모델링에 사용할 변수를 선택하는데 이용할 수 있습니다. output을 출력할 때는importance(),varImpPlot()함수를 이용합니다.m3 <- randomForest(Species ~ ., data = iris, importance = TRUE)importance(m3)## setosa versicolor virginica MeanDecreaseAccuracy ## Sepal.Length 6.782548 7.681925 7.666529 10.222971 ## Sepal.Width 4.719956 1.281748 5.697233 5.597411 ## Petal.Length 23.938576 33.960217 29.349978 35.147853 ## Petal.Width 21.357472 31.017910 31.744591 33.167970 ## MeanDecreaseGini ## Sepal.Length 9.656970 ## Sepal.Width 2.265402 ## Petal.Length 44.044858 ## Petal.Width 43.301342- MeanDecreaseAccuracy(정확도) 부분에서는 Petal.Length 변수가 가장 중요함을 알 수 있고, MeanDecreaseGini(불순도 개선) 부분에서도 중요한 부분을 알 수 있습니다.
varImpPlot(m3, main = "Importance of variables")
'Statistical Modeling & ML > Classification' 카테고리의 다른 글
| Logistic Regression Model (0) | 2017.10.06 |
|---|
