scikit-learn - 8(앙상블 학습)

안동균·2024년 11월 8일

앙상블 학습이란?

여러 개의 분류기(알고리즘)을 생성하여 각각 예측값을 결합하여 최종적으로 도출

대표 알고리즘

  • 랜덤 포레스트
  • GBM(Gradiant Boosting Model)

종류

  • 보팅 : 서로 다른 알고리즘을 가진 분류기를 결합하여 예측
  • 배깅 : 서로 같은 알고리즘을 사용하여 결합 후 예측
  • 부스팅 : 여러개의 분류기가 순차적으로 학습하되 예측이 틀린 데이터 는 다음 분류기에 가중치를 부여하면서 학습과 예측을 진행

보팅과 배깅의 차이?

  • 보팅 : 데이터 샘플 중복 x
  • 배깅 : 데이터 샘플 중복 o

부트스트래핑(BootStrapping)

배깅에서 쓰이며 데이터를 샘플링하여 같은 알고리즘을 가진 분류기에 제공


하드 보팅

Hard Voting은 다수의 Classifier 간 다수결로 최종 결정


소프트 보팅

Soft Voting은 다수의 classifier들의 class 확률을 평균내 결정

일반적으로는 하드보다 소프트가 더 좋음

예제

데이터 로드

import pandas as pd

from sklearn.ensemble import VotingClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.neighbors import KNeighborsClassifier
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 소프트 보팅방식 분류기 제작

# 개별 모델은 로지스틱 회귀와 KNN 임. 
lr_clf = LogisticRegression(solver='liblinear')
knn_clf = KNeighborsClassifier(n_neighbors=8)

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

X_train, X_test, y_train, y_test = train_test_split(cancer.data, cancer.target, 
                                                    test_size=0.2 , random_state= 156)

# VotingClassifier 학습/예측/평가. 
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)
    class_name= classifier.__class__.__name__
    print('{0} 정확도: {1:.4f}'.format(class_name, accuracy_score(y_test , pred)))

여러개의 알고리즘을 결합한다고 해서 점수가 좋아지지는 않음

0개의 댓글