본문 바로가기
AI & 머신러닝 coding skill

머신러닝 Decision tree - 앙상블(Ensemble) 기법 - Voting

by 호빵님 2022. 5. 24.
반응형

앙상블(Ensemble) 기법 - Voting

이번 실습에서는 다양한 앙상블 기법 중
Voting을 사용한 분류기(VotingClassifier)를 구현하는 방법을 알아보도록 하겠습니다.

Voting

Voting은 의미 그대로 투표를 통해 값을 결정하는 것입니다. Voting의 종류에는 Hard voting과 Soft voting이 있습니다.

  • Hard Voting : 다수의 분류기가 예측한 값을 최종 값으로 선택
  • Soft Voting : 각 레이블 별로 예측 확률을 낸 후 평균을 내어 최종 값으로 선택

일반적으로 Soft voting이 성능이 더 좋아 더 많이 사용됩니다.


VotingClassifier를 위한 사이킷런 함수/라이브러리

  • from sklearn.ensemble import VotingClassifier : 사이킷런에 구현되어 있는 VotingClassifier를 불러옵니다.
  • VotingClassifier(estimators, voting)
    • estimators : 앙상블 학습을 진행할 다양한 분류 모델을 설정합니다.
    • voting : voting 방식을 선택합니다.
  • [Model].fit(X, y): (X, y) 데이터셋에 대해서 모델을 학습시킵니다.
  • [Model].predict(X): X 데이터를 바탕으로 예측되는 값을 출력합니다.

 

 

import pandas as pd

import warnings
warnings.filterwarnings(action='ignore')

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

# 유방암 데이터를 불러오고,학습용 데이터와 테스트용 데이터로 분리하여 반환하는 함수입니다.
def load_data():
    
    X, y = load_breast_cancer(return_X_y = True)
    
    train_X, test_X, train_y ,test_y = train_test_split(X, y, test_size = 0.2, random_state = 156)
    
    return train_X, test_X, train_y ,test_y
"""
1. 다양한 모델을 사용하는 VotingClassifier를 정의하여
   학습시키고, 예측을 수행한 결과를 반환하는 함수를 구현합니다.
   
   Step01. Voting과 비교할 각각 다른 분류 모델을 불러옵니다.
            
           불러올 분류 모델은 
           LogisticRegression, 
           KNeighborsClassifier 입니다.
        
   Step02. Voting에 사용할 분류 모델을 설정하여 
           VotingClassifier를 정의합니다.
           
           LogisticRegressor와 KNeighborClassifier를 사용합니다.
           Voting 방식은 Soft Voting을 사용합니다.
   
   Step03. Voting Classifier를
           학습용 데이터에 맞춰 학습을 시킵니다.
   
   Step04. 테스트 데이터에 대한 예측을 수행합니다.
"""
def Voting_Clf(train_X, test_X, train_y ,test_y):
    
    lr_clf = LogisticRegression()
    knn_clf = KNeighborsClassifier()
    
    vo_clf = VotingClassifier(estimators = [('LR',lr_clf),('KNN',knn_clf)], voting='soft')
    
    vo_clf.fit(train_X, train_y)
    
    pred = vo_clf.predict(test_X)
    
    return lr_clf, knn_clf, vo_clf, pred
    
# 데이터를 불러오고, 모델 학습 및 예측을 진행하기 위한 함수입니다.
def main():
    
    train_X, test_X, train_y ,test_y = load_data()
    
    lr_clf, knn_clf,vo_clf, pred = Voting_Clf(train_X, test_X, train_y ,test_y)
    
    print('> Voting Classifier 정확도 : {0:.4f}\n'.format(accuracy_score(test_y, pred)))
    
    # 다른 분류기를 각각 학습했을 때 결과 예측
    classifiers = [lr_clf, knn_clf]
    for classifier in classifiers:
        classifier.fit(train_X, train_y)
        pred = classifier.predict(test_X)
        class_name = classifier.__class__.__name__
        print("> {0} 정확도 : {1:.4f}".format(class_name, accuracy_score(test_y, pred)))

if __name__ =="__main__":
    main()

 

 

 

*본 포스팅은 DX기업교육 플랫폼인 Elice academy의 머신러닝 심화 과정에서 실습한 코드를 이용해서 작성되었습니다.

https://elice.io/

 
 
 

올인원 디지털 교육 플랫폼 - 엘리스

우리 모두를 위한 교실, 엘리스와 함께 더 나은 기회를 만들어보세요

elice.io

 

 

반응형