■ 앙상블 481p
"동일한 학습 알고리즘을 사용해서 여러모델을 학습하는 개념"
"Weak learners 를 결합하면 single learner 보다 더 나은 성능을 얻음"
결합함수를 사용하고 최종 예측을 결정하기 위해 과반수 의결을 사용하거나
각 모델의 표vote 에 과거 성능을 기반으로 가중치를 부여하는 것과 같은
좀 더 복잡한 전략을 사용할 수 있다.
■ Bagging 484p
부트스트랩 집계 bootstrap aggregating의 약자.
"샘플을 여러 번 뽑아 각 모델을 학습시켜 결과를 집계 하는 방법"
모델의 예측은(분류를 위한) 투표와 또는 (수치 예측을 위한) 평균화를
이용해서 결합한다
C5.0 에서 trials 가 Bagging 역할 한것이다.
nbagg 파라미터는 앙상블에서 투표할 수 있는 의사결정트리의 수를
제어하는데 사요한다(디폴트 값이 25 이다)
이 숫자를 증가시키면 모델의 성능을 한계점까지 향상시킬 수 있다
예:
install.packages("ipred")
library(ipred)
mybag<-bagging(default~. , data=credit, nbagg=25)
credit_pred<-predict(mybag, credit)
> table(credit_pred, credit$default)
credit_pred no yes
no 700 3
yes 0 297
단점은 트리가 많은 경우 훈련에 어느정도 시간이 소요된다.
문제268.
caret 패키지의 train() 함수를 이용해서 10-폴드 교차 검증과 같이
배깅트리를 사용할 수 있다. (486p 참고)
ipred 배깅 트리 함수의 메소드 이름이 treebag 라는 것을 주목하시오.
library(caret)
credit<-read.csv("credit.csv")
set.seed(300)
ctrl<-trainControl(method="cv", number=10)
train(default~., data=credit, method="treebag",
trControl=ctrl)
Bagged CART
1000 samples
16 predictor
2 classes: 'no', 'yes'
No pre-processing
Resampling: Cross-Validated (10 fold)
Summary of sample sizes: 900, 900, 900, 900, 900, 900, ...
Resampling results:
Accuracy Kappa
0.745 0.354216
※ 설명:
이 모델의 카파 통계량 0.33 은 배깅 트리 모델이 최소한 11장의 앞부분에서
튜닝했던 최고의 C5.0 의사결정 트리만큼 실행한다는 것을 말해준다.
이것은 앙상블 방법의 힘을 보여준다.
함께 작동하는 단순한 학습자들의 집합은 매우 정교한 모델을
능가할 수 있다.
m<-train(default~., data=credit, method="treebag",
trControl=ctrl)
credit_predict<-predict(m, credit)
table(credit_predict, credit$default)
credit_predict no yes
no 700 1
yes 0 299
■ Boosting(489p)
"약한 학습자의 성능을 올려서(boost) 강한 학습자의 성능을 얻는다"
독일은행의 채무 불이행자를 예측하는 모델을 boosting 으로 구현
credit<-read.csv("credit.csv")
install.packages("adabag")
library(adabag)
set.seed(300)
model_ada <- boosting(default ~ ., data=credit)
predict_ada <- predict(model_ada, credit)
# 예측 결과 확인
predict_ada$confusion
f<- as.factor(predict_ada$class)
credit_pred<-predict(predcit_ada$class, credit)
table(credit_pred, predict_ada$class)
처음보는 데이터에 대한 좀 더 정확한 성능평가를 하려면
다른 평가방법을 할 필요가 있다
set.seed(300)
adaboost_cv<-boosting.cv(default~., data=credit)
adaboost_cv$confusion