위의 그림과 같이 기본적으로 부스팅 기법은 여러 개의 약한 학습기를 반복적으로 학습, 예측하면서 잘못 예측한 데이터에 가중치를 부여하여 오류를 개선해 나가는 학습 방식이다.
부스팅의 대표적인 알고리즘으로는 AdaBoost와 그래디언트부스트가 있다.
- AdaBoost(에이다부스트)
에이다부스트 기법은 AdaptiveBoosting을 줄여서 부르는 말로 관측치들에 가중치를 더한다. 즉, 약간 학습기의 오류에 가중치를 더하면서 부스팅을 수행한다.
- GBM
그래디언트 부스팅 기법은 에이다부스트기법과는 유사하나, 가중치 업데이트를 경사하강법을 통해서 최적의 결과를 얻는 알고리즘이다. 쉽게 말하면 학습기의 오류에 가중치를더하는 것이 아니라 아니라 경사하강법을 통해 발생한 잔여 오차(Resudial Error), 잔차에 대해서 학습 시킨다.
GBM은 CART 기반으로써 분류와 회귀 둘 다 가능하다. 랜덤포레스트에서 사용한 사용자 행동 인식 데이터 세트를 이용해서 실습을 해보았다.
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 = GradientBoostClassifier(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))
#output
GBM 정확도: 0.9389
GBM 수행 시간: 537.7초
기본 파라미터로만 적용했을 때에도 높은 정확도를 가지는 것을 알 수 있다.
하지만 GBM은 수행시간이 오래 걸리고, 파라미터 튜닝을 하는데에 어려움을 겪는다는 단점이 존재한다.
GBM의 하이퍼 파라미터에는 아래와 같은 것들이 있다.
loss | 경사하강법에서 사용하는 비용함수 기본 값 = "deviance" |
learning_rate | 학습률을 의미하면, 약한 학습기가 순차적으로 오류 값을 보정해 나가는 데 적용하는 계수이다. 0 ~ 1 값을 지정할 수 있으며, 기본 값 = 0.1 n_estimators와 상호 보완적으로 적용하는 것이 좋음 |
n_estimators | 학습기의 갯수 기본 값 = 100 |
subsample | 학습기가 학습에 사용하는 데이터 샘플링의 비율 기본 값 = 1, 이는 전체 학습 데이터를 다 사용한다는 의미 과적합이 염려되면, 1보다 작은 값을 사용 |
'Data Analysis > Python' 카테고리의 다른 글
파이썬 래퍼 XGBoost 예제 - 위스콘신 유방암 예측 (0) | 2023.03.05 |
---|---|
XGBoost_하이퍼파라미터 (0) | 2023.02.28 |
분류_앙상블 학습 (0) | 2023.02.01 |
결정 트리 실습 - 사용자 행동 인식 데이터 세트를 활용하여 (0) | 2023.01.31 |
분류_결정트리(DecisonTreeClassifier) (0) | 2023.01.31 |