본문 바로가기

데이터사이언스/머신러닝

Gradient Boosting Algorithm

1. boosting이란?

boosting는 머신러닝 앙상블 학습 방식의 한 가지 종류이다. 머신러닝에서 앙상블이란, 하나의 모델이 데이터에 과적합되는 것을 막기 위해 여러 모델을 써서 학습하는 방식이다. boosting 방식의 특징은 학습에 필요한 데이터를 순차적으로 구성해 나간다는 것이다. 아래 그림을 보면 그 방법을 알 수 있다.

boosting 방식의 학습 과정

 데이터가 주어지면 첫번째 모델이 학습을 진행한다. 이 과정에서 잘못 분류한 데이터에 다음 모델 학습 때 가중치를 부여한다. 이 과정을 N번 반복하면서 만들어진 모델을 모두 합한 것이 최종 모델이다.

 

2. 예시

Gradient Boost은 Boosting 방법 중 최근에 많이 쓰이는 방법이다. 다음 데이터를 바탕으로 키, 좋아하는 색깔, 성별이라는 정보로 몸무게를 예측하는 모델을 만들어야 한다고 가정해보자.

 

처음에는 주어진 몸무게의 평균값으로 예측한다.

이렇게 만들어진 예측값을 실제 데이터와 비교한 결과, 다음과 같은 오차가 발생한다.

이번에는 이렇게 발생한 오차를 예측하는 트리를 만든다.

 

같은 노드에 여러 값이 있는 노드는 평균을 내어 하나의 값으로 바꾼다.

이제 기존 모델과 오차를 예측한 모델을 이용해서 예측값을 새로 구해본다. 단순히 두 값을 더하면 완벽한 예측을 할 수 있다. 하지만 주어진 데이터에 과적합하게 된다. 따라서 두 번째 모델에 learning rate를 곱한 후 첫 번째 모델에 더해준다. 여기에선 learning rate를 0.1로 설정했다. 첫 번째 데이터를 보자. 실제 몸무게는 88kg이다. 처음 예측한 값은 71.2Kg이고, 다음 모델을 적용해 예측한 값은 72.9kg이다. 실제 데이터와 비교해보면 오차가 줄어든 것을 알 수 있다.

 이제 모델을 통해 예측한 결과를 바탕으로 오차를 업데이트한다. 첫 번째 데이터의 경우에는 오차가 (88 - 72.9 = 15.1)kg이다. 그리고 업데이트한 오차를 가지고 새로운 트리를 만든다.

이렇게 이전 모델에서 발생한 오차를 예측하는 과정을 반복하며 오차를 줄여나간다. 이 과정은 일정한 반복 횟수, 일정 범위 안의 오차 등 일정한 조건이 달성될 때까지 반복한다.

 

 

2. 개념

   위 예시처럼, Gradient boost는 이전 모델의 오차를 다음 모델로 예측하는 것이다. 이 알고리즘에 Gradient라는 이름이 붙은 이유는 매 학습마다 예측하는 오차가 손실함수의 기울기와 같기 때문이다.

 손실 함수가 Squared Error인 경우를 보자.

손실함수

손실함수를 모델함수로 미분하면 다음과 같이 오차(y-f(x))가 나온다.

손실함수의 기울기

따라서 Gradient Boost는 각 모델의 기울기를 따라서 손실함수를 최소화하는 경사하강법을 사용한다고 볼 수 있다.

 

 미분만 가능하다면 손실함수에 Squared Error말고 다른 함수를 쓸 수도 있다. 그러면 오차가 아닌 해당 함수의 Gradient를 분류하며 학습을 진행하게 된다.

 

 

3. 활용

이 알고리즘은 XGBoost, LightGBM을 비롯한 다양한 머신러닝 라이브러리에서 사용된다.

 라이브러리마다 사용하는 알고리즘이 약간 다르다. XGBoost는 위 그림처럼 균형 잡힌 트리를 만든다. 이 방법은 과적합을 막을 수 있지만 학습에 오랜 시간이 걸린다. 반면에 LightGBM은 이름처럼 가볍고 빠른 학습이 특징이다. 트리의 균형을 맞추지 않고 최대 오차를 가지는 트리를 분할하는 방법으로 학습한다. 이 방식은 빠른 학습이 가능하지만 과적합의 위험이 있어 만개 이상의 데이터에 사용하는 것을 권장한다. 또한 숫자형 데이터에만 적용이 가능한 XGBoost와 달리 범주형 데이터에도 바로 적용이 가능하다는 특징이 있다.