앙상블
앙상블은 쉽게 말하면 여러 분류기의 결과를 하나의 결과로 합치는 것이다. 대부분의 경우 앙상블의 결과가 단일 모델보다 예측 결과가 우수하지만, 항상 그렇다고 보장하지는 않는다. 캐글이나 데이콘에서 정형 데이터 챌린지의 경우 대부분 XGBoost, LGBM과 같은 부스팅 알고리즘을 쓰는데, 이 또한 앙상블 기법 중 하나이다. 앙상블의 종류로는 크게 Voting, Bagging, Boosting이 있고, Stacking 또한 종종 사용된다.
보팅(Voting)
보팅은 일반적으로 서로 다른 알고리즘 기반의 모델을 (예를 들면, knn과 logistic regression, decision tree와 같은 식으로 말이다) 같은 트레인 셋으로 학습시킨 결과를 결합한다. 보팅은 크게 하드 보팅(hard voting)과 소프트 보팅(soft voting)으로 나뉜다.
하드 보팅은 우리가 흔히 아는 다수결 투표와 같은 개념이다. 각 모델의 결과(이 경우, predict 메소드를 사용하여 최종 예측 클래스만을 리턴받는다)를 취합하여 가장 많이 예측된 클래스로 최종 예측 클래스로 선정하는 것이다.
소프트 보팅은 예측 클래스가 아닌 클래스 당 예측 확률(predict_proba의 리턴값)을 모든 모델로부터 받아와서, 해당 클래스 당 예측 확률 값을 평균 내어 가장 높은 확률을 갖는 클래스로 최종 예측을 하는 것이다.
예를 들어, 3개의 모델을 voting 앙상블을 한다고 가정해보자. 이때, 각 모델은 knn(모델 1), logistic regression(모델 2), decision tree(모델 3)이다. 예측해야 하는 클래스는 0,1로 총 2가지이다.
우선 hard voting을 한다고 가정한다. 이 경우에는 각 모델은 학습 데이터 샘플에 대해 0 또는 1의 값을 리턴할 것이다. 이때 knn은 1, logistic regression은 0, decision tree는 0을 리턴하였을 때, (0이 더 많은 모델로부터 선택을 받았으므로) voting 앙상블 분류기의 최종 예측값은 0이 될 것이다.
다음은 soft voting을 진행한다. 이 경우에는 각 모델은 학습 데이터 샘플에 대해 0부터 1까지의 확률값을 리턴할 것이다. 여기서 확률값은 해당 데이터 샘플이 클래스 0일 확률과 클래스 1일 확률을 벡터 형태로 표현한 것이다. 세 가지 모델이 각각 [0.2, 0.8], [0.51, 0.49], [0.55, 0.45] 을 리턴했다고 했을 때, voting 앙상블 분류기는 각 클래스에 대해 3가지 결과를 평균을 취한다. 결과는 [0.42, 0.58] 이 된다. 따라서 최종 예측 클래스는 1이 될 것이다.
위의 예시와 같이 보팅의 방법에 따라 최종 예측값이 달라질 수도 있다는 점을 염두에 두어야 한다. 일반적으로는 하드 보팅 방식보다는 소프트 보팅 방식이 더 많이 쓰인다. 사이킷런에서는 VotingClassifier()에서 voting을 지원하고 있다.
배깅(Bagging)
배깅(Bagging)은 보팅(Voting)과 다르게, 단일 알고리즘 기반의 모델을 다른 데이터를 기반으로 학습시켜 결과를 결합한다. 여기서 다른 데이터라고 해서 조금 의아할 수도 있는데, 전체 데이터셋 중에서 랜덤 샘플링을 통해 얻은 여러 개의 subset (이때 각 subset은 몇몇 데이터를 일부러 중복하여 샘플링(복원추출)되도록 한다) 을 각각의 모델이 취해 학습을 진행하게 되는 것이다. 이를 Bootstrapping 분할 방식이라고 한다.
Bagging의 대표적인 알고리즘은 랜덤 포레스트로, Decision Tree 모델을 기반 모델로 삼아서 bootstrapping 분할 후 예측치를 결합한다.
Bagging은 Bootstrap Aggregating의 약자로서 불리는 것이다. 말그대로 Bootstrapping을 통해 추출한 데이터로 각 모델을 학습시키고 이를 aggregating, 합계하여 최종 결과를 도출해낸다. 이러한 과정에서 각 모델이 과적합(overfitting; 과적합이 된다는 것은 각 모델 간의 분산이 커짐을 의미한다)이 될 가능성이 커진다. 이를 합계해나가는 과정에서 과적합을 방지할 수 있다(모델 간의 variance 감소). aggregate 함수로는 mean을 주로 사용한다.
참고)
파이썬 머신러닝 완벽 가이드 (권철민 저, 위키북스)
'DeepLearning > Basic' 카테고리의 다른 글
[DL] ResNet의 Inspiration (4) | 2021.09.24 |
---|---|
[ML/DL] 최적화(Optimization), 경사하강법 (Gradient Descent Methods) (2) (0) | 2021.08.21 |
[머신러닝/ML] 군집화 (Clustering) (0) | 2021.03.03 |
[머신러닝/ML] 결측치 처리하는 7가지 방법 (Seven Ways to Make up Data) (0) | 2021.02.18 |
[ML/DL] 최적화(Optimization), 경사하강법 (Gradient Descent Algorithms) (2) | 2021.02.04 |