<앙상블> 부스팅(Boosting)
Data Analyticsㅤ/ㅤMachine Learningㅤ

<앙상블> 부스팅(Boosting)

부스팅(Boosting)

- 약한 학습기부터 순차적으로 학습하며, 이전에 잘못 예측된 데이터에 가중치를 부여하며 오차를 보완해 나가는 방식이다

- 장점:

  • 성능이 매우 우수하다 (LGBM, XGBoost)

- 단점:

  • 계속 약점(오분류/잔차)를 보완하려고 하기 때문에 잘못된 레이블링, 아웃라이어에 민감하다.
  • 다른 앙상블 대비 학습 시간이 오래걸린다

- 대표적인 부스팅 앙상블

  • AdaBoost
  • GradientBoost
  • LightGBM (LGBM)
  • XGBoost

 

1. GradientBoost

공식 document

- 주요 특징

  • 성능이 우수하다
  • 학습 시간이 과하게 많이 느리다

- 주요 Hyperparameter

  • random_state: 랜덤 시드 고정 값. 고정해두고 튜닝할 것!
  • n_jobs: CPU 사용 갯수
  • learning_rate: 학습율. 너무 큰 학습율은 성능을 떨어뜨리고, 너무 작은 학습율은 학습이 느리다. 적절한 값을 찾아야함. n_estimators와 같이 튜닝. (default=0.1)
  • n_estimators: 부스팅 스테이지 수. 랜덤포레스트 트리의 갯수 설정과 비슷한 개념이다 (default=100)
  • subsample: 샘플 사용 비율 (max_features와 비슷한 개념). 과대적합 방지용
  • min_samples_split: 노드 분할시 최소 샘플의 갯수. (default=2) 과대적합 방지용
from sklearn.ensemble import GradientBoostingRegressor, GradientBoostingClassifier

gbr = GradientBoostingRegressor(random_state=42, learning_rate=0.01, n_estimators=1000, subsample=0.8)
gbr.fit(x_train, y_train)
gbr_pred = gbr.predict(x_test)
mse_eval('GradientBoost Ensemble (lr=0.01, est=1000, subsample=0.8)', gbr_pred, y_test)

 

 

2. XGBoost (eXtreme Gradient Boosting)

공식 document

- 주요 특징

  • scikit-learn 패키지가 아니다
  • 성능이 우수하다
  • GBM보다는 빠르고 성능도 향상되었다
  • 학습시간이 매우 느리다

- 주요 Hyperparameter

  • random_state: 랜덤 시드 고정 값. 고정해두고 튜닝할 것!
  • n_jobs: CPU 사용 갯수
  • learning_rate: 학습율. 너무 큰 학습율은 성능을 떨어뜨리고, 너무 작은 학습율은 학습이 느리다. 적절한 값을 찾아야함. n_estimators와 같이 튜닝. default=0.1
  • n_estimators: 부스팅 스테이지 수. (랜덤포레스트 트리의 갯수 설정과 비슷한 개념). default=100
  • max_depth: 트리의 깊이. 과대적합 방지용. default=3.
  • subsample: 샘플 사용 비율. 과대적합 방지용. default=1.0
  • max_features: 최대로 사용할 feature의 비율. 과대적합 방지용. default=1.0
from xgboost import XGBRegressor, XGBClassifier

xgb = XGBRegressor(random_state=42, learning_rate=0.01, n_estimators=1000, subsample=0.8, max_features=0.8, max_depth=7)
xgb.fit(x_train, y_train)
xgb_pred = xgb.predict(x_test)
mse_eval('XGBoost w/ Tuning', xgb_pred, y_test)

 

3. LightGBM

 공식 document

- 주요 특징

  • scikit-learn 패키지가 아니다
  • 성능이 우수하다
  • 속도도 매우 빠르다

- 주요 Hyperparameter

  • random_state: 랜덤 시드 고정 값. 고정해두고 튜닝할 것!
  • n_jobs: CPU 사용 갯수
  • learning_rate: 학습율. 너무 큰 학습율은 성능을 떨어뜨리고, 너무 작은 학습율은 학습이 느리다. 적절한 값을 찾아야함. n_estimators와 같이 튜닝. default=0.1
  • n_estimators: 부스팅 스테이지 수. (랜덤포레스트 트리의 갯수 설정과 비슷한 개념). default=100
  • max_depth: 트리의 깊이. 과대적합 방지용. default=3.
  • colsample_bytree: 샘플 사용 비율 (max_features와 비슷한 개념). 과대적합 방지용. default=1.0
from lightgbm import LGBMRegressor, LGBMClassifier

lgbm = LGBMRegressor(random_state=42, learning_rate=0.01, n_estimators=2000, colsample_bytree=0.9, subsample=0.9, max_depth=7)
lgbm.fit(x_train, y_train)
lgbm_pred = lgbm.predict(x_test)
mse_eval('LGBM w/ Tuning', lgbm_pred, y_test)