부스팅 알고리즘은 여러 개의 약한 학습기를 순차적으로 학습 - 예측하며 잘못 예측한 데이터에 가중치 부여를 통해 오류를 개선해 나가면서 학습하는 방식이다.
앞장에 배깅 알고리즘의 대표적인 모델로는 랜덤포레스트가 존재하고 부스팅 알고리즘의 대표적인 모델로 그라디언트 부스팅 머신이 존재한다
부스팅의 대표적인 구현으로 AdaBoost 와 그래디언트 부스트가 있다.
Gradient Boost의 변형 모델로는 대표적으로 XGBoost, LightGBM, CatBoost 가 있다!
변형 모델은 다음장에서 다루는 걸로 하고 오늘은 Grandient Boost에 대해서만 다루도록 하겠다.
GBM 은 에이다 부스트와 유사하나, 가중치 업데이트를 경사 하강법을 이용하는 것에 차이가 있다.
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 = 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.4f}'.format(time.time() - start_time))
→ GBM 정확도 : 0.9376
→ GBM 수행시간 : 176.2 초
랜덤 포레스트보다 좋은 성능을 나타냈다.
일반적으로 랜덤포레스트보다예측 성능이 좋으며 그렇지만 수행시간이 오래 걸린다는 단점이 존재
from sklearn.model_selection import GridSearchCV
params = {
'n_estimators':[100,50],
'learning_rate':[0.05,0.1]
}
grid_cv = GridSearchCV(gb_clf, param_grid = params, cv = 2, verbose = 1)
grid_cv.fit(X_train,y_train)
print('최적 하이퍼 파라미터:\n',grid_cv.params)
print('최고 예측 정확도:{0.4f}'.format(grid_cv.best_score_))
→ 최적 하이퍼 파라미터 : {’learning_rate’:0.05,’n_estimators’:500}
→ 최고 예측 정확도 : 0.9010
GBM 은 과적합에도 뛰어난 예측 성능을 가진 알고리즘이며 수행시간이 오래걸린다는 단점이 존재한다. 따라서 GMB의 단점을 보완한 알고리즘들이 새롭게 만들어지고 있다. 그 중 XGBoost와 LightGBM이 가장 많이 사용되고 있는데 이 두개에 대한 정리는 다음 글에 정리해야겠다!
파이썬 머신러닝 완벽 가이드를 참조하여 작성하였습니다.