pythonML

[pythonML] 부스팅(Boosting) - GBM /AdaBoost

독립성이 강한 ISFP 2022. 4. 1. 17:25
728x90
반응형

# 부스팅(Boosting) 

: 여러 개의 약한 학습기를 순차적으로 학습,예측 하면서 잘못 예측한 데이터에 가중치 부여를 통해 오류를 개선해 나가면서 학습하는 방식.

즉, 약한 알고리즘 => 강한 알고리즘

 

 

# 부스팅의 대표적인 구현 2가지

1. 에이다 부스트 AdaBoost (Adaptive Boosting) : 오류 데이터에 가중치를 부여하면서 부스팅을 수행하는 알고리즘. 

 

에이다 부스트 AdaBoost (Adaptive Boosting)

잘못 분류된 오류데이터에 가중치를 계속하여 부여함 => 부여한 가중치들을 결합하여 예측을 수행

 

 

 

2. 그래디언트 부스트 (GBM-Gradiant Boost Machine)가중치 업데이트를 경사 하강법(Gradiant)을 이용함

 

- 경사하강법 : 반복 수행을 통해 오류를 최소화할 수 있도록 가중치의 업데이트 값을 도출하는 기법

 

분류 실제 결괏값: y 

피처:  x1,x2...xn 

피처에 기반한 예측 함수: F(x) 라고 한다면

 

h(x) = y - F(x) (오류값=실제값-예측값) 을 최소화하는 방향성을 가지고 반복적으로 가중치를 업데이트함.

 

 

2.1  학습/테스트 데이터로 분리하고 랜덤 포레스트로 학습/예측/평가

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))

최고 예측 정확도 : 0.9376

 

2.2  GridSearchCV 로 교차검증 및 하이퍼 파라미터 튜닝

from sklearn.model_selection import GridSearchCV

params = {
    'n_estimators':[100, 500],
    '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.best_params_)
print('최고 예측 정확도: {0:.4f}'.format(grid_cv.best_score_))

최고 예측 정확도 : 0.9010

 

2.3  튜닝된 하이퍼 파라미터로 재 학습 및 예측/평가

# GridSearchCV를 이용하여 최적으로 학습된 estimator로 predict 수행. 
gb_pred = grid_cv.best_estimator_.predict(X_test)
gb_accuracy = accuracy_score(y_test, gb_pred)
print('GBM 정확도: {0:.4f}'.format(gb_accuracy))

최고 예측 정확도 : 0.9410

 

 

 

GBM은 과적합에도 강한 뛰어난 예측 성능을 가짐. 

그러나 수행 시간이 너무 오래 걸린다는 단점이 있다

이를 개선한 XGBoost 와 LightGBM 이 있다.

728x90
반응형