(1) AdaBoost
(2) GBM
📝 경사 하강법(Gradient Descent)
오류식을 최소화하는 방향성을 가지고 반복적으로 가중치 값을 업데이트한다.
즉, 반복 수행을 통해 오류를 최소화할 수 있도록 가중치의 업데이트 값을 도출하는 기법
오류식:
실제 결괏값
피처
피처에 기반한 예측 함수
GradientBoostingClassifier
: GBM 기반의 분류를 지원
n_estimators
: weak learner의 개수 (default=100)
subsample
: weak learner가 학습에 사용하는 데이터의 샘플링 비율
max_depth
: 트리의 최대 깊이, 과적합 제어
loss
: 경사하강법에서 사용할 비용 함수를 지정
learning_rate
: GBM이 학습을 진행할 때마다 적용하는 학습률
# 기본 모델 from sklearn.ensemble import GradientBoostingClassifier import warnings warnings.filterwarnings('ignore') X_train, X_test, y_train, y_test = get_human_dataset() 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))
- 일반적으로 GBM이 랜덤 포레스트보다 예측 성능이 조금 뛰어난 경우가 많다.
- 하지만 약한 학습기의 순차적인 예측 오류 보정을 통해 학습을 수행하므로 멀티 CPU 코어 시스템을 사용하더라도 병렬 처리가 지원되지 않아서 대용량 데이터의 경우 학습에 많은 시간이 필요하다는 단점이 있다.
# 최종 모델 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_)) # 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))
[참고]
https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.GradientBoostingClassifier.html