앙상블_보팅, 배깅, 부스팅
##앙상블 - 보팅
1. 앙상블 학습
앙상블 학습을 통한 분류는 여러 개의 분류기를 생성하고 그 예측을 결합함으로써 보다 정확한 최종 예측을 도출하는 기법을 말합니다.
2. 앙상블의 유형
앙상블의 유형은 일반적으로는 보팅, 배깅, 브스팅으로 구분할 수 있으며, 이외에 스태킹 등의 기법이 있습니다.
대표적인 배깅은 랜덤 포레스트(Random Forest)알고리즘이 있으며, 부스팅은 에이다 부스팅, 그레디언트 부스팅, XGBoost, LightGBM 등이 있습니다. 정형 데이터의 분류나 회귀에서는 GBM 부스팅 계열의 앙상블이 전반적으로 높은 예측 성능을 나타냅니다.
넓은 의미로는 서로 다른 모델을 결합한 것들을 앙상블로 지칭하기도 합니다.
3. 앙상블의 특징
단일 모델의 약점을 다수의 모델들을 결합하여 보완
뛰어난 성능을 가진 모델들로만 구성하는 것보다 성능이 떨어지더라도 서로 다른 유형의 모델을 섞는 것이 오히려 전체 성능에 도움이 될 수 있음
램덤 포레스트 및 뛰어난 부스팅 알고리즘들을 모두 결정 트리 알고리즘을 기반 알고리즘으로 적용함
결정 트리의 단점인 과적합(오버 피팅)을 수십~수천 개의 많은 분류기를 결합해 보완하고 장점인 직관적인 분류 기준은 강화됨
4. 보팅(Voting)과 배깅(Bagging) 개요
보팅과 배깅은 여러 개의 분류기가 투표를 통해 최종 예측 결과를 결정하는 방식
보팅과 배깅의 다른 점은 보팅의 경우 일반적으로 서로 다른 알고리즘을 가진 분류기를 결합하는 것이고, 배깅의 경우 각각의 분류기가 모두 같은 유형의 알고리즘 기반이지만, 데이터 샘플링을 서로 다르게 가져가면서 학습을 수행해 보팅을 수행하는 것이다.
5. 하드보팅과 소프트보팅
하드 보팅 - 다수의 classifier 간 다수결로 최종 class 결정
소프트 보팅 - 다수의 classifier 들의 class 확률을 평균하여 결정
##앙상블 - 배깅
1. 배깅 - 랜덤 포레스트(Random Forest)
배깅의 대표적인 알고리즘은 랜덤 포레스트
랜덤 포레스트는 다재다능한 알고리즘으로, 앙상블 알고리즘 중 비교적 빠른 수행 속도를 가지고 있으며, 다양한 영역에서 높은 예측 성능을 보이고 있습니다.
랜덤 포레스트는 여러 개의 결정 트리 분류기가 전체 데이터에서 배깅 방식으로 각자의 데이터르 ㄹ샘플링해 개별적으로 학습을 수행한 뒤 최종적으로 모든 분류기가 보팅을 통해 예측 결정을 하게 됩니다.
2. 랜덤 포레스트의 부트스트래핑 분할
랜덤 포레스트는 개별적인 분류기의 기반 알고리즘은 결정 트리이지만 개별 트리가 학습하는 데이터 세트는 전체 데이터에서 일부가 중첩되게 샘플링된 데이터 세트입니다. 이렇게 여러 개의 데이터 세트를 중첩되게 분리하는 것을 부트스트래핑 분할 방식이라고 한다. (배깅은 bootstrap aggrefating의 줄임말)
3. 사이킷런 랜덤 포레스트 하이퍼 파라미터
n_estimators 랜덤 포레스트에서 결정 트리의 개수를 지정. 디폴트는 10개. 많이 설정할수록 좋은 성능을 기대할 수 있으나 계속 증가시킨다고 성능이 무조건 향상되는 것은 아님. 또한 늘릴수록 학습 수행 시간이 오래걸리는 것도 감수해야 함.
max_features는 결정 트리에 사용된 max_features 파라미터와 같습니다. 하지만 RandomForestClassifier의 기본 max_features는 Nobe이 아니라 auto, 즉 sqrt와 같습니다. 따라서 랜덤 포레스트의 트리를 분할하는 피처를 참조할 떄 전체 피처가 아니라 sqrt(젠체 피처 개수)만큼 참조합니다.
max_depth나 min_samples_leaf와 같이 결정 트리에서 과적합을 개선하기 위해 사용되는 파라미터가 랜덤 포레스트에도 똑같이 적용될 수 있습니다.
##앙상블 - 부스팅
1. 부스팅
부스팅 알고리즘은 여러 개의 약한 학습기를 순차적으로 학습, 예측하면서 잘못 예측한 데이터에 가중치 부여를 통해 오류를 개선해 나가면서 학습하는 방식
부스팅의 대표적 구현은 AdaBoost(Adaptive boosting)와 그래디언트 부스트가 있습니다.
2. GBM(Gradient Boost Machine) 개요
경사하강법 - 반복 학습을 통해 모델의 오류를 최소화하는 가중치를 업데이트하는 것
GBM도 에이다부스트와 유사하나, 가중치 업데이트를 경사하강법을 이용하는것이 가장 큰 차이. 오류 값은 실제 값 - 예측값. 실제값-예측값으로, 오류식을 최소화하는 방향성을 가지고 반복적으로 가중치 값을 업데이트하는 것이 경사하강법. 경사 하강법은 반복 수행을 통해 오류를 최소화할 수 있도록 가중치의 업데이트 값을 도출하는 기법으로서 머신러닝에서 중요한 기법 중 하나
GBM의 단점 - 가중치 업데이트 반복수행으로 인해 학습 시간이 상대적으로 오래 걸린다.
3. 사이킷런 GBM 주요 하이퍼 파라미터 및 튜닝
사이킷런은 GBM분류를 위해 GradientBoostingClassifier클래스를 제공.
loss - 경사 하강법에서 사용할 비용 함수를 지정. 특벼란 이유가 없으며 기본값인 'deviance'를 그대로 적용
learning_rate - GBM이 학습을 진행할 때마다 적용하는 학습률. weak learner가 순차적으로 오류값을 보정해나가는 데 적용하는 계수. 0~1 사이 값을 지정할 수 있으며 기본값은 0.1. 너무 작은 값을 적용하면 업데이트되는 값이 작아져서 최소 오류 값을 찾아 예측 성능이 높아질 가능성이 높습니다.
m_estimators - weak learner의 개수. weak learner가 순차적으로 오류를 보정하므로 개수가 많을 수록 예측 성능이 일정 수준까지 좋아질 수 있습니다. 하지만 개수가 많을수록 수행 시간은 오래 걸립니다. 기본값은 100입니다.
subsample - weak learner 가 학습에 사용하는 데이터의 샘플링 비율입니다. 기본값은 1이며, 이는 전체 학습 데이터를 기반으로 학습한다는 의미입니다.( 0.5면 학습데이터의 50%) 과적합이 염려되는 경우 subsample을 1보다 작은 값으로 설정합니다.