데이터로그😎

4-1. Voting 본문

머신러닝/지도 학습

4-1. Voting

지연v'_'v 2023. 9. 4. 14:49

앙상블의 한 종류인 보팅에 대해 글을 쓸 것. 앙상블의 종류에 대해서는 이전에 발행한 글을 참고.

2023.09.04 - [머신러닝/지도 학습_분류] - 4. Ensemble (앙상블)

 

4. Ensemble (앙상블)

여러개 분류기(Classifier)를 생성하고 그 예측을 결합함으로써 보다 정확한 최종 예측을 도출하는 기법 Ensemble의 목표: 다양한 분류기의 예측결과를 결합함으로써 단일 분류기보다 신뢰성이 높은

fine-1004.tistory.com

 

보팅(Voting)

  • 서로 다른 알고리즘을 가진 분류기 결합(Linear, KNN,SVM…)
  • 하나의 dataset
  • 하드보팅(다수결), 소프트 보팅(확률의 평균)
    • 하드보팅: 다수결. 다수의 분류기가 결정한 예측값을 최종 보팅 결과값으로 선정
    • 소프트보팅: 분류기들이 레이블 값 결정 확률을 모두 더해서 평균한 뒤, 이들 중 확률이 가장 높은 레이블 값을 최종 보팅 결과값으로 선정

 

파라미터

  • estimators:
    • 앙상블에 사용할 개별 모델들을 리스트의 형태로 입력
    • 튜플형태로 입력: (모델이름, 모델 객체)
      •  [('LR',lr_clf),('KNN',knn_clf)]
  • voting:
    • hard
    • soft

 

데이터 불러오기

from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
import pandas as pd

# 데이터 불러오기
cancer = load_breast_cancer()

data_df = pd.DataFrame(cancer.data, columns=cancer.feature_names)
data_df['target'] = cancer.target

# train, test 데이터 쪼개기
X_train , X_test , y_train , y_test = train_test_split(
            data_df.drop("target", axis=1),
            data_df['target'],
            random_state=42
        )

 

voting classifier 학습

voting은 여러개의 분류기를 결합하므로, 여러개 알고리즘 import

from sklearn.ensemble import VotingClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.neighbors import KNeighborsClassifier

lr_clf = LogisticRegression()
knn_clf = KNeighborsClassifier(n_neighbors=3, n_jobs =1)

estimators = [('LR',lr_clf),('KNN',knn_clf)]

vo_clf = VotingClassifier(
        estimators = estimators,
        voting='soft')
        
vo_clf.fit(X_train, y_train

 

voting model의 성능 평가

from sklearn.metrics import accuracy_score

pred = vo_clf.predict(X_test)
print('VotingClassifier의 정확도: {:.4f}'.format(accuracy_score(y_test, pred)))

>>>VotingClassifier의 정확도: 0.9650

개별 모델(LR, KNN) 성능평가

for es in vo_clf.estimators_:
    pred = es.predict(X_test)
    class_name = es.__class__.__name__
    print(f'{class_name} 정확도: {accuracy_score(y_test, pred)}')


>>>LogisticRegression 정확도: 0.972027972027972
KNeighborsClassifier 정확도: 0.9300699300699301
  • Voting 분류기(0.965)가 다른 각각의 분류기(0.97, 0.93)보다 무조건 성능이 좋은 것은 아님.
  • 그러나 전반적으로 다른 머신러닝 알고리즘에 비해 뛰어난 예측성능.
  • 앙상블에서는 과적합이 되기 쉽다는 결정트리의 단점을 극복하기 위해 수많은 분류기를 결합해서 다양한 상황에 학습하게 함.
  • 즉, 결정 트리 알고리즘의 장점은 그대로 취하고 단점은 보완함으로써 편향-분산 트레이드 오프의 효과 극대화

'머신러닝 > 지도 학습' 카테고리의 다른 글

4-3. Boosting (부스팅)  (0) 2023.09.04
4-2. Bagging (배깅)  (0) 2023.09.04
4. Ensemble (앙상블)  (0) 2023.09.04
3. Logistic Regression  (0) 2023.09.04
2. Decision Tree  (1) 2023.09.04