[pythonML] 부스팅(Boosting) - GBM /AdaBoost

2022. 4. 1. 17:25·pythonML
728x90
반응형

# 부스팅(Boosting) 

: 여러 개의 약한 학습기를 순차적으로 학습,예측 하면서 잘못 예측한 데이터에 가중치 부여를 통해 오류를 개선해 나가면서 학습하는 방식.

즉, 약한 알고리즘 => 강한 알고리즘

 

 

# 부스팅의 대표적인 구현 2가지

1. 에이다 부스트 AdaBoost (Adaptive Boosting) : 오류 데이터에 가중치를 부여하면서 부스팅을 수행하는 알고리즘. 

 

에이다 부스트 AdaBoost (Adaptive Boosting)

잘못 분류된 오류데이터에 가중치를 계속하여 부여함 => 부여한 가중치들을 결합하여 예측을 수행

 

 

 

2. 그래디언트 부스트 (GBM-Gradiant Boost Machine) :  가중치 업데이트를 경사 하강법(Gradiant)을 이용함

 

- 경사하강법 : 반복 수행을 통해 오류를 최소화할 수 있도록 가중치의 업데이트 값을 도출하는 기법

 

분류 실제 결괏값: y 

피처:  x1,x2...xn 

피처에 기반한 예측 함수: F(x) 라고 한다면

 

h(x) = y - F(x) (오류값=실제값-예측값) 을 최소화하는 방향성을 가지고 반복적으로 가중치를 업데이트함.

 

 

2.1  학습/테스트 데이터로 분리하고 랜덤 포레스트로 학습/예측/평가

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

최고 예측 정확도 : 0.9376

 

2.2  GridSearchCV 로 교차검증 및 하이퍼 파라미터 튜닝

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_))

최고 예측 정확도 : 0.9010

 

2.3  튜닝된 하이퍼 파라미터로 재 학습 및 예측/평가

# 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))

최고 예측 정확도 : 0.9410

 

 

 

GBM은 과적합에도 강한 뛰어난 예측 성능을 가짐. 

그러나 수행 시간이 너무 오래 걸린다는 단점이 있다

이를 개선한 XGBoost 와 LightGBM 이 있다.

728x90
반응형

'pythonML' 카테고리의 다른 글

[pythonML] 회귀 - 단순 선형 회귀  (0) 2022.04.17
[pythonML] 부스팅(Boosting)- XGBoost(eXtra Gradient Boost)  (0) 2022.04.04
[pythonML] 보팅(Voting)-soft voting/hard voting  (0) 2022.03.29
[pythonML] 결정 트리 (Decision Tree)  (0) 2022.03.20
[pythonML] 머신러닝으로 타이타닉 생존자 예측  (0) 2022.03.19
'pythonML' 카테고리의 다른 글
  • [pythonML] 회귀 - 단순 선형 회귀
  • [pythonML] 부스팅(Boosting)- XGBoost(eXtra Gradient Boost)
  • [pythonML] 보팅(Voting)-soft voting/hard voting
  • [pythonML] 결정 트리 (Decision Tree)
ISFP의 블로그
ISFP의 블로그
이건 첫 번째 레슨, 업무에서 마주친 문제 해결 경험 공유하기 이건 두 번째 레슨, 개인적으로 공부한 데이터/AI 지식을 기록하기 이건 세 번째 레슨, 다른 사람과 비교하지 말고 오직 어제의 나와 비교하기
  • ISFP의 블로그
    resultofeffort
    ISFP의 블로그
  • 전체
    오늘
    어제
    • 분류 전체보기 (117)
      • python (25)
      • pythonML (27)
      • Linux (0)
      • 오류Error (8)
      • information (7)
      • Deep learning (5)
      • pytorch (29)
      • 코딩테스트 (4)
      • 밑바닥 DL (4)
      • 논문 리뷰 (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Pandas
    Ai
    토큰화
    오블완
    티스토리챌린지
    deeplearning
    딥러닝
    머신러닝
    nlp
    텍스트전처리
    인공지능
    데이터분석
    cnn
    pytorch
    Deep Learning
    Python
    분류
    konlpy
    자연어처리
    machinelearning
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
ISFP의 블로그
[pythonML] 부스팅(Boosting) - GBM /AdaBoost
상단으로

티스토리툴바