◾GBM
GBM(Gradient Boosting Machine)
- 여러 개의 약한 학습기(week learner)를 순차적으로 학습-예측하면서 잘못 예측한 데이터에 가중치를 부여해 오류를 개선하는 방식
- 가중치를 업데이트할 때 경사 하강법(Gradient Descent) 을 이용하는 것이 큰 차이
from sklearn.ensemble import GradientBoostingClassifier
from sklearn.metrics import accuracy_score
import time
import warnings
warnings.filterwarnings('ignore')
- ACC : 93.9%, 계산 시간 : 768 초
- 일반적으로 GBM이 성능자체는 랜덤 포레스트보다 좋다고 알려져있다.
- 하지만 sckit-learn의 GBM은 속도가 느린 것으로 알려져있다.
start_time = time.time()
gb_clf = GradientBoostingClassifier(random_state=13)
gb_clf.fit(X_train, y_train)
gb_pred = gb_clf.predict(X_test)
print('Acc : {}'.format(accuracy_score(y_test, gb_pred)))
print('Fit time : {}'.format(time.time()-start_time))
![](https://velog.velcdn.com/images%2Fskarb4788%2Fpost%2F2bd416b6-ac82-4e58-88c1-605b75e4578e%2Fimage.png)
from sklearn.model_selection import GridSearchCV
params = {
'n_estimators' : [100, 500],
'learning_rate' : [0.05, 0.1]
}
gb_clf = GradientBoostingClassifier(random_state=13)
grid = GridSearchCV(gb_clf, param_grid = params, cv=2, verbose=1, n_jobs = -1)
grid.fit(X_train, y_train)
grid.best_score_
![](https://velog.velcdn.com/images%2Fskarb4788%2Fpost%2Fe3ca27d1-8643-40f3-978e-ebc7c8e4b764%2Fimage.png)
grid.best_params_
![](https://velog.velcdn.com/images%2Fskarb4788%2Fpost%2F981a73fb-711b-4d80-9b55-1b9ab05f39a1%2Fimage.png)
accuracy_score(y_test, grid.best_estimator_.predict(X_test))
![](https://velog.velcdn.com/images%2Fskarb4788%2Fpost%2F90be2557-f469-4e82-bde6-52c3b652c502%2Fimage.png)
◾XGBoost
XGBoost(eXtreme Gradient Boosting)
- 트리 기반의 앙상블 학습에서 가장 각광받는 알고리즘 중 하나
- GBM 기반의 알고리즘으로 GBM의 느린 속도를 다양한 규제를 통해 해결
- 병렬 학습이 가능하도록 설계됨
- XGBoost는 반복 수행시마다 내부적으로 학습 데이터와 검증 데이터 교차검증 수행
- 교차검증을 통해 최적화되면 반복을 중단하는 조기 중단 기능을 가지고 있다.
- pip(conda) install xgboost를 통해 설치
- 주요 파라미터
nthread
: CPU의 실행 스레드 개수 조정. 기본값은 CPU의 전체 스레드 사용
eta
: GBM 학습률
num_boost_rounds
: n_estimators와 같은 파라미터
max_depth
from xgboost import XGBClassifier
start_time = time.time()
xgb = XGBClassifier(n_estimators=400, learning_rate = 0.1, max_depth=3)
xgb.fit(X_train.values, y_train)
xgb_pred = xgb.predict(X_test.values)
print('Acc : {}'.format(accuracy_score(y_test, xgb_pred)))
print('Fit tiem : {}'.format(time.time()-start_time))
![](https://velog.velcdn.com/images%2Fskarb4788%2Fpost%2F6781d995-3d5f-4322-89b9-d614ce8a20e1%2Fimage.png)
from xgboost import XGBClassifier
evals = [(X_test.values, y_test)]
start_time = time.time()
xgb = XGBClassifier(n_estimators=400, learning_rate = 0.1, max_depth=3)
xgb.fit(X_train.values, y_train, early_stopping_rounds=10, eval_set=evals)
xgb_pred = xgb.predict(X_test.values)
print('Acc : {}'.format(accuracy_score(y_test, xgb_pred)))
print('Fit tiem : {}'.format(time.time()-start_time))
![](https://velog.velcdn.com/images%2Fskarb4788%2Fpost%2Fc3bc946a-bd59-4b89-8392-219882a22a7b%2Fimage.png)
◾LGBM
LGBM(Light Gradient Boosting Machine)
- XGBoost와 함께 부스팅 계열에서 가장 각광받는 알고리즘
- LGBM의 가장 큰 장점은 속도
- 단, 적은 수의 데이터에는 어울리지 않는다.(일반적으로 10000건 이상의 데이터가 필요하다고 한다.)
- GPU 버전도 존재한다.
- pip(brew, conda) install lightgbm
from lightgbm import LGBMClassifier
evals = [(X_test.values, y_test)]
start_time = time.time()
lgbm = LGBMClassifier(n_estimators=400)
lgbm.fit(X_train.values, y_train, early_stopping_rounds=100, eval_set=evals)
lgbm_pred = lgbm.predict(X_test.values)
print('Acc : {}'.format(accuracy_score(y_test, lgbm_pred)))
print('Fit tiem : {}'.format(time.time()-start_time))
![](https://velog.velcdn.com/images%2Fskarb4788%2Fpost%2Fc9782bbe-a893-4ebc-806f-8dcccd78144e%2Fimage.png)