데이터 분석/Python

[Sklearn] 앙상블 (Ensemble) - 부스팅 (Boosting)

eunki 2021. 5. 17. 17:12
728x90

부스팅 (Boosting)

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

 

 

장점

- 성능이 매우 우수하다. (Lgbm, XGBoost)

단점

- 부스팅 알고리즘의 특성상 계속 약점(오분류/잔차)을 보완하려고 하기 때문에 잘못된 레이블링이나 아웃라이어에 필요 이상으로 민감할 수 있다.

- 다른 앙상블 대비 학습 시간이 오래걸린다.

 

 

대표적인 Boosting 앙상블

- AdaBoost

- GradientBoost

- LightGBM (LGBM)

- XGBoost

 

 

 


GradientBoost

성능이 우수하지만 학습시간이 너무 느리다.

from sklearn.ensemble import GradientBoostingRegressor, GradientBoostingClassifier

gbr = GradientBoostingRegressor(random_state=42)
gbr.fit(x_train, y_train)
gbr_pred = gbr.predict(x_test)

 

 

 

주요 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)

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)

 

 

 

 


XGBoost

eXtreme Gradient Boosting

scikit-learn 패키지가 아니다.

성능이 우수하지만 학습시간이 매우 느리다.

GBM보다는 빠르고 성능도 향상되었다.

from xgboost import XGBRegressor, XGBClassifier

xgb = XGBRegressor(random_state=42)
xgb.fit(x_train, y_train)
xgb_pred = xgb.predict(x_test)

 

 

 

 

주요 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)

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)

 

 

 

 


LightGBM

scikit-learn 패키지가 아니다.

성능이 우수하고 속도도 매우 빠르다.

from lightgbm import LGBMRegressor, LGBMClassifier

lgbm = LGBMRegressor(random_state=42)
lgbm.fit(x_train, y_train)
lgbm_pred = lgbm.predict(x_test)

 

 

 

주요 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)

lgbm = LGBMRegressor(random_state=42, learning_rate=0.01, n_estimators=2000, colsample_bytree=0.8, subsample=0.8, max_depth=7)
lgbm.fit(x_train, y_train)
lgbm_pred = lgbm.predict(x_test)

 

728x90