[머신러닝] 분류, GBM

김민주·2024년 4월 11일

참고 코드

GBM rody

부스팅 알고리즘은 여러 개의 약한 학습기를 순차적으로 학습-예측하며 잘못 예측한 데이터에 가중치 부여를 통해 오류 개선해 나가며 학습

adaBoost는 오류 데이터에 가중치를 부여하면서 부스팅을 수행하는 대표적인 알고리즘

D1, D2, D3 따로 가중치를 부여해서 결합하여 예측
GBM은 adaBoost와 유사하나, 가중치 업데이트를 경사 하강법을 이용하는 것이 큰 차이

💡경사하강법
오류식을 최소화 하는 방향성을 가지고 반복적으로 가중치 값을 업데이트 하는것

GBM 알고리즘은 CART기반
분류, 회귀 가능

GeadientBoostingClassifier 클래스로 GBM 분류

from sklearn.ensemble import GradientBoostingClassifier
import time
import warnings
warnings.filterwarnings('ignore')

X_train, X_test, y_train, y_test = get_human_dataset()

# GBM 수행 시간 측정을 위함. 시작 시간 설정.
start_time = time.time()

gb_clf = GradientBoostingClassifier(random_state=0)
gb_clf.fit(X_train , y_train)
gb_pred = gb_clf.predict(X_test)
gb_accuracy = accuracy_score(y_test, gb_pred)

print('GBM 정확도: {0:.4f}'.format(gb_accuracy))
print("GBM 수행 시간: {0:.1f} 초 ".format(time.time() - start_time))

GBM 정확도: 0.9382
GBM 수행 시간: 368.5 초

from sklearn.model_selection import GridSearchCV

params = {
    'n_estimators':[100, 500],
    'learning_rate' : [ 0.05, 0.1]
}
grid_cv = GridSearchCV(gb_clf , param_grid=params , cv=2 ,verbose=1)
grid_cv.fit(X_train , y_train)
print('최적 하이퍼 파라미터:\n', grid_cv.best_params_)
print('최고 예측 정확도: {0:.4f}'.format(grid_cv.best_score_))

GBM 하이퍼 파라미터 및 튜닝

loss 경사 하강법에서 사용할 비용 함수 지정
learing_rate 학습률
n_estimators weak learner의 개수, 개수 많을 수록 오래 학습
subsample weak learner가 학습에 사용하는 데이터의 샘플링 비율. 기본값은 1 = 전체 학습 데이터를 기반으로 학습 한다

from sklearn.model_selection import GridSearchCV

params = {
    'n_estimators':[100, 500],
    'learning_rate' : [ 0.05, 0.1]
}
grid_cv = GridSearchCV(gb_clf , param_grid=params , cv=2 ,verbose=1)
grid_cv.fit(X_train , y_train)
print('최적 하이퍼 파라미터:\n', grid_cv.best_params_)
print('최고 예측 정확도: {0:.4f}'.format(grid_cv.best_score_))

n_estimators 100, 500
learing_rate 0.05, 0.1

# GridSearchCV를 이용하여 최적으로 학습된 estimator로 predict 수행. 
gb_pred = grid_cv.best_estimator_.predict(X_test)
gb_accuracy = accuracy_score(y_test, gb_pred)
print('GBM 정확도: {0:.4f}'.format(gb_accuracy))

GBM 정확도: 0.9396

GBM 총평

과적합에도 강한 뛰어난 예측 성능 알고리즘
오래 걸린다..ㅠ

GBM 기반 알고리즘 많이 나오고 있다
XGBoost, LightGBM
다음에~

profile
mingdue02

0개의 댓글