· 랜덤 포레스트(Random Forest)
랜덤 포레스트는 결정 트리를 응용하여 만들어진 기법이다. 대표적으로 랜덤 포레스트(Random Forest)와 경사 부스팅 결정 트리(Gradient Boosted Decision, GBDT)가 있다.
Tip. 결정 트리
2021.08.27 - [개념 정리] - 지도 학습 - 의사 결정 나무(Decision Tree)
결정 트리는 주어진 데이터(학습 데이터)에 따라 생성된 모델이 매우 다르고 Over-Fitting의 문제가 있기 때문에 일반화가 어렵다는 단점이 있었다. 그렇기 때문에 성능 점수와 변동 폭이 큰 단점을 보완하기 위해 랜덤 포레스트는 해당 부분을 보완하는데 집중하여 학습원리가 만들어졌다.
우선 랜덤 포레스트는 이름에서부터 알 수 있듯이 숲을 랜덤 하게 배치하듯이 의사 결정 트리를 배치했다고 볼 수 있다.
(나무가 모여 숲이 만들어진다!)
· 랜덤 포레스트 원리
만약 어떤 데이터가 주어졌고, 이를 예측하기 위해 주어진 많은 요소를 고려해야 한다고 가정해보자.
20개의 요소(feature)가 주어졌다고 하면 이를 토대로 결과(Label)를 예측해야 한다. 하지만 기존의 의사 결정 나무 모델을 이용해서 예측을 한다고 하면 과적합(Over-Fitting)이 발생할 것이다. 왜냐하면 20개의 feature는 하나의 결정 트리를 만들 때 트리의 가지가 엄청 많아질 것이고 이는 곧 과적합의 문제에 빠지게 된다.
반면 랜덤 포레스트는 20개의 요소(feature)를 랜덤하게 n개를 선택한다. 여기서 n은 편의상 5라고 가정하자.
그러면 중복이 허용되지 않는 랜덤한 요소를 선택하여 하나의 결정 트리를 만드는 과정을 k번 반복하게 된다.
그렇게 k개의 의사 결정 나무 모델을 만들고 나면 여러 개의 학습 모델이 내린 예측 결과를 다수결로 통합하여 여러 결과를 합치는 방법이다. 이런 방법을 앙상블(Ensemble)이라고 한다.
여기서 회귀일 경우에는 가장 많은 값의 평균을, 분류일 경우에는 가장 많이 나온 값(최빈값)을 최종 예측 값으로 정한다.
· 앙상블(Ensemble)
앙상블은 조화 또는 합주단과 같은 통일된 의미를 갖고 있다.
바로 위 글에서 설명했듯이 앙상블 학습은 다수의 의사 결정 트리(Decision Tree)를 결합하여 한 개의 길이가 깊은 결정 트리보다 더 좋은 성능을 내고자 하는 머신러닝 기법이다.
요약하면 약한 분류기(Weak Classifier)들을 모아서 결합하여 하나의 강한 분류기(Strong Classifier)를 만들어 내는 것을 말한다.
앙상블 학습법에도 두 가지 정도로 종류가 있다. 하나는 배깅(Bagging), 또 다른 하나는 부스팅(Boosting)이다.
Tip. 부트스트랩(Bootstrap)에 대한 배경을 알고 있으면 보다 좀 더 이해하기 쉽다.
2021.08.31 - [개념 정리] - 부트스트랩(Bootstrap)
- 투표(Voting)
여러 개의 분류기의 마지막 과정에 투표를 통해 최종적인 예측 결과를 결정하는 방식이다. 기본적으로 서로 다른 알고리즘을 여러 개 결합하여 사용하게 된다. 투표(Voting) 방법에도 3가지 정도로 나눠진다.
(1) 하드 보팅(Hard Voting)
Hard Voting 또는 Majority Voting은 각 모델이 결과를 예측한 후 단순하게 가장 많은 표를 얻은 결과를 선택하여 결론을 내리는 방법이다.
(2) 소프트 보팅(Soft Voting)
Soft Voting 또는 Probability Voting으로 하드 보팅과 마찬가지로 원리는 매우 간단하다. 각 분류별 모델들이 예측한 확률을 합산해서 가장 높은 분류 결과를 선택하는 방법이다.
(3) 가중치 투표(Weighted Voting)
이름에서 알 수 있듯이 모델별로 가중치를 줘서 높은 점수가 나오는 결과를 선택한다. 가중치를 주는 기준에는 다양한 방법들이 있겠지만 보통 train data에서의 확률에 곱해줄 가중치를 Score 계산 식에 넣어주면 된다.
Soft Voting과 Hard Voting은 동시에 사용이 불가능하기 때문에 가중치(Weighted Voting) 설정은 옵션이다.
기본적으로 scikit learn에서는 Default 값은 Hard로 설정되어 있다.
추가적인 설명을 덧붙이자면 약한 학습기들의 결과(신뢰도)가 다른 경우 가중치를 부여하여 확률 값들의 평균이 아닌 합으로 결과를 내리게 된다.
- 배깅(Bagging)
배깅은 Bootstrap Aggregation의 약자로 데이터 샘플링 방식을 Bootstrap(랜덤 복원 추출)을 통해서 모델 학습을 해서 결과를 집계(Aggreation)하는 방법이다. 각 샘플 데이터는 동일한 유형의 알고리즘을 기반으로 분류 예측을 한다.
여기서 범주형(Categorical Data)는 최빈수를 기준으로 투표 방식(Voting)으로 결과를 집계하고, 연속형(Continuous Data)는 평균을 기준으로 집계한다. 또 과적합(Over-Fitting) 방지에 효과적이기도 하다.
대표적인 배깅의 활용 예시는 Random Forest 알고리즘이 있다.
※ 대표적으로 Random Forest가 있다.
- 부스팅(Boosting)
여러 개의 분류기가 순차적으로 학습을 진행한다. 이때 가중치를 활용하여 약 분류기를 강 분류기로 만들게 된다.
그림에서와 같이 잘못 분류한 약 분류들에게 가중치를 높여주고, 잘 분류한 약 분류기들에게는 가중치를 낮추어 주는 과정을 순차적으로 진행한다. 이렇게 가중치를 부스팅 하며 학습을 진행하기 때문에 부스팅 방식이라고 불리는 이유이다. 최종적으로 모든 과정의 결과를 Combine 하여 분류 정확도가 높은 강 분류기로 만들어 준다.
부스팅 방식은 예측 성능이 뛰어나(즉, 에러가 적다)서 앙상블 학습을 주도하고 있다고 해도 과언이 아니다.
일반적으로 부스팅 방식은 배깅에 비해 성능이 좋지만, 단점으로는 속도가 느리고 과적합이 발생할 확률이 높으므로 상황에 따라 적절히 사용해야 한다.
단, 추가적인 설명을 덧붙이자면 개별적인 의사 결정 나무의 성능이 낮다면 부스팅이 적합, 과적합이 문제라면 배깅 방식이 적합하다.
※ Boosting의 대표적인 예시
- Adaptive Boosting(AdaBoost)과 Gradient Boosting Model(GBM) 계열로 나눌 수 있음
1. AdaBoost
2. Gradient Boosting
3. XGBoost
4. LightGBM
5. CatBoost
6. NGBoost
[참고] - 귀퉁이 서재
'개념 정리' 카테고리의 다른 글
잭나이프(Jackknife) (0) | 2021.10.04 |
---|---|
교차 검증(Cross Validation) (0) | 2021.09.25 |
부트스트랩(Bootstrap) (0) | 2021.08.31 |
지도 학습 - 의사 결정 나무(Decision Tree) (4) | 2021.08.27 |
ROC와 분류 성능 평가 지표(혼동 행렬, Confusion Matrix) (0) | 2021.08.19 |