데이터로그😎

4-3. Boosting (부스팅) 본문

머신러닝/지도 학습

4-3. Boosting (부스팅)

지연v'_'v 2023. 9. 4. 18:15

⭐⭐⭐⭐더 공부해서 수정

 

부스팅(Boosting)

  • 여러 분류기가 순차적으로 학습
  • 앞서 학습한 분류기가 예측이 틀린 데이터가 있다면, 그 데이터에 대해 올바르게 예측할 수 있도록 다음 분류기에 가중치를 부여하며 학습
  • 계속해서 분류기에 가중치를 부스팅하면서 학습 진행
  • 여러개의 약한 학습기(weak learner)를 순차적으로 학습-예측하면서 잘못 예측한 데이터에 가중치를 부여하며 오류를 개선해나가면서 학습하는 방법
  • 가중치 업데이트 시 경사 하강법(Gradient Descent) 사용
  • 최종적으로 결과들을 결합하여 예측
  • GBM(Gradient Boost), XGBoost(eXtra Gradient Boost), Light GBM(Light Gradient Boost)
특징 GBM XGBoost LightGBM
정의 그래디언트 부스팅 머신의 기본 형태로 이전 트리의 오차를 보완하는 새로운 결정 트리를 순차적으로 학습하는 알고리즘입니다. 그래디언트 부스팅을 기반으로 하되 최적화된 트리 분할병렬 처리를 통해 속도와 성능을 향상시킨 알고리즘입니다. 그래디언트 부스팅을 기반으로 하되, 트리 분할을 리프 중심으로 진행하여 대용량 데이터 및 카테고리컬 변수 처리에 특화된 알고리즘입니다.
의미 약한 모델(예: 얕은 결정 트리)을 조합하여 강한 모델을 만들어 예측 오차를 줄입니다. XGBoost는 GBM의 성능을 향상시키기 위해 효율적인 트리 분할과 규제를 적용한 알고리즘으로, 빠른 속도와 높은 성능을 제공합니다. LightGBM은 대용량 데이터 및 고차원 데이터에서 빠른 학습과 예측을 제공하는 효율적인 알고리즘으로, 카테고리컬 변수를 원-핫 인코딩하지 않고 처리할 수 있습니다.
특징 - 결정 트리를 사용하여 모델을 구축
- 과적합을 줄이기 위해 가지치기와 같은 기법을 사용
- 병렬 처리 및 자동적인 블록 압축을 통해 대규모 데이터를 처리할 수 있음
- 고급 규제 기능을 제공합니다.
- 리프 중심 트리 구조로 인해 메모리 사용량이 낮고, 데이터에 대한 빠른 분석을 가능하게 합니다.
- 카테고리컬 변수 지원과 임의적 분할이 가능합니다.
병렬처리 지원 X 지원 O 지원 O

 


1. GBM

가중치 업데이트 시 ‘경사 하강법(Gradient Descent)’ 사용

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

1-1. 파라미터

  • n_estimators: 생성할 결정 트리의 개수
    • default: 100
  • learning_rate:
    • GBM이 학습을 진행할 때마다 적용하는 학습률(0~1사이)
    • default: 0.1 (보통 0.001~0.01: 데이터단순하고 오류빨리잡힐때 0.01)
    • 각 결정 트리의 기여도를 제어하는 값
  • max_depth: 각 결정 트리의 최대 깊이
  • min_samples_split: 노드를 분할하기 위해 필요한 최소 샘플 수
  • min_samples_leaf: 리프 노드가 되기 위해 필요한 최소 샘플 수
  • max_features: 각 노드에서 분할에 사용될 최대 특성 수
  • subsample: 각 결정 트리에서 사용할 샘플의 비율
    • default : 1(전체 학습데이터를 기반으로 학습하겠다.)
  • loss: 경사 하강법에서 사용할 손실 함수
    • default : 'deviance'
  • alpha: L1 정규화 계수
  • beta: L2 정규화 계수

 

1-2. 실습

  • 데이터 로드 & 학습/테스트 데이터 분할
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
import pandas as pd

cancer = load_breast_cancer()

data_df = pd.DataFrame(cancer.data, columns=cancer.feature_names)
data_df['target'] = cancer.target

X_train , X_test , y_train , y_test = train_test_split(
    data_df.drop("target", axis=1),
    data_df['target'],
    random_state=42
)

 

  • 모델 생성 & 학습
from sklearn.ensemble import GradientBoostingClassifier

gb_clf = GradientBoostingClassifier(n_estimators=50)
gb_clf.fit(X_train, y_train)

 

  • 평가
train_score = gb_clf.score(X_train,y_train)
test_score = gb_clf.score(X_test,y_test)


print('훈련 세트 점수: {:.3f}'.format(train_score))
print('테스트 세트 점수: {:.3f}'.format(test_score))

>>>훈련 세트 점수: 1.000
테스트 세트 점수: 0.958
  • 단점: 시간이 오래걸린다.

2. XGB

GBM과 유사한 하이퍼 파라미터를 동일하게 가진다 + 조기중단(early stopping) 등의 하이퍼 파라미터 추가

 

'머신러닝 > 지도 학습' 카테고리의 다른 글

1. 선형 회귀 (Linear Regression)  (0) 2023.09.04
0. 회귀 (Regression)  (0) 2023.09.04
4-2. Bagging (배깅)  (0) 2023.09.04
4-1. Voting  (0) 2023.09.04
4. Ensemble (앙상블)  (0) 2023.09.04