본문 바로가기
공부/인공지능

Machine Learning - 투표기반 분류 모델 (Voting Classifiers) - Ensemble 앙상블

by 혼밥맨 2022. 5. 22.
반응형

Machine Learning - 투표기반 분류 모델 (Voting Classifiers) - Ensemble 앙상블

 

투류 분류기 (Voting Classifier)란

투표 분류기는 다양한 기본 모델 또는 추정기를 훈련시키고 각 기본 추정기의 결과를 집계하는 것을 기반으로 예측하는 기계 학습 추정기입니다. 집계 기준은 각 추정기 출력에 대한 투표의 결합된 결정이 될 수 있습니다.

분류 모델의 두 가지 유형 (직접 투표, 간접 투표)

분류 문제에는 두 가지 유형의 투표가 있습니다. 직접 투표 (Hard Voting)와 간접 투표 (Soft Voting)가 있습니다. 직접 투표 (Hard Voting)는 가장 높은 투표 수로 예측을 선택하는 것을 수반하는 반면 간접 투표 (Soft Voting)는 각 모형의 각 예측의 확률을 결합하여 가장 높은 총 확률을 갖는 예측을 선택하는 것을 수반합니다.

 

직접 투표 (Hard Voting)

직접 투표 (Hard voting)에 의한 분류는 Winner Take All (승자 독식) 시스템과 같습니다. 분류기에 의해 생성된 여러 출력 중 대다수는 모델의 최종 결과로 선택됩니다.

 

간접 투표 (Soft Voting)

대조적으로, 간접 투표 (Soft voting)는 모든 분류모델의 결과를 고려하는 투표 과정입니다. 간접 투표 (Soft voting)는 클래스 레이블에 대한 예측 확률을 합하고 합 확률이 가장 큰 최종 분류를 반환합니다.

 

 

Tutorial

1
2
3
4
5
6
7
8
from sklearn.model_selection import train_test_split
from sklearn.datasets import make_moons
import matplotlibe.pyplot as plt
 
 
moons = make_moons(n_samples=5000, noise=0.1)
X, y = moons[0], moons[1]
plt.scatter(X[:, 0], X[:, 1], color=yellow)
cs

sci-kit learn의 "moons" 데이터를 불러서 투표 기반 분류기를 테스트 해봅시다. 실제로 투표 기반 분류기의 성능이 나은지, 어떠한 첨가가 없는 raw 모델의 성능이 좋은지.

 

SVM, 랜덤 포레스트, KNN 분류기의 분류 정확도 확인

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
from sklearn.model_selection import train_test_split
 
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
 
 
from sklearn.svm import SVC
from sklearn.ensemble import RandomForestClassifier
from sklearn.neighbors import KNeighborsClassifier
 
svm_clf = SVC(kernel="rbf", probability=True)
svm_clf.fit(X_train, y_train)
 
rnd_clf = RandomForestClassifier(n_estimator=100, n_jobs=-1)
rnd_clf.fit(X_train, y_train)
 
knn_clf = KNeighborsClassifier()
knn_clf.fit(X_train, y_train)
 
print(svm_clf.score(X_test, y_test))
print(rnd_clf.score(X_test, y_test))
print(knn_clf.score(X_test, y_test))
cs

SVM 정확도: 0.909

랜덤 포레스트 정확도: 0.906

KNN 정확도: 0.901

 

 

직접 투표 분류기의 정확도 확인

1
2
3
4
5
6
7
8
9
10
11
12
13
from sklearn.ensemble import VotingClassifier
 
# SVM, RF, KNN을 기반으로 "직접 (hard) 투표" 분류기 생성
voting_clf = VotingClassifier([
    ("svm_clf", svm_clf),
    ("rnd_clf", rnd_clf),
    ("knn_clf", knn_clf)
], voting="hard")
 
# 직접 투표 분류기 학습
voting_clf.fit(X_train, y_train)
 
voting_clf.score(X_test, y_test)
cs

SVM, RF, KNN을 기반 직접 투표 분류기의 정확도: 0.908

간접 투표 분류기의 정확도 확인

1
2
3
4
5
6
7
8
9
10
11
12
13
from sklearn.ensemble import VotingClassifier
 
# SVM, RF, KNN을 기반으로 "간접 (soft) 투표" 분류기 생성
voting_clf = VotingClassifier([
    ("svm_clf", svm_clf),
    ("rnd_clf", rnd_clf),
    ("knn_clf", knn_clf)
], voting="soft")
 
# 직접 투표 분류기 학습
voting_clf.fit(X_train, y_train)
 
voting_clf.score(X_test, y_test)
cs

SVM, RF, KNN을 기반 간접 투표 분류기의 정확도: 0.909

반응형

댓글