[Data Analysis 개념] Ensemble(앙상블)-3 : Boosting(Adaboost, Gradient Boosting)

2020. 7. 30. 13:41ML in Python/Knowledge

1. Boosting

 boosting은 오분류된 데이터에 집중해 더 많은 가중치를 주는 ensemble 기법이다. 맨 처음 learner에서는 모든 데이터가 동일한 가중치를 갖는다. 하지만, 각 라운드가 종료될 때마다, 가중치와 중요도를 계산한다. 그리고 복원추출을 진행할 때 가중치의 분포를 고려한다. 가중치의 분포가 고려되며 오분류된 데이터에 가중치를 더 얻게되면서, 다음 round에서 더 많이 고려된다. 

Boosting - 출처: https://commons.wikimedia.org/wiki/File:Ensemble_Boosting.svg

 

 Boosting에는 AdaBoost, LPBoost, TotalBoost, BrownBoost, MadaBoost, LogitBoost, Gradient Boosting 등 많은 종류가 존재한다.  Boosting 기법들의 차이는 오분류된 데이터를 다음 라운드에서 어떻게 반영시킬건지의 차이이다. 이 게시글에서는 가장 기본적인 boosting기법인 AdaBoost와 요즘 많이 쓰이는 Gradient Boosting에 대해서 알아볼 것이다. 

 

2. AdaBoost

 AdaBoost는 가장 기본적인 Boosting기법이다. 바로 위의 Boosting설명이 AdaBoost인 것이다. 이를 좀 더 이해하기 쉽도록 예제를 통해서 확인해보자.

 위의 그림을 하나씩 따라가보며 알아보자.

1. Original Data를 보면 모든 데이터의 가중치가 0.1로 동일하게 설정되어있다. 

2. Round1으로 넘어오면서 Original Data 중에서 빨간색 네모의 데이터가 수집되었다. 이를 기반으로 분류 기준인 B1을 설정하였다. B1보다 클 경우는 -로, 작을 경우는 +로 설정한 것이다. 이것은 분류 기준을 향해 조정하도록 하는 방향성을 뜻한다. 

3. i번째 데이터에 대해 가중치를 업데이트하는 작업을 진행한다. 이 과정에서 오분류된 데이터는 가중치를 크게 설정하고, 정분류된 데이터는 가중치를 작게 설정한다. 

4. 업데이트한 가중치의 확률을 기준으로 샘플을 재수집한다. Round1에서는 맨 오른쪽 두 데이터가 잘못 분류되어 높은 가중치를 받았다. 

5. 4의 결과로 Round2의 빨간색 네모 데이터가 수집되었다. 

6. 수집된 데이터로 모형학습을 진행한 결과 다시 B2가 분류 기준값으로 조정되었다.

7. 가중치를 다시 업데이트하는 과정을 진행한다.

8. 이러한 과정을 반복횟수만큼 진행한다.

9. 예시에서처럼 Round3까지의 결과를 종합하면 Original Data와 동일해지는 Overall 결과가 발생한다. 

 

 AdaBoost의 최종의사결정 방법은 아래와 같다. 

 H(x)는 최종분류기 (final classifier)을 의미한다. 여기서 a_m은 m라운드에서 생성된 약한 분류기에 대한 가중치를 의미한다. a_m이 크다는 것은 m라운드의 분류기가 좋은 성능을 보인다는 것이고, a_m이 작다는 것은 m라운드의 분류기가 안좋은 성능을 보인다는 것이다. h_m은 m라운드에서 생성된 약한 분류기(weak classifier)를 의미한다.

 이 과정을 통해서 각 라운드에서 안좋은 분류기에 대해서 가중치 부여가 이루어지는 것이다. 그리고 이를 기반으로 최종 의사결정 모델이 이루어진다.

 

3. Gradient Boosting

 

Gradient Boosting의 원리

 Gradient Boosting은 이전 Round의 분류기의 데이터 별 오류를 예측하는, 또 다른 새로운 약한 분류기를 학습시키는 것이다. 즉, 데이터의 오차를 학습하는 또다른 분류기를 형성하는 것이다. 즉, 𝐻𝑡(𝑥)를 예측할 때, 

의 데이터 별 오류를 예측하는 새로운 분류기를 만드는 것이다. 이를 더 쉽게 알아보도록 하자.

 

 아래와 같이 feature x를 입력받아서 target y를 예측하는 모델 h0가 있다고 가정하자.

 Error가 예측 불가능한 random noise가 아닌 경우에 예측 성능을 올리는 가장 직관적인 방법은 error를 줄이는 것이다. 그렇기에 그 error를 다시 분류기를 형성하여 예측을 진행한다.

....

 위와 같은 과정을 진행한다면, error의 크기는 점점 줄어들 것이다. 그리고 이 과정을 모두 합친다면 아래와 같이 표현된다.

 

 이 Boosting이 Gradient라고 불리는 이유는 기울기를 이용하기 때문이다. Gradient Boosting에서 사용하는 Loss function은 아래와 같다.

 이때 Loss함수의 기울기(gradient)는 아래와 같이 표시된다.

 그리고 이 gradient를 negative한 것은 잔차(Residual)와 동일하다. 

 

 이 Negative Gradient를 최소화시키면서 학습하는 것이 바로 gradient boosting인 것이다. 이 gradient boosting은 error를 최소화하는 방향으로 진행하기에 아래와 같은 도식화 형태를 띄게된다.

Gradient Boosting의 종류

 

Gradient Boosting에는 또다시 XGBoost / LightGBM / Catboost 가 존재한다. 

1. XGBoost

 XGBoost는 Gradient Boosting과는 달리 목적식에 Regularization term이 추가되었다. 이 Regularization term을 추가시킴으로써 복잡한 모델에 패널티를 부여해서, 모델이 과적합되는 것을 방지시켜준다. 아래는 XGBoost를 수식으로 표현한 것이다. 여기서 Regularization term은 번형될 수 있으며, 이 Regularization term을 조정하는 것이 Gradient Boosting의 종류에 차이를 만드는 것이다. 

 아래 그림은 Gradient Boosting과 XGBoost의 학습 차이를 나타낸다. Gradient Boosting의 경우는 상대적으로 Overfitting이 발생했다고 볼 수 있다. 반면, XGBoost는 전반적으로 잘 적합되었지만, Gradient Boosting보다 Overfitting이 해소되었다고 볼 수 있다.

2. LightGBM

 LightGBM은 XGBoost와 다르게 leaf-wise lose를 사용한다. 즉 depth보다 leaf에 초점을 맞추어 loss를 더 줄일 수 있다는 것이다. 게다가 GPU를 지원하며, XGBoost에 비해 동일 파라미터 기준에서 2배 이상의 빠른 속도를 갖는다고 말한다.

 하지만, leaf-wise이기에 depth가 깊은 Decision Tree처럼 Overfitting에 민감하다. 그렇기에 최대한 대량의 학습데이터를 갖추고 학습을 진행해야, 이상치에 영향을 덜 받으며 올바른 적합결과를 만들어낼 수 있다. 

 아래 그림을 보자. 왼쪽은 XGBoost이다. 이는 전반적인 Depth를 기준으로 적합을 진행하지만, 오른쪽 그림의  LightGBM은 leaf를 기반으로 적합을 진행한다. 

3. Catboost

 Catboost는 비교적 최신에 나온 앙상블 모형이다. Catboost는 unbiased boosting with categorical features를 의미하는데, 즉 카테고리 변수들로 부스팅을 진행한다는 것이다. 

 Cat boost는 잔차 추정의 분산을 최소로 하면서 bias를 피하고자 한다. 관측치를 포함한 채로 boositng작업을 진행하는 것이 아니라, 관측치를 뺀 채로 학습해서 그 관측치에 대한 unbiased residual을 구하고 학습하자는 아이디어인 것이다.  그리고 이 Categorical feature을 One-hot encoding 방식이 아니라, 수치형으로 변환하는 방법을 사용한다.

 

 Boosting에 대한 python을 통한 실습 링크는 아래 남겨놓겠다. 관심이 있다면 한 번 봐보는 것도 좋을 듯 하다. 

Boosting

https://todayisbetterthanyesterday.tistory.com/52?category=821465

 

[Python] Ensemble(앙상블) - Boosting(AdaBoost, Gradient Boosting)

*아래 학습은 Fastcampus의 "머신러닝 A-Z까지"라는 인터넷 강의에서 실습한 내용을 복습하며 학습과정을 공유하고자 복기한 내용입니다.  이 게시글은 오로지 파이썬을 통한 실습만을 진행한다. ��

todayisbetterthanyesterday.tistory.com