Boosting
- 부트스트랩 샘플(무작위 표본 추출 시행)을 추출하는 과정에서 각 자료에 동일한 확률을 부여하는 것이 아니라 분류가 잘못된 데이터에 더 큰 가중을 주어 표본을 추출한다.
- 약 분류기를 순차적으로 학습하는 앙상블 기법
- 예측을 반복하면서 잘못 예측한 데이터에 가중치를 부여하여 오류를 개선
> Bagging : 무작위 복원 추출로 부트스랩 샘플을 추출함
> Boosting : 부트스트랩 샘플을 추출하는 과정에서 각 자료의 동일한 확률을 부여하는 것이 아니라 분류가 잘못된 데이터에 더 큰 가중을 두어 표본을 추출함
Boosting의 종류
- AdaBoost
- Gradient Boost
- XG Boost
[1] AdaBoost ( Adaptive Boosting )
- 간단한 약 분류기들이 상호보완하도록 순차적으로 학습
- 잘못 분류된 데이터를 통해 가중치를 부여하고 이를 학습에 이용함
- 과소적합된 학습 데이터의 가중치를 높이면서 새로 학습된 모델이 학습하기 어려운 데이터에 더 잘 적합되도록 하는 방식 ( 데이터가 추출되는 가중치를 게속해서 수정하는 부스팅 )
- 약 분류기 : 변수 하나와 if문 하나 정도의 깊이의 트리구조를 사용함
if condition == A:
case = 'Case A'
else:
case = 'Case B'
AdaBoost 학습 방법
- 전체 학습 데이터를 이용해 모델을 생성
- 잘못 예측된 데이터의 가중치를 상대적으로 높여 줌
- 가중치를 반영하여 다음 모델을 학습
- 2~3과정을 반복
AdaBoost 예시
- D1이라는 분류조건 (D1 분류기) 으로 데이터를 분류함
- D1에서 잘못 분류된 데이터에 대해 가중치를 부여함 ( 동그라미 표시 부분 )
- 가중치가 반영된 상태로 D2 분류기로 다시 분류를 수행함
- D2에서 잘못 분류된 가중치에 대해 가중치를 초기화함 ( 증가 or 감소 )
- 이를 반복 후, 각 모델의 신뢰도를 곱하여 Voting
AdaBoost 예측 방법 : 각 모델의 신뢰도를 곱하여 Voting
AdaBoost 예시 코드
ada_param_grid = {
'n_estimators': [50, 100, 150],
'learning_rate': [0.01, 0.1, 1]
}
ada_grid = GridSearchCV(AdaBoostClassifier(), ada_param_grid, refit=True, verbose=2)
ada_grid.fit(X_train, y_train)
best_ada = ada_grid.best_estimator_
y_pred_ada = best_ada.predict(X_eval)
ada_accuracy = accuracy_score(y_eval, y_pred_ada)
ada_f1 = f1_score(y_eval, y_pred_ada, average='weighted')
ada_cm = confusion_matrix(y_eval, y_pred_ada)
results['AdaBoost'] = {
'accuracy': ada_accuracy,
'f1_score': ada_f1,
'classification_report': classification_report(y_eval, y_pred_ada, output_dict=True),
'confusion_matrix': ada_cm
}
Hyper-Parameter
N-estimators | 부스팅 모델에서 생성할 트리의 수를 지정 ( 약한 학습기의 갯수 ) |
Max_depth | 트리의 최대 깊이 설정, 값이 클수록 과적합 위험이 증가함 |
Gradiant Boost
- 학습 전 단계 모델에서의 잔여 오차에 대해 새로운 모델을 학습
- 잔여 오차를 예측하여 발전하는 약 분류기
- 현재까지 학습된 분류기의 약점을 Gradient를 통해 알려주고 이를 중점으로 보완하는 방법
Gradiant Boost 학습 방법
- 모델을 학습 한 후 예측값을 계산한다.
- 잔여 오차를 계산한다.
- 잔여 오차를 예측하는 트리 모델을 생성한다.
- Learning Rate를 이용해 기존 예측값을 수정한다.
- 2~4를 반복한다
Gradiant Boost 예시
Gradiant Boost 예측 방법 : 각 단계에서 잔여 오차를 점점 줄여나가는 방식으로 예측 모델을 개선해나가는 방식
Hyper-Parameter
N-estimators | 부스팅 모델에서 생성할 트리의 수를 지정 ( 약한 학습기의 갯수 ) |
Max_depth | 트리의 최대 깊이 설정, 값이 클수록 과적합 위험이 증가함 |
sub-sample | 트리를 학습할 때, 사용할 데이터 샘플의 비율을 선택 ( 무작위 선택 ) |
ColsampleByTree | 트리를 학습할 떄, 사용할 특징(컬럼)의 비율을 설정 |
XGBoost ( eXtreme Gradient Boosting )
- Gradient Boosting 기반의 모델이다.
- 트리를 만들 때, 병렬 처리를 가능하게 해서 Gradient Boosting의 속도를 개선
XGBoost의 특징
- 병렬 / 분산 처리 가능
- CPU 병렬 처리가 가능, 코어 들이 각자 할당 받은 변수들로 제각기 가지 치기를 수행할 수 있음
- Split 지점을 고려할 때 일부를 보고 결정
- 연속형 변수들의 split 지점을 고려할 때, 일부분만 보고 고려함 ( 의사결정트리는 전체 고려해야 )
- Sparsity Awareness
- zero 데이터를 건너 뛰면서 학습, 범주형 변수를 dummy화 시킬 경우 학습 속도가 빨라짐
Boosting 심화 모델
- 1. LightGBM : GBM 기반 모델, 약 분류기 학습이 수직적으로 확장하는 leaf-wise 알고리즘 사
- 2. CatBoost : 범주형 변수 처리에 특
XGBoost | - 그리디 알고리즘으로 자동 가지치기가 가능, 과대 적합 방지 |
LGBM | - XGBoost에 비해 학습 속도도 빠르고 메모리 사용량이 적음 - 적은 데이터 ( 1만건 이하 ) 에서는 과대 적합 발생 가능 |
CatBoost | - 범주형 데이터가 많을 때 , 따로 전처리를 하지 않아도 좋은 성능을 발휘함 |
Stacking
- Meta Modeling
- 다른 모델들의 단점을 극복하고 장점은 취할 수 있는 조합을 찾는 방법
Stacking 방법
1. 학습 데이터를 이용해 Sub Model을 생성함
( 자주 사용하는 Sub-Model : SVM, Knn, Random Forest )
2. Sub Model들의 예측값을 데이터로 Meta Model을 생성함
→ 주로 Regression 모델을 학슴
Stacking Regression
- Sub Model들의 학습 데이터에 대한 예측값으로 선형 회귀를 학습한다.
- 예측에 사용할 경우, Sub Model들의 예측을 먼저 진행 후 그 값을 Meta Model로 예측한다.
Stacking Classification
- 분류의 경우 Sub Model의 예측값은 2가지로 Class 또는 확률
- 확률 값을 이용해 Logistic Regression을 학습함
Stacking Multi-Classification
- Multi-Class의 경우 확률 값이 여러개로 표시됨 ( 예측값이 shape이 클래스 수가 된다.
- K개의 Sub-Model이 있을 경우의 Shape
- 이 값을 다음과 같이 Reshape함
[ Reshape된 데이터로 Logistic Regression을 학습함 ]
반응형
'Lab & Research > Artificial intelligence' 카테고리의 다른 글
TabNet (0) | 2024.08.04 |
---|---|
머신러닝 알고리즘 - KNN & SVM (0) | 2024.06.21 |
머신러닝 알고리즘 - Naive Bayes (0) | 2023.12.29 |
머신러닝 알고리즘 - Logistic Regression (0) | 2023.12.18 |
머신러닝 알고리즘 - Linear Regression (0) | 2023.12.17 |