부스팅(Boosting)이란 단순하고 약한 학습기(Weak Learner)들를 결합해서 보다 정확하고 강력한 학습기(Strong Learner)를 만드는 방식.
정확도가 낮은 하나의 모델을 만들어 학습 시킨뒤, 그 모델의 예측 오류는 두 번째 모델이 보완한다. 이 두 모델을 합치면 처음보다는 정확한 모델이 만들어 진다. 합쳐진 모델의 예측 오류는 다음 모델에서 보완하여 계속 더하는 과정을 반복한다. 즉 약한 학습기들은 앞 학습기가 만든 오류를 줄이는 방향으로 학습한다







이미지 참조: https://www.youtube.com/watch?v=3CC4N4z3GJc&list=PLblh5JKOoLUICTaGLRoHQDuF_7q2GfuJF&index=49
Decision Tree 의 가지치기 관련 매개변수
learning rate
n_estimators
n_iter_no_change, validation_fraction
보통 max_depth를 낮춰 개별 decision tree의 복잡도를 낮춘다. 보통 5가 넘지 않게 설정한다. 그리고 n_estimators를 가용시간, 메모리 한도에 맞춰 크게 설정하고 적절한 learning_rate을 찾는다.
########### 위스콘신 유방암 데이터 ############## from sklearn.datasets import load_breast_cancer from sklearn.model_selection import train_test_split X, y = load_breast_cancer(return_X_y=True) X_train, X_test, y_train, y_test = train_test_split(X, y, stratify=y, random_state=0)GradientBoostingClassifier 모델 생성, 학습, 평가
from sklearn.ensemble import GradientBoostingClassifier # , GradientBoostingRegressor gbc = GradientBoostingClassifier(random_state=0) gbc.fit(X_train, y_train) pred_train = gbc.predict(X_train) pred_test = gbc.predict(X_test) pred_train_proba = gbc.predict_proba(X_train)[:, 1] pred_test_proba = gbc.predict_proba(X_test)[:, 1]from metrics import print_binary_classification_metrics print_binary_classification_metrics(y_train, pred_train, pred_train_proba, "Train set") print_binary_classification_metrics(y_test, pred_test, pred_test_proba, "Test set")Train set
정확도: 1.0
재현율: 1.0
정밀도: 1.0
F1 점수: 1.0
Average Precision: 1.0
ROC-AUC Score: 1.0
Test set
정확도: 0.958041958041958
재현율: 0.9555555555555556
정밀도: 0.9772727272727273
F1 점수: 0.9662921348314607
Average Precision: 0.9741338688529869
ROC-AUC Score: 0.9776729559748428# Learning Rate 변화에 따른 성능 변화 import time max_depth = 1 n_estimators = 10_000 # lr = 0.0001 # 1e-4 lr = 0.01 # 1e-2 gbc = GradientBoostingClassifier( n_estimators=n_estimators, learning_rate=lr, max_depth=max_depth, random_state=0 ) s = time.time() gbc.fit(X_train, y_train) e = time.time() pred_train = gbc.predict(X_train) pred_test = gbc.predict(X_test)print(f"학습률: {lr}, n_estimators: {n_estimators}, fit 시간: {e-s}초") print_binary_classification_metrics(y_train, pred_train, title="============Train set 평가") print_binary_classification_metrics(y_test, pred_test, title="============Test set 평가")학습률: 0.01, n_estimators: 10000, fit 시간: 15.180491209030151초
============Train set 평가
정확도: 1.0
재현율: 1.0
정밀도: 1.0
F1 점수: 1.0
============Test set 평가
정확도: 0.958041958041958
재현율: 0.9555555555555556
정밀도: 0.9772727272727273
F1 점수: 0.9662921348314607
학습률: 0.0001, n_estimators: 10000, fit 시간: 14.542805671691895초
============Train set 평가
정확도: 0.9413145539906104
재현율: 0.9887640449438202
정밀도: 0.9230769230769231
F1 점수: 0.9547920433996383
============Test set 평가
정확도: 0.916083916083916
재현율: 0.9888888888888889
정밀도: 0.89
F1 점수: 0.9368421052631579
from sklearn.datasets import load_breast_cancer from sklearn.model_selection import train_test_split X, y = load_breast_cancer(return_X_y=True) X_train, X_test, y_train, y_test = train_test_split(X, y, stratify=y, random_state=0)from xgboost import XGBClassifier # , XGBRegressor xgb = XGBClassifier(n_estimators=1000, learning_rate=0.01, max_depth=1, random_state=0) xgb.fit(X_train, y_train)
print_binary_classification_metrics( y_train, xgb.predict(X_train), xgb.predict_proba(X_train)[:, 1], "Trainset" ) print_binary_classification_metrics( y_test, xgb.predict(X_test), xgb.predict_proba(X_test)[:, 1], "Test set" )Trainset
정확도: 0.9929577464788732
재현율: 1.0
정밀도: 0.9888888888888889
F1 점수: 0.994413407821229
Average Precision: 0.9989988706056906
ROC-AUC Score: 0.9985160059359762
Test set
정확도: 0.965034965034965
재현율: 0.9777777777777777
정밀도: 0.967032967032967
F1 점수: 0.9723756906077348
Average Precision: 0.9891074862749493
ROC-AUC Score: 0.9837526205450735