의사결정나무는 통계에 대한 이해없이도 시각적으로 어떻게 결과가 나왔는지 이해하기 쉬움.
하지만 단점도 있음. 과적합(over-fit)될 가능성이 큰 모델.
따라서 전체 데이터에서 train 데이터와 test데이터로 나누어, 학습하며
과적합이 될 가능성을 줄여줘야함.
또 의사결정 나무가 굉장히 커져서 이해하기에 복잡해질 수 있다.
따라서 미리 가지치기(pre-pruning)을 해줘야한다.
가장 대표적인 방법 중 하나는
1. 최대로 뻗어나갈 수 있는 가지의 깊이를 미리결정된 사이즈로 제한하는 것.
또 다른 방법은
2. 하나의 노드가 가지는 최소한의 관측치 수를 정해두는 것이다.
이러한 가지치기 방법은 의사결정나무가 과도하게 커지는 것을 방지한다.
하지만 너무 빨리 가치가 뻗어나가는 것을 제한해버리면,
중요하거나 혹은 미묘한 패턴을 찾는 데 실패할 수 있다.
---------------------------------------------------------
그래서 post-pruning(다 자라나게 한 후, 가지치기?)를 수행할 수 있다.
의사결정 나무 모델의 정확도(accuracy)가 거의 떨어지지 않는 수준에 도달할 때,
가지치기를 수행한다.
다시 말해, 가지가 늘어남에 따라 복잡성이 커지게 되는데
가지를 쳐서 복잡성이 줄어들어도 정확도에 큰 차이가 생기지 않는 수준에서
가지치기를 수행한다.
(갑자기 떠오른건데, 투자론에서 포트폴리오 모형을 만들 때,
25개정도의 주식종목을 담았을 때의 위험은 100개 정도의 주식종목을 담았을 때의 위험과
거의 비슷하다는 것이다.
25개 정도 담으면 비체계적인 위험은 거의 사라지고 시장위험만 남게 됨)
포트폴리오모형의 위험과 비슷한 것 같다.
아무튼 rpart 라이브러리는 pre-pruning과 post-pruning을 시각화할 수 있음.
#pre-pruning
library(rpart)
a<-rpart.control(maxdepth= ,minsplit=)
b<-rpart(종속변수~ 독립변수들, data= ,method="class", control=a)
위와 같은 방식으로 rpart.control이라는 함수를 통해 미리 깊이와 최소한의 관측치 수를 제한해두고
이후 rpart함수를 통해 의사결정 나무모델을 만들 시, control이라는 argument를 통해 결정한 값을 추가할 수 있음.
#post-pruning
#cp=0으로 하는 까닭은 pre-pruning을 하지않기 위해서.
a<- rpart(종속변수~. , data= , method= "class", control= rpart.control(cp=0))
#plotcp를 이용해 오일치률과 트리 사이즈를 시각화 할 수 있음
plotcp(a)
b<- prune(a, cp= )
c<-predict(a, test셋, type="class")
#c의 정확도 측정
mean(c==test셋의 실제 값)
'R programming' 카테고리의 다른 글
시계열 데이터 밑바닥부터 다루기 in R (1) (0) | 2020.02.03 |
---|---|
data.frame과 data.table을 비교해보자 in R (0) | 2019.10.28 |
ROC 커브와 AUC (를 이해하기 전 민감도와 특이도 이해하기) (0) | 2019.07.20 |
지도학습(supervised learning)-나이브 베이지안 모델 in R(Today I learn) (0) | 2019.07.02 |
지도학습(supervised learning)-KNN : 정규화에 대해(Today I learn) (0) | 2019.07.01 |