PL/Python

Ensemble Learning 4: 그래디언트 부스트 GBM

PIYA 2022. 12. 22.

Introduction

지난 시간에 앙상블 학습의 유형 중 하나인 Boosting에 대해 다루며 AdaBoost에 대해 적었다.

이번에는 GBM, 그래디언트부스트에 대해 정리한다.

 

 

GBM

Gradient Boost Machine의 약자. 그래디언트 부스트라고도 한다.

그래디언트 부스트는 현대 머신러닝 알고리즘의 선두주자로,

정형데이터의 분류나 회귀에서 딥러닝에 필적할 정도의 높은 성능을 자랑한다.

 

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

 

 

경사하강법

오류 값은 '실제값 - 예측값'으로 계산한다.

피쳐 x1, ... xn에 대해서 예측함수를 F(x), 실제값을 y라고 할 때

예측 에러인 손실함수 h(x)는 y-F(x)로 쓸 수 있다.

이 h(x)값을 최소화하는 방향으로 가중치를 업데이트한다.

경사 하강법은 알아야 할 내용이 많아서 따로 정리할 계획.

 

하이퍼파라미터

loss

경사하강법에서 사용할 비용함수를 지정한다. 기본값은 deviance.

 

learning_rate

GBM이 학습을 진행할 때마다 적용하는 학습률.

순차적으로 오류값을 보정해나가는데 적용하는 계수.

0~1사이의 값을 지정할 수 있으며, 기본값은 0.1이다.

너무 작게 잡으면 local minima에 빠져 예측 성능이 낮아질 수 있고,

너무 크게 설정하면 최소값으로 수렴하지 못할 수 있다.

경사하강법의 learning rate 이해

 

 

실습하기

간단하게 돌려보는 정도로 실습코드를 작성했다.

from sklearn.ensemble import GradientBoostingClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.metrics import f1_score
import time

cancer = load_breast_cancer()

X_train, X_test, y_train, y_test = train_test_split(cancer.data, cancer.target)

start_time = time.time()
gb = GradientBoostingClassifier()
gb.fit(X_train, y_train)
pred = gb.predict(X_test)
f1 = f1_score(y_test, pred)
print('GBM 정확도: {0:.4f}'.format(f1))
print("GBM 수행 시간: {0:.2f} 초 ".format(time.time() - start_time))

# 비교 대상이 될 Random Forest
start_time = time.time()
rf = RandomForestClassifier()
rf.fit(X_train, y_train)
pred = rf.predict(X_test)
f1 = f1_score(y_test, pred)
print('RF 정확도: {0:.4f}'.format(f1))
print("RF 수행 시간: {0:.2f} 초 ".format(time.time() - start_time))

 

비교하기 위해 Random Forest도 추가하였는데, 시간이 배 정도 차이가 난다.

데이터셋이 워낙 작기 때문에, 정확도는 크게 의미있기 어렵다.

 

 

 

Conclusion

Gradient Boost Machine, GBM에 대해서 간단히 알아보았다.

다음엔 XGBoost에 대해서 정리할 예정!

댓글