728x90
반응형
# 부스팅(Boosting)
: 여러 개의 약한 학습기를 순차적으로 학습,예측 하면서 잘못 예측한 데이터에 가중치 부여를 통해 오류를 개선해 나가면서 학습하는 방식.
즉, 약한 알고리즘 => 강한 알고리즘
# 부스팅의 대표적인 구현 2가지
1. 에이다 부스트 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
반응형
'pythonML' 카테고리의 다른 글
[pythonML] 회귀 - 단순 선형 회귀 (0) | 2022.04.17 |
---|---|
[pythonML] 부스팅(Boosting)- XGBoost(eXtra Gradient Boost) (0) | 2022.04.04 |
[pythonML] 보팅(Voting)-soft voting/hard voting (0) | 2022.03.29 |
[pythonML] 결정 트리 (Decision Tree) (0) | 2022.03.20 |
[pythonML] 머신러닝으로 타이타닉 생존자 예측 (0) | 2022.03.19 |