Programming & Machine Learning/풀어쓰는 머신러닝

XGBoost 알고리즘의 간단한 이해

Yamarae 2023. 7. 6. 20:45

 

 

 

캐글에서 가장 유명한 알고리즘은 XGBoost이다. 웬만한 대회의 리더보드에는 XGBoost가 최상단에 위치해 있다. 이가 시사하는 바는, Vision 이나 NLP 등의 Specific한 Task를 제외한 일반적인 ML Task에서 가장 범용적으로 잘 동작하는 알고리즘이 XGBoost라는 것이다. 

 

이런 기법은 아직 문제의 해결법이 미숙하거나 숙련도가 높지 않은 도메인의 새로운 문제를 풀 때 가장 먼저 고려되어야 하는 방법이 될 수 있다. 일반적으로 어떤 도메인의 ML 문제를 해결할 때 가장 중요한 것은 정확한 피쳐 엔지니어링을 통한 모델링이다. 또는 샘플링이나 파라미터 튜닝 같은 ML 테크닉이 중요할 수도 있고, 어떤 알고리즘을 사용하느냐가 중요할 수도 있다. 하지만 오늘 소개할 XGBoost는 데이터 과학자가 해결해야 하는 그러한 문제들을 한 방에 어느정도 해결해주는 기법이라고 할 수 있다.

 

그리고 이를 가능하게 해주는 이유는 바로 XGBoost가 앙상블(Ensemble) 학습 기법을 바탕으로 하는 알고리즘이기 때문이다.

 

 

 


 

 

1. 앙상블 학습 기법

 

앙상블 학습 기법은 여러 개의 약한 학습기(Weak Learner)를 결합하여 강력한 학습기(Strong Learner)를 구성하는 방법을 의미한다. 크게 배깅(Bagging) 방법과 부스팅(Boosting) 방법으로 나뉘는데, 약간의 동작 방식의 차이점이 존재한다.

 

 

1) 배깅

 

배깅은 Bootstrap Aggregating의 약자로, 여러 개의 학습 데이터 세트를 랜덤하게 복원 추출하여 각각의 데이터 세트에 대해 독립적으로 약한 학습기를 학습시키는 방식이다. 복원 추출의 방식을 사용하기 때문에 중복된 데이터를 학습하는 경우가 포함될 수 있다. 이렇게 학습된 약한 학습기들의 예측 결과를 평균 또는 다수결 등의 방법으로 결합하여 최종 예측을 수행한다. 배깅은 약한 학습기들이 독립적으로 학습되고 예측되기 때문에 병렬적으로 처리할 수 있다. 가장 대표적인 알고리즘으로는 랜덤 포레스트(Random Forest)가 있다.

 

 

2) 부스팅

 

부스팅은 약한 학습기들을 순차적으로 학습시켜 가중치를 부여하여 강력한 학습기를 만드는 방법이다. 초기에는 전체 학습 데이터 세트를 사용하여 약한 학습기를 학습시키고, 이후에는 이전 학습기가 잘못 예측한 샘플에 가중치를 부여하여 다음 학습기를 학습시킨다. 이렇게 반복적으로 학습과 가중치 업데이트를 진행하면서 약한 학습기들이 순차적으로 강화되어 최종 예측기를 형성하게 된다.

 

요약하자면, 배깅은 병렬적인 학습과 복원 추출을 통해 약한 학습기들을 결합하는 반면, 부스팅은 순차적인 학습과 가중치 업데이트를 통해 약한 학습기들을 강화시키는 방법인 것이다.

 

 


 

 

2. 그래디언트 부스팅(Gradient Boosting)과 XGBoost

 

그리고 조금 더 발전된 방법이 바로 그래디언트 부스팅 방법이다. 이는 부스팅(Boosting) 알고리즘의 일종으로, 이전 학습기의 오차(residual)를 최소화하는 방향으로 새로운 학습기를 추가해 나가게 된다. 이름에서 유추할 수 있듯이, 경사하강법(Gradient Descent)을 활용하는 부스팅 방법이다.

 

 

 

그래디언트 부스팅은 기존의 estimator를 수정해나가는 방식을 채택하지 않고, 매 단계마다 아예 새로운 estimator를 생성한다. 그리고 이 과정에서 경사하강법을 사용하여 모델의 오차를 줄여나간다. 이제, 만약 estimator의 구조가 Depth가 2인 결정 트리라고 가정해보자(estimator가 결정 트리인 그래디언트 부스팅 모델이 바로 XGBoost 모델이다). 결정 트리에서는 하나의 분기점이 estimator가 되는데, 이 모델은 총 2차 추정기까지 가지게 되는 것이다.

 

만약 2가지 조건(성별, 키)과 몸무게를 y로 하는 데이터가 있으며, 비용 함수를 MSE로 했을 때의 모델의 학습 과정은 다음과 같다.

 

 

1) estimator 1

 

 

1차 추정기는 성별을 기준으로 삼는다. 이에 따라 두 자식 노드가 생겨나고, 각각 평균값이 예측값(추정 몸무게)이 되고 각각의 MSE도 계산된다.

 

 

2) estimator 2

 

 

그리고 이제 잔차(residuals)를 입력값으로 하는 두번째 estimator를 실행한다. 부스팅의 아이디어는 이전 학습기가 잘못 예측한 샘플에 가중치를 부여하여 학습하는 방식인데, 그래디언트 부스팅에서는 이렇게 잔차를 입력값으로 하여 아이디어를 실행한다.

 

다음으로 2차 추정기는 키 160을 기준으로 삼는다. 두 자식 노드가 생겨나고, 노드에 속한 값들의 평균이 2번 추정기의 추정 몸무게가 된다. 

 

 

3) estimation

 

1차 추정기의 예측값과 2차 추정기의 예측값을 더하면 최종 예측값이 된다. 그래서 각 데이터의 최종 추정치를 계산해보면 아래 그림의 테이블과 같다.

 

 

정확한 수식이나 자세한 과정은 조금 생략하긴 했지만, 이러한 추정 과정을 반복하고, 그 과정에서 생성되는 MSE를 경사하강법으로 학습하는 것이 XGBoost의 모델 학습 과정이다.