[회고] 신입 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) 평가했다.
  • 보팅 분류기가 더 우수한 성능을 보임을 알 수 있다.
  • 하지만 단순히 여러 알고리즘을 마구잡이로 결합한다고해서 항상 성능이 향상되는 것은 아님에 유의하자.