이전 글에서 보팅, 배깅 알고리즘에 대해 다루었다면, 이번 글에서는 부스팅 알고리즘을 정리한다. 앙상블 방법의 부스팅 알고리즘의 대표적인 예가 바로 GBM이다!
부스팅 알고리즘은 여러 개의 약한 학습기 (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) 을 이용하는 것이 큰 차이이다.
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 수행 시간 측정을 위해 시작 시간 설정
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)
loss
learing_rate
n_estimators
subsample
그 외에도 max_depth, max_features 등의 파라미터가 있음
앙상블 방법의 부스팅 알고리즘 중 GBM이 있다. GBM은 경사 하강법을 이용하여 가중치를 업데이트한다. 사이킷런 GradientBoostingClassifer로 구현이 가능하다. 수행 시간이 오래 걸리지만, 높은 예측 성능과 과적합 방지에 대한 기대를 할 수 있다. 이를 기반으로 하는 대표적인 알고리즘으로는 XGBoost, LightGBM가 있다. 다음 글에서 이어서 정리한다.