머신러닝/파이썬 머신러닝 완벽 가이드
Chapter 4.5 GBM (Gradient Boosting Machine)
yooni825
2024. 5. 27. 22:43
GBM의 개요 및 실습
부스팅 알고리즘
: 여러 개의 약한 학습기 weak learner 를 순차적으로 학습 - 예측하면서 잘못 예측한 데이터에 가중치 부여를 통해 오류를 개선해 나가면서 학습하는 방식
대표적인 구현 : AdaBoost(Adaptive boosting) , 그래디언트 부스트
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 (전체 학습 데이터를 기반으로 학습한다는 의미)