앙상블이란? (Ensemble)

  • 여러 개의 기본 모델을 활용하여 하나의 최적의 모델로 일반화하는 방법

앙상블 기법 종류

보팅(Voting)

  • 여러 모델들(다른 유형의 알고리즘)의 예측 결과를 투표를 통해 최종 예측 결과를 결정하는 방법

보팅의 유형

하드 보팅소프트 보팅
다수결 원칙으로, 예측한 결과값들 중 다수의 분류기가 결정한 예측값을 최종 보팅 결과값으로 선정하는 것분류기들의 레이블 값 결정 확률의 평균값들 중 확률이 가장 높은 레이블 값을 최종 보팅 결과 값으로 선정하는 것

배깅(Bagging)

  • 같은 유형의 알고리즘 모델들의 예측 결과를 집계해 최종 결과를 얻는 방법
    데이터로부터 부트스트랩한 데이터로 모델 학습
  • 데이터 분할 시 중복 허용
범주형 데이터연속형 데이터
투표 방식으로 결과 집계평균으로 결과 집계

💡대표 알고리즘 : Random Forest

보팅과 배깅 비교

보팅배깅
각각 다른 알고리즘을 이용한 분류기를 결합하는 것같은 알고리즘을 이용한 분류기가 데이터 샘플링을 각자 다르게 가져가며 학습을 수행하여 보팅을 수행하는 것

랜덤 포레스트(Random Forest)

  • 배깅의 가장 대표적인 알고리즘
  • 여러 결정트리 모델이 전체 데이터에서 배깅 방식으로 각자의 데이터를 샘플링하여 모델들이 개별적으로 학습을 수행한 뒤 모든 결과를 집계하여 최종 결과 결정

💡 Forest의 의미
나무가 모여 숲을 이루듯 Decision Tree가 여러 개 모여 Forest가 됨

다양한 의미의 Random

랜덤하게 데이터 샘플링개별 모델이 트리를 구성할 때 분할 기준이 되는 Feature를 랜덤하게 선정

무작위로 뽑은 n개의 Feature들 중에서 가장 정보이득이 큰 Feature를 기준으로 트리 분할 → 개별 모델마다 다른 구조의 트리를 구성할 것임

주요 하이퍼파라미터

부스팅 (Boosting)

  • 오류된 데이터에 대해 가중치를 부여하여 다음 모델이 학습과 예측을 진행하는 방법
  • 예측성능이 뛰어나 앙상블 학습을 주도함
  • But, 속도가 느리고 과적합 발생 가능

💡대표 알고리즘 : XGBoost, LightGBM

부스팅 기법

AdaBoostGradient Boosting
- 오류 데이터에 가중치를 부여하면서 부스팅 수행- 경사하강법으로 가중치 업데이트
- 이전 합성 분류기의 데이터 별 오류를 예측하는 새로운 약한 분류기를 학습

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

Gradient Boost

원리정리

XRBoost(eXtreme Gredient Boosting)

  • 부스팅을 구현한 대표적인 알고리즘 GBM(Gradient Boost Machine)을 병렬 학습이 가능하도록 구현한 것
  • 회귀, 분류 모두 지원하며, 성능과 자원 효율이 좋음
  • 장점 : 높은 예측 성능, 빠른수행시간, 규제, 가지치기, 내장된 교차 검증, 결측치 자체 처리

주요 하이퍼파라미터

LightGBM

  • XGBoost와 다르게 leaf-wise loss 사용
  • 과적합에 민감하며, 다량의 학습데이터를 필요로 함
# lightgbm 설치
#!pip install lightgbm
#불러오기
from lightgbm import LGBMClassifier

# 선언하기
model = LGBMClassifier(max_depth=5, random_state=1, verbose=-1)
# 학습하기
model.fit(x_train, y_train)
# 예측하기
y_pred = model.predict(x_test)
# 평가하기
print(confusion_matrix(y_test, y_pred))
print(classification_report(y_test, y_pred))

스태킹 (Stacking)

  • 여러 모델의 예측 값을 최종 모델의 학습 데이터로 사용하여 예측하는 방법
    	ex) KNN, Logistic Regression, XGBoost 모델로 4종류 예측값을 구하고
    	이 예측값을 최종 모델인 Randomforest 학습 데이터로 사용하는 것
  • 기본 모델로 4개 이상 선택해야 좋은 결과를 기대할 수 있음

모델 구현

회귀 모델구현

Random Forest

• 알고리즘 함수: sklearn.ensemble.RandomForestRegressor
• 성능평가 함수: sklearn.metrics.mean_absolute_error, sklearn.metrics.r2_score

# 불러오기
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import mean_absolute_error, r2_score

# 선언하기
model = RandomForestRegressor(max_depth=5, n_estimators=100, random_state=1)

# 학습하기
model.fit(x_train, y_train)

# 예측하기
y_pred = model.predict(x_test)

# 평가하기
print(mean_absolute_error(y_test, y_pred))
print(r2_score(y_test, y_pred))

XGBoost

• 알고리즘 함수: xgboost.XGBRegressor
• 성능평가 함수: sklearn.metrics.mean_absolute_error, sklearn.metrics.r2_score

# xgboost 설치
#!pip install xgboost

# 불러오기
from xgboost import XGBRegressor
from sklearn.metrics import mean_absolute_error, r2_score

# 선언하기
model = XGBRegressor(max_depth=5, n_estimators=100, random_state=1)
.
.
.

분류 모델 구현

Random Forest

• 알고리즘 함수: sklearn.ensemble.RandomForestClassifier
• 성능평가 함수: sklearn.metrics.confusion_matrix, sklearn.metrics.classification_report

XGBoost

• 알고리즘 함수: xgboost.XGBRegressor
• 성능평가 함수: sklearn.metrics.mean_absolute_error, sklearn.metrics.r2_score

.
.
#평가하기
print(confusion_matrix(y_test, y_pred))
print(classification_report(y_test, y_pred))

# Feature 중요도 확인
model.feature_importances_

# 시각화
plt.barh(list(x), model.feature_importances_)
plt.show()
profile
난 성미다.

0개의 댓글