보팅(voting)은 앙상블 학습(ensemble learning) 방법 중 하나입니다.
앙상블 학습은 같은 데이터를 기반으로 학습한 여러 모델을 비교 및 결합하여 개별적인 모델보다 성능이 더 나은 최종 모델을 만드는 것입니다.
보팅은 말 그대로 같은 데이터를 기반으로 개별 모델들의 결과를 투표를 통해 최종 목표 모델을 결정하는 방법입니다.
여기서 투표 방식은 두 가지가 있습니다.
1. 하드 보팅 (hard voting)
하드 보팅은 분류 문제에서 개별 모델들이 가장 많이 분류한 클래스로 최종 결과를 내는 방법입니다.
아래 그림에서 3개의 모델 중 2개의 모델이 0으로 분류했기 때문에 최종 예측은 0입니다.
2. 소프트 보팅 (soft voting)
소프트 보팅은 분류 문제에서 개별 모델들이 예측 확률을 결과로 낸다고 했을 때, 각 모델 예측값의 평균을 최종 결과로 내는 방법입니다.
아래 그림에서 5개의 모델 중 class3에 대한 예측 확률 평균이 가장 높기 때문에 최종 예측은 class3 입니다.
실습은 sklearn LR, SV, NB 각 모델을 VotingClassifier를 이용하여 꽃 데이터를 분류해 보겠습니다.
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn import svm
from sklearn.naive_bayes import GaussianNB
from sklearn.ensemble import VotingClassifier
from sklearn.metrics import accuracy_score
from sklearn.metrics import confusion_matrix
from sklearn.metrics import classification_report
# 데이터 불러오기
raw_iris = datasets.load_iris()
# 피쳐, 타겟 데이터 지정
X = raw_iris.data
y = raw_iris.target
# 트레이닝/테스트 데이터 분할
X_tn, X_te, y_tn, y_te=train_test_split(X,y,random_state=0)
# 데이터 표준화
std_scale = StandardScaler()
std_scale.fit(X_tn)
X_tn_std = std_scale.transform(X_tn)
X_te_std = std_scale.transform(X_te)
# 보팅 학습
clf1 = LogisticRegression(multi_class='multinomial',
random_state=1)
clf2 = svm.SVC(kernel='linear',
random_state=1)
clf3 = GaussianNB()
clf_voting = VotingClassifier(
estimators=[
('lr', clf1),
('svm', clf2),
('gnb', clf3)
],
voting='hard',
weights=[1,1,1])
clf_voting.fit(X_tn_std, y_tn)
# 예측
pred_voting = clf_voting.predict(X_te_std)
print(pred_voting)
# 정확도
accuracy = accuracy_score(y_te, pred_voting)
print(accuracy)
# confusion matrix 확인
conf_matrix = confusion_matrix(y_te, pred_voting)
print(conf_matrix)
# 분류 레포트 확인
class_report = classification_report(y_te, pred_voting)
print(class_report)
'AI > Machine Learning' 카테고리의 다른 글
[Machine Learning] 부스팅 (Boosting) (0) | 2023.05.31 |
---|---|
[Machine Learning] 배깅 (Bootstrap Aggregating, Bagging) (0) | 2023.05.31 |
[Machine Learning] 서포트 벡터 머신 (Support Vector Machine, SVM) (1) | 2023.05.31 |
[Machine Learning] 의사결정나무 (Decision Tree) (0) | 2023.05.25 |
[Machine Learning] 나이브 베이즈 (Naive Bayes) (0) | 2023.05.24 |