본문 바로가기
data analysis, R

R-공부 : 스코어링, Decision Tree & Random Forest

by 데이터 퍼즐 2021. 5. 8.
반응형

Decision Tree에서 각 트리의 스코어링 방법 > 노드별로 무질서 측정 후에 퀄리티 테스트를 함

ㄴ데이터셋(노드)의 무질서 D(disorder(set))=P(positive 데이터갯수)/T(노드 내 전체 데이터 개수)log2P/T-N/Tlog2N/T

무질서는 낮을 수록 좋음(극단값인 0이나 1에 가까워질 수록 좋음)

Q(Test)=∑(sets produced:노드개수)D(sets:각 노드의 무질서)*노드비율(해당노드데이터/테스트 전체 데이터)

ex)Q(test) 1*4/8+0*3/8+0*1/8=4/8+0+0=1/2

 

*범주형

*연속형: 모든 점이 테스트 후보라고 생각하고 볼 것

ㄴ(>=,<), 분기를 나누고 각 노드에 있는 값을 모아 평균을 구해서 대체값의 반영

 

#랜덤 포레스트는 앙상블 학습 중 배깅(bagging)에 해당하는 방법 : bootstrap aggregating

 

2)Decision Tree의 단점: 오버피팅될 수 있음(데이터 일관성, 일반화하기가 어렵고 정확도가 낮게 나옴)

 

3) 과정 정리: n개 랜덤 데이터 샘플선택(중복o)>d개 피쳐(중복x)>Decision Tree 학습> 결과 투표 클래스 할당

 

 

Decision Tree

Decision Tree: 패키지설치> 기본트리> crooss-validation> 가지치기> 예측

*install.packages("tree")
library(tree)

treeRaw<-tree(Class~. , data=train) : 이때 Class는 타겟, #.은 피쳐 전체

plot(treeRaw)

text(treeRaw)

 

*cv_tree<-cv.tree(treeRaw(전단계트리), FUN=prune.misclass) #FUN(function:가지치기함수선택, prune.misclass:오분류기준)

plot(cv_tree)

 

*가지치기(pruning)

prune_tree<-prune.misclass(treeRaw(전단계 기본트리), best=4) #best:cross-validation을 통해 구한 사이즈

plot(prune_tree)

text(prune_tree,pretty=0) #pretty가 0이라는 건 분할 피쳐 이름을 바꾸지 않겠다는 뜻

 

*예측

pred<-predict(prune_tree,test,type='class') #prune_tree는 가지치기 이후 트리 의미', test:테스트 데이터

confusionMatrix(pred,test$Class) 

 

Random Forest

 

decision tree를 여러번 반복해서 얻은 값

#decision tree의 오버피팅을 보완하기 위함

ㄴ y:정확도, x:랜덤피쳐개수

ㄴ장점: 기준에 따라서 가지치기만 해주면, 이해, 시각화, 직관적, 성능도 좋고, 수학적 부담도 적음

#install.packages("caret",dependencies=TRUE)

library(caret)

ctrl<-trainControl(method="repeatedcv",repeats=5)

rfFit<train(Class~., data=train, method="rf", trControl=ctrl, prePocess=c("center","scale"), metric="Acuuracy")

ㄴpred_test:실제데이터 기준 정확도 예측

ㄴvarlamp(정확도)

 

cf: Decision Tree<Random Forest 정확도 높음

 

 

 

반응형

댓글