STUDY_SEONMIN

DAY57 - 앙상블 모델(취합방법론) 본문

EDUCATION/DSS Online 6기

DAY57 - 앙상블 모델(취합방법론)

Kululu_ 2021. 4. 13. 14:07

분류 문제를 해결하는 방법 중 앙상블 모델을 사용하는 방법이 있습니다.

 

앙상블 모델

앙상블 모델은 분류 문제를 해결하기 위한 여러 모델들을 결합한 모델입니다.

모델을 결합하는 방법에는 "취합 방법론"과 "부스팅 방법론"이 있습니다.

 

일반적으로 앙상블 모델을 사용하게 되면 과최적화 문제를 방지할 수 있고, 개별 모델의 성능이 엄청 뛰어난 것이 아닌 이상 앙상블 모델이 더 좋은 성능을 보이는 경우가 많습니다.

 

이번 포스팅에서는 앙상블 모델을 만드는 방법 중 취합방법론에 대해 알아보겠습니다.

취합 방법론

취합 방법론은 미리 어떤 모델들을 결합할 지를 정해놓고 모델을 결합하는 방법입니다.

대표적으로 1) 다수결, 2) 배깅, 3) 랜덤포스레트 가 있습니다.

 

1) 다수결 방법

모델을 결합할 때 다수결 투표방식으로 최종 분류를 하는 방법입니다.

Hard voting 방법과 Soft voting 방법이 있습니다.

 

Hard voting은 개별 모델들이 분류한 결과를 기준으로 투표를 진행합니다.

예를 들어 각각의 개별 모델이 다음과 같은 결과를 출력했다고 하겠습니다.

  Model1 Model2 Model3
$\hat{y}$ 0 1 0

총 3개의 모델 중 2개의 모델이 $\hat{y}=0$이라고 이야기하므로 앙상블 모델의 예측 결과 역시 0이 되는 것입니다.

 

Soft voting은 개별 모델들이 출력하는 조건부확률값을 합하여 최종 결정을 내리는 방법입니다.

  Model1 Model2 Model3 Soft voting
$P(\hat{y}=0 \mid x)$ 0.78 0.0 0.65 $\frac{1.43}{3} = 0.47$
$P(\hat{y}=1 \mid x)$ 0.22 1.0 0.35 $\frac{1.57}{3} = 0.53 $

위의 예시에서는 Soft Voting을 이용한 다수결 앙상블 모델은 $\hat{y} = 1$이라고 예측하게 되는 것입니다.

 

 

각각의 개별 모형이 정답을 출력할 확률이 $p$인 경우, 서로 다르고 독립적인 모형 $N$개를 모아서 다수결 모형을 만들면 정답을 출력할 확률은 다음과 같습니다.

$$ \sum_{k \gt \frac{N}{2}}^N \binom N k p^k(1-p)^{N-k}$$

 

$p \gt 0.5$ 인 경우 위의 값은 $N$이 커질 수록 커지게 됩니다.

즉 다수결 방법으로 앙상블 모델을 만들게 되면 사용하는 모델(성능이 0.5보다는 좋은)이 많으면 많을수록 앙상블 모델의 성능이 좋아지게 되는 것입니다.

 

2) 배깅

앞서 서로 다르고 독립전인 $N$개의 모델을 다수결 방법으로 취합하면 더 좋은 모델을 만들 수 있다고 하였습니다. 하지만 실제로 세상에 알려진 대표적인 분류 모델들은 로지스틱 회귀모델, QDA, LDA, NB, Tree 와 같이 그 수가 한정되어 있습니다. 

 

이러한 한계를 극복할 수 있는 방법이 바로 배깅 방법인데, 배깅은 원래의 Trainnig data로 부터 랜덤하게 데이터를 복원추출하여 개별모델을 학습시키는 방법입니다.

 

 

다수결 방법이 하나의 데이터를 여러 알고리즘으로 학습해 모델을 결합했다면, 배깅에서는 데이터를 샘플링해서 여러 개의 데이터셋으로 나누고 하나의 알고리즘을 이용해 여러 개의 모델을 만들고 결합하는 방법입니다.

 

 

3) 랜덤 포레스트

랜덤 포레스트는 배깅의 대표적인 예시이며 개별 모델로 의사결정나무를 사용하는 앙상블 모델입니다.

 

단 개별 모델들을 학습시킬 때 모든 독립변수들을 다 활용하는 것이 아니라, 독립변수들도 샘플링하여 일부 독립변수만을 통해 개별 모델을 학습시키는 방법입니다.

 

이 때 학습시 사용하는 독립변수의 숫자를 정할 수 있는데 보통 총 $M$개의 독립변수가 있을 때 $\sqrt{M}$의 독립변수만을 랜덤으로 뽑아서 학습시키게 됩니다.

 

개별 모델 학습시 모든 독립변수들을 활용하게 되면 아무리 데이터를 샘플링했더라도 각 노드에서 선택하게 되는 변수가 유사해질 가능성이 높기 때문에 독립변수들도 샘플링하여 개별 의사결정나무의 다양성과 독립성을 확보하는 것입니다.

 

 

With Python

1) 다수결 방법

sklearn에서 제공하는 VotingClassifer를 사용하면 됩니다.

from sklearn.ensemble import VotingClassifier

ensemble_model = VotingClassifier(
    estimators = [('name1', model2), ('name2', model2), ('name3', model3), ...],
    voting = 'soft' or 'hard'
)

 

2) 배깅

sklearn에서 제공하는 BaggingClassfier를 사용하면 됩니다.

from sklearn.ensemble import BaggingClassifier

ensemble_model = BaggingClassifier(
    base_estimator = model, # 사용할 개별 모형
    n_estimators = 10, # 만들 모형의 수(=샘플링 세트의 수), default 10
    bootstrap = True, # 데이터의 중복 사용 여부, default True
    max_samples = 1.0, # 선택할 샘플의 수 or 비율, default 1.0
    bootstrap_features = False, # 독립변수 중복 사용 여부, default False
    max_features = 1.0, # 독립변수 중 선택할 독립변수의 수 or 비율, default 1.0
)

 

3) 랜덤포레스트

sklearn에서 제공하는 RandomForestClassifier를 사용하면 됩니다.

from sklearn.ensemble import RandomForestClassifier

random_forest = RandomForestClassifier(
	max_depth= , #개별 의사결정나무의 max_depth
    n_estimators= , #만들 의사결정나무의 수
)

'EDUCATION > DSS Online 6기' 카테고리의 다른 글

DAY58 - 서포트 벡터 머신  (0) 2021.04.14
DAY57 - 앙상블 모델(부스팅)  (0) 2021.04.13
DAY56 - 의사결정나무  (0) 2021.04.12
DAY55- 나이브 베이즈 분류 모형  (0) 2021.04.05
DAY54 - 판별분석법  (0) 2021.04.04
Comments