12. 의사결정나무와 랜덤 포레스트
12-1. 의사결정나무 (Decision Tree) 1
1) 의사결정나무 (Decision Tree)
- 의사결정나무 (Decision Tree)
기계학습 중 하나로 의사결정 규칙을 나무 형태로 분류해나가는 분석 기법
분석에 있어 가장 중요한 변수가 먼저 선택됨(root node)
분류 기준값은 분순률을 최소화하도록 정해짐
- 분석 과정이 직관적이고 이해하기 쉬움
- 연속성/범주형 변수를 모두 사용할 수 있음
- 분지규칙은 불순도를 최소화 시킴
범주들이 섞여있는 정도
Step 1 : tree 형성 (Growing tree) -> 과적합 문제
Step 2 : tree 가지치기 (pruning tree)
Step 3 : 최적 tree로 분류 (classification)
- 의사결정나무 실행 패키지 : tree (그 외 repart, party 패키지)
install.packages("tree")
library(tree)
library(caret)
caret 라이브러리 설정 : 오분류율 교차표(confusion matrix) 생성을 위한 패키지
- iris 데이터 (iris.csv)
- iris 데이터 (학습데이터와 검증데이터의 분할)
set.seed(1000)
N<-nrow(iris)
tr.idx<-sample(1:N, size=N*2/3, replace=FALSE)
데이터분할 (학습데이터 2/3, 검증데이터 1/3)
train<-iris[tr.idx,]
test<-iris[-tr.idx,]
train (100개의 데이터)
test (50개의 데이터)
- tree패키지에 있는 tree함수
help("tree")
Step1
- 의사결정나무 함수 : tree (종속변수~x1+x2+x3+x4, data= )
treemod<-tree(Species~., data=train)
treemod
plot(treemod)
text(treemod,cex=1.5)
treemod는 iris데이터의 범주를 분리해주는 분지결과를 저장
plot(treemod) - 의사결정나무 분지를 그림으로 표현
cex-폰트 사이즈 (1)
- 학습데이터의 tree결과
tree의 결과(*은 터미널 노드) : 마디 6에서는 더이상 분지할 필요 없음
step2
- 최적tree모형을 위한 가지치기(prunung) : cv.tree(tree모형결과, FUN= )
- 아래 결과에서 복잡도계수(cost complexity parameter)의 값이 최소가 되는 노드수를 선택
cv.trees<-cv.tree(treemod, FUN=prune.misclass)
cv.trees
plot(cv.trees)
- pruning (가지치기) : cv.tree함수를 이용하여 최적 터미널 노드를 탐색
hellp(cv.tree)
교차타당성 검정
FUN = prune.tree
cv.tree함수에서 가지치기 함수는 prune.tree 혹은 prun.misclass를 사용할 수 있다.
- 최종 tree모형 (iris data)
prune.trees<-prune.misclass(treemod, best=3)
iris data는 best=3
plot(prune.trees)
text(prune.trees,pretty=0, cex=1.5)
prune.tr은 최종모형의 이름(최종터미널노드=3)
- pruning(가지치기) 전과 후의 tree
Step3
- 의사결정나무결과 정확도 : test data에 대한 정확도
treepred<-predict(prune.trees,test,type='class')
confusionMatrix(treepred,test$Species)
'공부 > R & Python' 카테고리의 다른 글
12-3. 랜덤포레스트 (Random Forest) (0) | 2020.03.04 |
---|---|
11-2. 의사결정나무 (Decision Tree) 2 (0) | 2020.03.04 |
11-3. 서포트벡터머신 3 (Support Vector Machine) (0) | 2020.03.04 |
11-2. 서포트벡터머신 2 (Support Vector Machine) (0) | 2020.03.04 |
11-1. 서포트벡터머신 1 (Sipport Vector MAchine) (0) | 2020.03.04 |