[회고] 신입 iOS 개발자가 되기까지 feat. 카카오 자세히보기

🛠 기타/Data & AI

[scikit-learn 라이브러리] VotingClassifier (보팅 분류기)

inu 2020. 8. 12. 20:34
반응형

보팅의 유형

  • 하드 보팅 : 최종 아웃풋 결과 중 각 모델들이 가장많이 선택한 아웃풋을 최종 아웃풋으로 설정한다.
  • 소프트 보팅 : 최종 아웃풋 결과의 확률값을 기반으로 평균을 내어, 이중 가장 확률값이 높은 아웃풋을 최종 아웃풋으로 설정한다.

보팅 분류기 모듈 사용예제

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

cancer = load_breast_cancer()

data_df = pd.DataFrame(cancer.data, columns = cancer.feature_names)

# 데이터를 훈련셋과 테스트셋으로 나누기
X_train, X_test, y_train, y_test = train_test_split(cancer.data,cancer.target,test_size=0.2,random_state=156)
  • 유방암 데이터셋을 불러와 훈련셋과 테스트셋으로 나누었다.
from sklearn.ensemble import VotingClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.neighbors import KNeighborsClassifier

# 보팅모델에 넣기 위한 개별 모델은 로지스틱 회귀와 KNN
logistic_regression = LogisticRegression()
knn = KNeighborsClassifier(n_neighbors=8)

voting_model = VotingClassifier(estimators=[ ('LogisticRegression', logistic_regression),
                                            ('KNN', knn) ], voting='soft')
  • 사이킷런에서 선형회귀모델과 KNN모델을 불러오고, Voting분류기 모델에 포함시켰다.
  • 보팅방식은 소프트보팅으로 선택했다.
classifiers = [logistic_regression, knn]
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)))

voting_model.fit(X_train, y_train)
pred = voting_model.predict(X_test)
print('보팅 분류기의 정확도: {0: .4f}'.format(accuracy_score(y_test, pred)))
==결과==
ogisticRegression 정확도: 0.9386
KNeighborsClassifier 정확도: 0.9386
보팅 분류기의 정확도:  0.9474
  • 두 모델과 보팅 분류기 모델을 학습시키고(fit) 평가했다.
  • 보팅 분류기가 더 우수한 성능을 보임을 알 수 있다.
  • 하지만 단순히 여러 알고리즘을 마구잡이로 결합한다고해서 항상 성능이 향상되는 것은 아님에 유의하자.
반응형