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 정확도 높음
'data analysis, R' 카테고리의 다른 글
R공부- Logistic Regression 개념 이해 (0) | 2021.05.03 |
---|---|
R공부- K-Nearest Neighbor (0) | 2021.05.02 |
R공부- 데이터로 분석하는 지도학습 개념 (0) | 2021.05.01 |
R공부- 단순 선형 회귀분석 (0) | 2021.04.30 |
R_공부: 머신러닝 & 확률 기초 (0) | 2021.04.29 |
댓글