본문 바로가기
Machine Learning/scikit-learn

[앙상블] GBM(Gradient Boosting Machine)

by ISLA! 2023. 8. 22.

 

 

부스팅이란?

  • 부스팅 알고리즘은 여러 개의 약한 학습기를 순차적으로 학습&예측하면서 잘못 예측한 데이터에 가중치를 부여하며 오류를 개선해 나감
  • 부스팅의 대표적인 알고리즘
    • AdaBoost(에이다부스트) : 오류 데이터에 가중치를 부여하면서 부스팅을 수행하는 대표적인 알고리즘
    • GBM(그래디언트 부스트) : 가중치 업데이트를 경사 하강법을 이용하는 것이 에이다부스트와 차이
      • XGBoost, LightGBM 의 패키지가 있음

 

GBM

 

  • 분류와 회귀 모두 가능
  • 사이킷런의 GradientBoostingClassifier 클래스 사용
  • 순차적인 예측 오류 보정을 통해 학습을 수행하므로, 멀티 CPU 코어 시스템을 사용하더라도 병렬 처리가 지원되지 않아서 대용량 데이터의 경우 학습 시간이 매우 많이 필요함.
  • 아래 예제로 간단히 테스트 가능 ➡ 치명적 단점인 '시간이 오래 걸림' 확인
    • 이러한 단점을 극복하기 위해, 그래디언트 부스팅 기반의 ML 패키지가 새로 만들어짐 ➡ XGBoost, LightGBM
from sklearn.ensemble import GradientBoostingClassifier
import time
import warnings
warnings.filterwarnings('ignore')

# 데이터 가져와서, 학습/테스트 데이터 분리
X_train, X_test, y_train, y_test = get_human_dataset()

# 수행 시간 측정
start_time = time.time()

# GBM 적용, 학습과 예측 수행
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("수행시간: {0:.1f}초" .format(time.time() - start_time))

상당히 오래걸림..!

728x90