오늘 배운 내용은 ADsP 자격증 딸 때 공부했던 내용과 함께 보면 더 이해가 잘되어서 데이터에듀의 '데이터분석준전문가' 책의 글을 빌려 정리해보았다.
Ensemble
- 주어진 자료로부터 여러 개의 Tree 기반의 예측 모형들을 만든 후 예측모형들을 조합하여 하나의 최종 예측모형을 만드는 방법
- 방법: 다중 모델 조합(combining multiple models) / 분류기 조합(classifier combination)
- 성능을 분산시켜 오버피팅 감소의 효과가 있다.
아래에서 대표적인 앙상블 기법을 하나하나 소개해보겠다.
1. 배깅, Bagging (Bootstrap AGGregatING)
- 여러 개의 bootstrap 자료를 생성하고 각 bootstrap 자료에 예측모형을 만든 후 결합하여 최종 예측모형을 만드는 방법
- Bootstrap : 주어진 자료에서 동일한 크기의 표본을 랜덤 복원추출하여 뽑은 자료
- 같은 데이터가 여러 번 추출될 수도 있고, 아예 추출되지 않을 수도 있다.
- e.g., 3개의 행 -> {1,3,5}, {2,3,8}, {5,11,8}, ...
- 여러 모델이 각 Bootstrap에 병렬로 학습되며, 그 합계를 집계(aggregating)하는 방식이다.
2. 부스팅, Boosting
- 예측력이 약한 모형(weak learner)들을 결합하여 강한 예측모형을 만드는 방법
- 재표본 과정에서 각 자료에 동일한 확률을 부여하지 않고, 분류가 잘못된 데이터에 더 많은 가중을 주어 표본을 추출하는 분석 기법
- 분류가 잘못된 데이터에 가중을 주어야 하기 때문에 여러 모델이 순차적으로 학습될 수밖에 없다.
- 훈련오차를 비교적 빨리, 쉽게 줄일 수 있다.
- 병렬로 학습되지 못해 비교적 느리다.
- Outlier에 약하다.
- 각각의 예측을 혼합할 때,
- Regression : 평균/가중평균/중위값
- Classification: 투표
1. AdaBoost (Adaptive Boosting)
- 데이터를 바탕으로 여러 weak learner들을 반복적으로 생성 (iterate)
- 매번 앞선 learner가 잘못 예측한 데이터에 가중치를 부여하고 (boosting) 학습
- 최종적으로 만들어진 strong learner를 이용하여 실제 예측 진행
- 하지만, 높은 weight를 가진 data point가 존재하면 성능이 크게 떨어지는 단점
2. Gradient Boosting
- 경사 하강법(Gradient Descent)을 사용해서 Adaboost보다 성능을 개선한 Boosting 기법
- 에러를 최소화하는 방법으로 경사 하강법을 적용하여 weight 업데이트 진행
- 학습 성능은 좋으나, 모델의 학습 시간이 오래 걸린다는 단점
3. XG Boost (Extreme Gradient Boosting)
- 병렬처리 기법을 적용하여 Gradient Boost보다 학습 속도를 끌어올렸다.
- Tree를 구성할 때, 각 Tree의 노드에서 어떤 feature로 가지를 쳐야할지 결정하는 과정 중 예측값 계산에 병렬 처리를 사용
4. Light GBM
- Leaf-wise-node 방법을 사용
(Reference: https://mac-user-guide.tistory.com/79)
- 기존의 tree 기반 알고리즘은 level-wise 방식 사용하여, 최대한 균형이 잡힌 tree를 유지하면서 분할한다. 이 방법은 tree의 깊이를 최소화하지만, 균형을 맞추기 위한 시간이 오래 걸린다.
- leaf-wise-node 분할 방식: tree의 균형을 고려하지 않고, 최대 손실값을 가지는 leaf node를 지속적으로 분할하는 방법
- tree의 깊이는 깊어지고, 비대칭적인 tree가 생성된다.
- 예측 오류 손실을 최소화할 수 있다.
- 속도는 빨라지고, 더 큰 데이터를 받아들일 수 있다.
3. 랜덤 포레스트, Random Forest
- Bagging + Random
- Decision Tree가 분산이 크다는 점을 고려하여 배깅과 부스팅보다 더 많은 무작위성을 주어 약한 학습기를 생성한 후 이를 선형결합하여 최종 학습기를 만드는 방법
- 많은 tree들이 생성되어 Overfitting을 피한다.
- 설명변수의 일부분만을 고려해 최적의 분할 성능을 가질 수 있다.
'멋쟁이 사자처럼 AI SCHOOL 5기 > Today I Learned' 카테고리의 다른 글
| [5주차 총정리] Gradient Boosting Regression (+ Deviance graph, Feature importances) (0) | 2022.04.12 |
|---|---|
| [5주차 총정리] 교차 검증(Cross Validation) (0) | 2022.04.12 |
| [5주차 총정리] scikit-learn 머신러닝 모델 학습 단계 Framework (0) | 2022.04.12 |
| [4주차 총정리] Python 기반 SQL 프로그래밍(6) _Selenium+SQLite 실습 (0) | 2022.04.11 |
| [4주차 총정리] Python 기반 SQL 프로그래밍(5) _ORDER BY, WHERE, JOIN, GROUP BY, SubQuery 총정리 (0) | 2022.04.11 |