부스팅(Boosting)
- 약한 학습기부터 순차적으로 학습하며, 이전에 잘못 예측된 데이터에 가중치를 부여하며 오차를 보완해 나가는 방식이다
- 장점:
- 성능이 매우 우수하다 (LGBM, XGBoost)
- 단점:
- 계속 약점(오분류/잔차)를 보완하려고 하기 때문에 잘못된 레이블링, 아웃라이어에 민감하다.
- 다른 앙상블 대비 학습 시간이 오래걸린다
- 대표적인 부스팅 앙상블
- AdaBoost
- GradientBoost
- LightGBM (LGBM)
- XGBoost
1. GradientBoost
- 주요 특징
- 성능이 우수하다
- 학습 시간이 과하게 많이 느리다
- 주요 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)
- 주요 특징
- 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
- 주요 특징
- 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)