[파머완] ch4.5 GBM

­반소희·2022년 7월 1일
1

이전 글에서 보팅, 배깅 알고리즘에 대해 다루었다면, 이번 글에서는 부스팅 알고리즘을 정리한다. 앙상블 방법의 부스팅 알고리즘의 대표적인 예가 바로 GBM이다!

ch4.5 부스팅 알고리즘

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

  • 부스팅 알고리즘의 대표적인 예

    • AdaBoost (Adaptive boosting)

      오류 데이터에 가중치를 부여하며 부스팅을 수행하는 대표적인 알고리즘이다.

      1) (k-1) 번째 약한 학습기가 분류 기준에 따라 분류
      2) 오류 데이터에 대해 가중치를 부여
      3) (k) 번째 약한 학습기는 가중치가 부여된 데이터를 분류 기준에 따라 분류
      4) 이 과정을 반복하고, 최종적으로 얻어진 (n) 개의 분류 기준들을 모두 결합하여 최종 예측 반환 (단, 개별 약한 학습기는 각각 가중치 (예 - 학습기 1은 0.3, 학습기 2는 0.5, 학습기 3은 0.8) 를 부여하여 결합)

    • GBM (Gradient Boosting Machine, 그래디언트 부스팅)

      GBM은 AdaBoost와 유사하지만, 가중치 업데이트를 '경사 하강법' (Gradient Descent) 을 이용하는 것이 큰 차이이다.

ch4.5 GBM

GBM은 부스팅 알고리즘의 대표적인 예로, 여러 개의 약한 학습기를 순차적으로 학습-예측하면서 잘못 예측한 데이터에 경사 하강법을 이용하여 가중치 업데이트를 하는 알고리즘을 말하며, 이때 경사 하강법은 오류 값인 y - y^ 을 최소화하는 방향성을 가지고 반복적으로 가중치 값을 업데이트 하는 것을 의미한다.

사이킷런은 GBM 분류를 위해 GradientBoostingClassifer 클래스를 제공한다.

  • 데이터 로드
from sklearn.ensemble import GradientBoostingClassifier
import time
import warnings
import pandas as pd
def get_human_dataset( ):
    
    feature_name_df = pd.read_csv('/content/drive/MyDrive/파이썬 머신러닝 완벽 가이드/data/human_activity/features.txt', sep='\s+', header=None, names=['column_index', 'column_name']) ## features.txt 로드
    new_feature_name_df = get_new_feature_name_df(feature_name_df) ## 중복 feature명 처리 (+ _n 형태)
    feature_name = new_feature_name_df.iloc[:, 1].values.tolist()  ## feature name list 생성
    
    ## X data
    X_train = pd.read_csv('/content/drive/MyDrive/파이썬 머신러닝 완벽 가이드/data/human_activity/train/X_train.txt', sep='\s+', names=feature_name)
    X_test = pd.read_csv('/content/drive/MyDrive/파이썬 머신러닝 완벽 가이드/data/human_activity/test/X_test.txt', sep='\s+', names=feature_name)
    
    ## y data
    y_train = pd.read_csv('/content/drive/MyDrive/파이썬 머신러닝 완벽 가이드/data/human_activity/train/y_train.txt', sep='\s+', header=None, names=['action'])
    y_test = pd.read_csv('/content/drive/MyDrive/파이썬 머신러닝 완벽 가이드/data/human_activity/test/y_test.txt', sep='\s+', header=None, names=['action'])
    
    return X_train, X_test, y_train, y_test

## 데이터 로드
X_train, X_test, y_train, y_test = get_human_dataset()
  • GBM 모델 학습 및 검증
## GBM 수행 시간 측정을 위해 시작 시간 설정
start_time = time.time()

## GBM 
gbm_clf = GradientBoostingClassifier(random_state=0)
gbm_clf.fit(X_train, y_train)

## 테스트 데이터셋에 대한 에측 수행
gbm_pred = gbm_clf.predict(X_test)

## 정확도 확인
from sklearn.metrics import accuracy_score
gbm_acc = accuracy_score(y_test, gbm_pred)

## 수행시간 확인
gbm_time = time.time() - start_time

print('acc:', gbm_acc)
print('time:', gbm_time)
  • GBM 특징
    • 일반적으로 랜덤 포레스트에 비해 예측 성능이 뛰어남
    • 수행 (학습) 시간이 상대적으로 많이 필요함
    • 학습 시간이 오래 걸리는 단점이 있지만 과적합에도 강하며 예측 성능이 뛰어나다는 장점이 존재함
    • GBM 등장 이후 GBM을 기반으로 하는 새로운 알고리즘이 소개되었고, 그래디언트 부스팅 기반 알고리즘의 대표적인 예로는 XGBoost, LightGBM이 있음

ch4.5 GBM 하이퍼 파라미터

  • loss

    • 경사 하강법에서 최적화 할 손실 함수를 지정하는 하이퍼 파라미터
    • 기본값은 deviance
  • learing_rate

    • 학습을 진행할 때마다 적용하는 학습률
    • 기본값은 0.1
  • n_estimators

    • 약한 학습기의 개수
    • 기본값은 100
  • subsample

    • 약한 학습기가 학습에 사용하는 데이터의 샘플링 비율
    • 기본값은 1
    • 과적합을 방지하기 위해서는 1보다 작은 값으로 설정 필요
  • 그 외에도 max_depth, max_features 등의 파라미터가 있음

요약

앙상블 방법의 부스팅 알고리즘 중 GBM이 있다. GBM은 경사 하강법을 이용하여 가중치를 업데이트한다. 사이킷런 GradientBoostingClassifer로 구현이 가능하다. 수행 시간이 오래 걸리지만, 높은 예측 성능과 과적합 방지에 대한 기대를 할 수 있다. 이를 기반으로 하는 대표적인 알고리즘으로는 XGBoost, LightGBM가 있다. 다음 글에서 이어서 정리한다.

profile
행복한 소히의 이것저것

0개의 댓글

관련 채용 정보