데이터로그😎
4-3. Boosting (부스팅) 본문
⭐⭐⭐⭐더 공부해서 수정
부스팅(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 |