[파머완] ch4.3 앙상블 학습

­반소희·2022년 6월 28일
1

ch4.3 Ensemble Learning (앙상블 학습)

  • Ensemble Learning (앙상블 학습)

앙상블 학습을 통한 분류는 여러 개의 분류기를 생성하고 그 예측을 결합함으로써 보다 정확한 예측을 도출하는 방법을 말한다. 대부분의 정형 데이터 분류 시에는 앙상블이 뛰어난 성능을 나타내며, 성능이 좋다고 알려진 최신 앙상블 모델로는 XGboost, LightGBM이 있다.

  • 앙상블 학습의 유형

    • 보팅 (Voting)
      보팅과 배깅 모두 여러 개의 분류기가 '투표'를 통해 최종 예측 결과를 결정하는 방식이다. 이때, 보팅은 일반적으로 서로 '다른' 알고리즘을 가진 분류기를 결합하는 것.

    • 배깅 (Bagging)
      배깅도 '투표'를 통해 최종 예측 결과를 결정하는 방식이지만, 보팅과는 다르게 일반적으로 '같은' 알고리즘을 가진 분류기를 결합하는 것이다. 단, 데이터 샘플링은 서로 다르게 가져가며 (부스스트래핑 Bootstrapping 분할 방식, 데이터 중첩 허용) 학습을 수행한다. 대표적인 배깅 방식으로는 '랜덤 포레스트 알고리즘'이 있다.

    • 부스팅 (Boosting)
      부스팅은 여러 개의 분류기가 '순차적으로 학습'을 수행하되, 앞에서 학습한 분류기가 예측이 틀린 데이터에 대해서는 올바르게 예측할 수 있도록 다음 분류기에게는 가중치를 부여하면서 학습과 예측을 수행하는 방식이다. 예측 성능이 뛰어나며, 대표적인 부스팅 모델로는 XGboost, LightGBM이 있다.

ch4.3 보팅 (Voting)

보팅 방법에는 하드 보팅소프트 보팅이 있다. 일반적으로 하드 보팅에 비해 소프트 보팅의 예측 성능이 좋다.

  • 하드 보팅 (Hard Voting)

    • 다수결의 원칙과 비슷, 다수의 분류기가 결정한 예측값을 최종 보팅 결과로 선정한다.
  • 소프트 보팅 (Soft Voting)

    • 분류기들의 클래스 결정 확률을 모두 더하고 이를 평균한다. 이들 중 확률이 가장 높은 클래스 값을 최종 보팅 결과로 선정한다.

ch4.3 보팅 분류기 (VotingClassifier)

사이킷런은 보팅 방식의 앙상블을 구현한 VotingClassifier 클래스를 제공한다. 로지스틱 회귀와 KNN 알고리즘을 보팅으로 사용될 여러 개의 Classifier로 지정한 예제는 아래와 같다.

  • 데이터 로드
import pandas as pd

from sklearn.ensemble import VotingClassifier
from sklearn.linear_model import LogisticRegression ## 로지스틱 회귀
from sklearn.neighbors import KNeighborsClassifier  ## KNN
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

## 데이터 로드
cancer = load_breast_cancer()
data_df = pd.DataFrame(cancer.data, columns=cancer.feature_names)
data_df.head(3)
  • 로지스틱 회귀와 KNN을 기반으로 하여 소프트 보팅 수행

    • estimators는 리스트 값으로 보팅에 사용될 여러 개의 분류기 객체들을 튜플 형식으로 입력받음
    • voting은 하드 보팅과 소프트 보팅을 지정하는 생성 인자로, 'hard', 'soft'를 입력받음
## 학습 및 검증 데이터 준비
X_train, X_test, y_train, y_test = train_test_split(cancer.data, cancer.target, test_size=0.2 , random_state= 156)

## 개별 모델 = '로지스틱 회귀' and 'KNN'
lr_clf = LogisticRegression()
knn_clf = KNeighborsClassifier(n_neighbors=8)

## 개별 모델을 소프트 보팅 기반의 앙상블 모델로 구현한 분류기 
vo_clf = VotingClassifier(estimators=[('LR', lr_clf),('KNN', knn_clf)] , voting='soft') ## soft = 소프트 보팅

## 앙상블 모델의 학습 / 예측 / 평가
vo_clf.fit(X_train , y_train)
pred = vo_clf.predict(X_test)
print('Voting 분류기 정확도: {0:.4f}'.format(accuracy_score(y_test, pred)))

## 개별 모델의 학습 / 예측 / 평가
classifiers = [lr_clf, knn_clf]
for classifier in classifiers:
    classifier.fit(X_train, y_train)
    pred = classifier.predict(X_test)
    classifier_name = classifier.__class__.__name__
    print('{0} 정확도: {1:.4f}'.format(classifier_name, accuracy_score(y_test, pred)))

요약

앙상블 학습을 통한 분류는 개별 분류기에 비해 높은 성능을 낼 수 있다.

앙상블 학습의 유형에는 보팅(다른 알고리즘의 투표), 배깅(부스스트래핑, 같은 알고리즘 투표), 부스팅(순차적 다른 알고리즘) 등이 있으며, 배깅의 예로는 랜덤 포레스트, 부스팅의 예로는 XGboost, LightGBM이 있다.

보팅 방식에는 하드 보팅(다수결), 소프트 보팅(예측 확률 더한 후 평균)이 있다.

사이킷런의 VotingClassifier 클래스를 이용하여 구현이 가능하다.

References

파이썬 머신러닝 완벽 가이드 교재

profile
행복한 소히의 이것저것

0개의 댓글

관련 채용 정보