머신러닝/파이썬 머신러닝 완벽 가이드

Chapter 4.5 GBM (Gradient Boosting Machine)

yooni825 2024. 5. 27. 22:43

GBM의 개요 및 실습

부스팅 알고리즘
: 여러 개의 약한 학습기 weak learner 를 순차적으로 학습 - 예측하면서 잘못 예측한 데이터에 가중치 부여를 통해 오류를 개선해 나가면서 학습하는 방식 

대표적인 구현 : AdaBoost(Adaptive boosting) , 그래디언트 부스트 

AdaBoost 에이다 부스트
: 오류 데이터에 가중치를 부여하면서 부스팅을 수행하는 알고리즘

 

 

AdaBoost 에이다 부스트 

AdaBoost

 

맨 왼쪽 그림과 같이 + , - 로 이루어진 피처 데이터가 존재 

  • Step 1 : 첫번째 약한 학습기가 분류 기준 1로 +, -를 분류 .
                  동그라미로 표시된 + 데이터는 + 데이터가 잘못 분류된 오류 데이터 
  • Step 2 : 이 오류 데이터에 대해서 가중치 값 부여 
                  가중치가 부여된 오류 + 데이터는 다음 약한 학습기가 더 잘 분류할 수 있게 크기가 커짐
  • Step 3 : 두 번째 약한 학습기가 분류 기준 2로 +, - 분류 
                  동그라미 - 데이터는 오류 데이터 
  • Step 4 : Step 2와 동일한 과정 
  • Step 5 : 세번째 약한 학습기가 분류 기준 3으로 +, - qnsfb 
                  에이다 부스트는 약한 학습기가 순차적으로 오류 값에 대해 가중치를 부여한 예측 결정 기준을 모두 결합해 예측 수행
  • Step 6 : 3개의 약한 학습기를 모두 결합한 결과 예측

 

GBM (Gradient Boost Machine)

 

: 에이다 부스트와 유사하지만, 가중치 업데이트를 경사 하강법을 이용하는 것이 다르다. 

- 오류 값 = 실제 값 - 예측값

- 분류의 실제 결과값 : y

- 피처 : x1, x2, x3, ..., xn 

- F(x) : 해당 피처에 기반한 예측 함수 

- 오류식 : h(x) = y - F(x)

- 경사하강법 : 오류식 h(x)를 최소화하는 방향성을 가지고 반복적으로 가중치값을 업데이트 하는 것 (머신러닝에서 제일 중요함!!!!!!)

 

GradientBoostingClassifier 클래스 이용하여 GBM 학습

학습 시간이 너무 오래 걸려서 교재의 결과를 참고하도록 하겠습니다.....;;

from sklearn.ensemble import GradientBoostingClassifier
import time
import warnings
warnings.filterwarnings('ignore')

X_train, X_test, y_train, y_test = get_human_dataset()

# GBM 수행 시간 측정을 위함. 시작 시간 설정.
start_time = time.time()

gb_clf = GradientBoostingClassifier(random_state=0)
gb_clf.fit(X_train , y_train)
gb_pred = gb_clf.predict(X_test)
gb_accuracy = accuracy_score(y_test, gb_pred)

print('GBM 정확도: {0:.4f}'.format(gb_accuracy))
print("GBM 수행 시간: {0:.1f} 초 ".format(time.time() - start_time))

 

GBM 정확도 : 0.9389
GBM 수행 시간 : 537.7초

내 컴퓨터에서 돌리면 수행시간이 더 오래 걸리네;;;;

 

위의 결과를 보면, 기본 하이퍼 파라미터만으로 랜덤 포레스트보다 나은 예측 성능을 보인다는 것을 알 수 있다. 

일반적으로, GBM이 랜덤 포레스트보다는 예측 성능이 조금 뛰어나다. 

But, 수행 시간이 오래 걸리는 단점이 존재 

 

 

GBM 하이퍼 파라미터 소개 

  • loss : 경사 하강법에서 사용할 비용함수를 지정 
              default = deviance
  • learning_rate : GBM이 학습을 진행할 때마다 적용하는 학습률, Weak leanrer가 순차적으로 오류값을 보정해 나가는데 적용하는 계수 
    n_estimators와 상호보완적으로 사용
  • n_estimators : weak learner의 개수 
                             weak learner가 순차적으로 오류를 보정하기에 개수가 많을수록 성능은 좋으나 수행시간이 오래 걸린다.
                              default = 100
  • subsample : weak learner가 학습에 사용하는 데이터의 샘플링 비율 
                          default = 1 (전체 학습 데이터를 기반으로 학습한다는 의미)