꾸준히 성장하기

[D+44] 교육 | 머신러닝: 앙상블(Voting, Bagging, Boosting, Stacking) 본문

KT 에이블스쿨 5기/교육

[D+44] 교육 | 머신러닝: 앙상블(Voting, Bagging, Boosting, Stacking)

data.dohii 2024. 4. 4. 20:06

안녕하세요, 앙상블(Ensemble) 기법에 대해서 공부했습니다🔥

'통합은 힘이다'라는 말처럼, 여러 모델을 하나로 결합해 훨씬 강력한 예측력을 발휘하는 기법입니다.

이 기법을 깊이 파고들면서 보팅, 배깅, 부스팅, 그리고 스태킹이라는 네 가지 핵심 전략을 집중적으로 살펴보았습니다.


1. 보팅(Voting): 서로 다른 알고리즘

보팅은 서로 다른 알고리즘 기반의 여러 모델들이 예측한 결과를 통합하는 방법입니다. 
하드 보팅은 가장 많은 모델이 도달한 결론을 최종 예측값으로 채택합니다.
소프트 보팅은 모든 모델의 예측 확률 평균을 내어 가장 높은 확률을 보인 값을 선택합니다. 간단히 말해, 다수결 또는 평균치를 통해 더 정교한 예측을 도모하는 것이죠.

 

2. 배깅(Bagging): 같은 알고리즘

배깅은 동일한 알고리즘의 여러 모델을 병렬로 학습시켜, 그 예측을 집계하는 방법입니다.

랜덤 포레스트(Random Forest)는 배깅의 대표적인 예입니다.

다수의 결정 트리를 조합하므로 과적합을 방지할 수 있습니다.

데이터의 일부를 무작위로 선택해 학습시키므로, 각 모델이 다양한 측면에서 데이터를 학습하게 됩니다.

# 랜덤 포레스트 예제 코드

from sklearn.ensemble import RandomForestRegressor, RandomForestClassifier

from sklearn.metrics import mean_absolute_error, r2_score, confusion_matrix, classification_report

# 회귀 모델

model_reg = RandomForestRegressor(max_depth=5, n_estimators=100, random_state=1)

model_reg.fit(x_train, y_train)

y_pred_reg = model_reg.predict(x_test)

print(mean_absolute_error(y_test, y_pred_reg))

print(r2_score(y_test, y_pred_reg))

# 분류 모델

model_clf = RandomForestClassifier(max_depth=5, n_estimators=100, random_state=1)

model_clf.fit(x_train, y_train)

y_pred_clf = model_clf.predict(x_test)

print(confusion_matrix(y_test, y_pred_clf))

print(classification_report(y_test, y_pred_clf))

 

3. 부스팅(Boosting): 점진적 개선의 힘

부스팅은 이전 모델의 오류를 다음 모델이 보완하도록, 순차적으로 모델을 학습시키는 방식입니다. 

배깅에 비해 성능이 좋지만, 속도가 느리고 과적합 발생 가능성이 있습니다.

XGBoost와 LightGBM은 이 전략을 사용하는 대표적인 알고리즘입니다.

# XGBoost 예제 코드

from xgboost import XGBRegressor, XGBClassifier

from sklearn.metrics import mean_absolute_error, r2_score, confusion_matrix, classification_report

# 회귀 모델

model_xgb_reg = XGBRegressor

model_xgb_reg.fit(x_train, y_train)

y_pred_xgb_reg = model_xgb_reg.predict(x_test)

print(mean_absolute_error(y_test, y_pred_xgb_reg))

print(r2_score(y_test, y_pred_xgb_reg))

# 분류 모델

model_xgb_clf = XGBClassifier(max_depth=5, n_estimators=100, random_state=1)

model_xgb_clf.fit(x_train, y_train)

y_pred_xgb_clf = model_xgb_clf.predict(x_test)

print(confusion_matrix(y_test, y_pred_xgb_clf))

print(classification_report(y_test, y_pred_xgb_clf))

 

4. 스태킹(Stacking)

여러 모델의 예측 값을 최종 모델의 학습 데이터로 사용하여 예측하는 방법입니다.

예를 들어, KNN, Logistic Regression, XGBoost 모델을 사용해 4종류 예측값을 구한 후 이 예측 값을 최종 모델인 Randomforest 학습 데이터로 사용하는 것입니다.

스태킹은 캐글(Kaggle) 같은 미세한 성능 차이로 승부를 결정하는 대회에서 사용됩니다.


앙상블 기법을 깊이 탐구하며, 모델의 성능을 높일 수 있는 방법을 배워보았습니다.

이 경험을 통해 더 깊이 있고 다양한 해결책을 모색할 수 있게 되었습니다.

내일은 앞서 배운 머신러닝을 바탕으로 미니프로젝트를 시작하는데 너무 기대가 됩니다😀

반응형