📙 Fundamentals/ML&DL

앙상블(Ensemble)

Lento_ 2025. 4. 6. 23:39

[ 앙상블 ]

= 여러 개의 분류기(Classifier)를 생성하고 그 예측을 결합함으로써 보다 정확한 최종 예측을 도출하는 기법

= 앙상블 학습의 종류 ) 1. 보팅(Voting) / 2. 배깅(Bagging) / 3. 부스팅(Boosting) / 4. 스태킹(Stacking)


[ 보팅(Voting) ]

voting

 

= 여러 개의 분류기 중 투표 또는 평균을 통해 최종 예측 결과를 결정하는 방식

= 다양한 알고리즘을 조합할 수 있다. (Ex : SVM + KNN + RandomForest)

= 빠르고 간단하다.

= 개별 모델의 독립성이 중요하다.

 

 

(종류)

1. 하드 보팅(Hard Voting) : 다수의 모델이 예측한 클래스 중에서 가장 많이 나온 것을 선택

2. 소프트 보팅(Soft Voting) : 모델들의 확률 예측값을 평균 내서 가장 높은 확률의 클래스를 선택

 

cf. 일반적으로 소프트 보팅의 성능이 더 좋기에 많이 사용된다.


[ 배깅(Bagging) ]

bagging

= 원본으로부터 샘플을 여러 번 뽑아(Bootstrap) 각 모델을 학습시켜 결과물(예측값)을 합치는(Aggregration) 방법

= scikit-learn에서는 원본 데이터의 개수가 N개라면, 원본데이터로부터 중복을 허용하여, 무작위로 N개의 데이터를 추출하여 샘플 데이터를 만든다.

= Bootstrap한 다음, Aggregating → Aggregating : 회귀분석은 평균을 내면 되고, 분류는 빈도수를 계산하면 된다.

= 'RandomForest'는 결정트리 모형을 배깅 방식으로 앙상블한 모형이다.

 


[ 부스팅(Boosting) ]

boosting

= 성능이 안 좋은 약한 학습자(weak learner)들을 합쳐서 성능을 극대화한다.

= 이전 모델이 틀린 예측에 가중치를 주고, 다음 모델이 이를 보완하도록 학습하는 방식

= 모델을 춘차적으로 쌓아가며 점점 더 정교한 모델을 만들어간다.

 

= 정확도가 높고 성능이 우수하다.

= 과적합(Overfitting) 주의 필요(너무 깊은 트리X)

= 순차적 구조이기에 병렬화가 어렵다.

= 대표 알고리즘 ) AdaBoost, Gradient Boosting, XGBoost, LightGBM, CatBoost


[ AdaBoost ]

오분류 데이터에 집중해 예측 성능을 끌어올리는 부스팅 기법이지만, 이상치에 민감하고 해석이 쉽지 않다는 점은 고려해야 한다.

= Adaptive Boost

= 초기 모형을 약한 모형으로 설정하며 매 스텝마다 가중치를 이용하여 이전 모형의 약점을 보완하는 새로운 모형을 순차적으로 적합한 뒤 최종적으로 이들을 선형 결합하여 얻어진 모형을 생성시키는 알고리즘.

(cf. 모형의 약점 = 예측을 제대로 하지 못한 데이터가 존재함을 의미)

 

= 분류, 회귀 문제 모두 적용 가능

= 약한 학습기(Weak Learner)로 구성되어 있으며, 약한 학습기는 Stump(노드 하나에 두 개의 리프로 구성된 트리) 형태이다.

= 어떤 Stump는 다른 Stump보다 가중치가 높다.

= 각 Stump의 error는 다음 Stump의 결과에 영향을 준다.

 

(장점)

1. 과적합의 영향을 덜 받는다.

: 결합하는 모형 개수가 증가함에 따라 테스트 에러가 잘 증가하지 않기 때문이다. 예외적으로 모형의 개수가 아주 크면 과적합이 발생하지만 상대적으로 늦게 발생한다.

 

2. 구현이 쉽다.

 

3. 유연하다.

: 손실 함수를 여러가지를 사용할수 있고, 기본 학습기에 대한 제한이 없는데 의사결정나무, 로지스틱 회귀, 선형 회귀 등을 학습기로 사용 가능하다.

 

(단점)

1. AdaBoost 알고리즘은 이상치에 민감하다.

: 한 모델이 잘못 예측한 데이터 포인트는 다음 모델 학습 시 더 큰 가중치를 갖게 되기 때문이다.

: 이상치에 대해서 계속 설명하려고 시도하다보니 오히려 과적합의 위험이 생기게 된다. 

(해결법)

- 이상치 제거

- 이를 일부 보완한 Gradient Boosting이나 XGBoost등의 알고리즘을 고려하는 것이 효과적

 

2. 해석이 어렵다.

: AdaBoost는 약한 학습기들을 순차적으로 쌓아서 학습한다. 그리고 각 모델은 예측 결과에 일정한 가중치를 두고 전체 예측에 기여하는 구조이다. 따라서 전체적으로는 좋은 예측을 하더라도 왜 그런 예측을 했는지는 설명하기 어렵다. (개별 모델은 약하니까 설명력도 약함.)


[ Gradient Boosting ]

높은 예측 성능과 유연성을 갖춘 강력한 알고리즘이지만, 순차적 학습으로 인해 속도가 느리고, 과적합과 튜닝 난이도에 주의가 필요하다.

= Gradient(또는 잔차)를 이용하여 이전 모형의 약점을 보완하는 새로운 모형을 순차적으로 적합한 뒤 이들을 선형 결합하여 얻어진 모형을 생성하는 지도학습 알고리즘

= 잔차를 이용하여 이전 모형의 약점을 보완한다.

 

(작동원리)

1. 초기 모델: 간단한 약한 학습기(보통 얕은 결정 트리)로 예측 시작

2. 오차 계산: 실제값과 예측값의 차이 → 잔차(오차)

3. 다음 모델 학습: 이 오차를 예측하는 또 다른 모델을 학습시킴

4. 반복: 이전 모델들이 만든 예측을 조금씩 개선하며 쌓아간다

(장점)

1. 높은 예측 성능

: 순차적으로 오차를 줄이는 구조이기에 정밀하게 데이터를 설명할 수 있다.

 

2. 손실 함수, 자유롭게 설정 가능

 

3. Feature Importance를 추출 가능

: 모델 학습이 끝나면 각 특성이 예측에 얼마나 기여했는지에 대한 변수 중요도 평가를 추출할 수 있다.

 

(단점)

1. 학습 속도가 느림

: 구조적이고 순차적 학습이기 때문에 병렬화가 어렵다.

: 큰 데이터셋에서는 시간이 오래 걸릴 수 있다.

 

2. 해석이 어렵다.

: 여러 개의 트리가 결합된 형태이기에, 모델이 왜 그런 예측을 했는지 직관적으로 해석하기 어렵다.

(해결법)

- SHAP이나 LIME 같은 설명 가능한 AI(XAI) 도구를 함께 사용하는 것이 좋다.

 

+) Gradient Boosting 발전형으로 XGBoost, LightGBM, CatBoost 알고리즘이 있다. 

 


[ XGBoost ]

XGBoost는 Gradient Boosting을 최적화한 모델로, 빠른 속도와 정규화 기능을 통해 높은 정확도와 과적합 방지 성능을 동시에 갖춘 강력한 머신러닝 알고리즘이다.

 

= Gradient Boosting + 과적합 방지 + 병렬 학습

= Extreme Gradient Boosting

= 기존 Gradient Boosting의 성능과 속도를 극한까지 끌어올린 버전

        :  정확도, 속도, 정규화 기능을 모두 강화한 트리 기반 앙상블 알고리즘

        → "정규화(Regularization) 추가"

             : 과적합을 방지하기 위해 트리 복잡도에 패널티 부여

        → " 빠른 학습을 위한 최적화"

             : 병렬 처리, 캐싱, Sparsity-aware 학습, Column block 구조 도입 → 속도 강화

        → "손실 함수 + 2차 미분 사용"

             : 기존 Gradient Boosting은 손실 함수의 1차 도함수만 사용

             : GBoost는 2차 도함수(Hessian)까지 사용해서 최적화 성능 향상

 

(작동원리)

1. 정렬된 전체 데이터셋이 가진 영역(Global)을 몇 개의 영역(Local)으로 분할한다.

2. 분할된 데이터셋(Bucket)들의 대해 별도 Split Point를 찾는다.

3. 각 Bucket별 Gradient를 계산하여 Best Split Point(얻을 수 있는 정보량이 최대가 되는 지점)를 찾는다.

4. 각 Bucket별로 병렬 처리가 가능하다.

(장점)

1. 높은 정확도와 빠른 학습 속도

2. 정규화 기능으로 과적합 억제

3. 결측값을 자동 처리한다.

 

(단점)

1. 하이퍼파라미터 튜닝이 복잡함.

: 트리 수, 깊이, 학습률, 정규화 계수 등 조정해야 할 것이 많음

2. 해석이 어려움.

: 복잡한 트리 앙상블이기 때문이다.

3. 메모리 사용량이 큼.

: 대용량 데이터에서는 메모리 효율이 떨어질 수 있다.


[ 스태킹(Stacking) ]

= 여러 가지 모델들의 예측값을 최종 모델의 학습 데이터로 사용하여 예측하는 방법

 

 

 

(((((내용 추가 예정)))))

 


(출처)

https://velog.io/@gangjoo/ML-%EB%B6%84%EB%A5%98-%EC%95%99%EC%83%81%EB%B8%94-%ED%95%99%EC%8A%B5-Ensemble-Learning%EA%B3%BC-%EB%B3%B4%ED%8C%85-Voting

 

https://zephyrus1111.tistory.com/

 

https://bommbom.tistory.com/entry/Boosting-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-XGBoost-%ED%8A%B9%EC%A7%95-%EB%B0%8F-%EC%9E%A5%EB%8B%A8%EC%A0%90

 

https://hwi-doc.tistory.com/entry/%EC%8A%A4%ED%83%9C%ED%82%B9Stacking-%EC%99%84%EB%B2%BD-%EC%A0%95%EB%A6%AC