머신 러닝 - 부스팅(Boosting)

이상해씨·2021년 12월 5일
0

머신 러닝

목록 보기
18/27
  • HAR 데이터를 이용해 각 부스팅 기법 실행

◾GBM

  • GBM(Gradient Boosting Machine)
    • 여러 개의 약한 학습기(week learner)를 순차적으로 학습-예측하면서 잘못 예측한 데이터에 가중치를 부여해 오류를 개선하는 방식
    • 가중치를 업데이트할 때 경사 하강법(Gradient Descent) 을 이용하는 것이 큰 차이
# 필요 모듈 import
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은 속도가 느린 것으로 알려져있다.
# GradientBoost
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))

# GridSearch를 이용한 파라미터 조정
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)
# best 스코어
grid.best_score_

# best 파라미터
grid.best_params_

# Test 데이터 성능 확인
accuracy_score(y_test, grid.best_estimator_.predict(X_test))

◾XGBoost

  • XGBoost(eXtreme Gradient Boosting)
    • 트리 기반의 앙상블 학습에서 가장 각광받는 알고리즘 중 하나
    • GBM 기반의 알고리즘으로 GBM의 느린 속도를 다양한 규제를 통해 해결
    • 병렬 학습이 가능하도록 설계됨
    • XGBoost는 반복 수행시마다 내부적으로 학습 데이터와 검증 데이터 교차검증 수행
    • 교차검증을 통해 최적화되면 반복을 중단하는 조기 중단 기능을 가지고 있다.
    • pip(conda) install xgboost를 통해 설치
  • 주요 파라미터
    • nthread : CPU의 실행 스레드 개수 조정. 기본값은 CPU의 전체 스레드 사용
    • eta : GBM 학습률
    • num_boost_rounds : n_estimators와 같은 파라미터
    • max_depth
# XGBoost
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))

# 조기 종료 조건과 검증 데이터 지정
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))

◾LGBM

  • LGBM(Light Gradient Boosting Machine)
    • XGBoost와 함께 부스팅 계열에서 가장 각광받는 알고리즘
    • LGBM의 가장 큰 장점은 속도
    • 단, 적은 수의 데이터에는 어울리지 않는다.(일반적으로 10000건 이상의 데이터가 필요하다고 한다.)
    • GPU 버전도 존재한다.
    • pip(brew, conda) install lightgbm
# Light Gradient Boosting Machine)
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))

profile
후라이드 치킨

0개의 댓글