728x90
반응형
# 보팅 : 서로 다른 알고리즘을 가진 분류기를 결합하는 것
- 하드 보팅(Hard Voting)
: 예측한 결괏값들중 다수의 분류기가 결정한 예측값을 최종 보팅 결괏값으로 선정 (다수결)
- 소프트 보팅(Soft Voting) =>일반적으로 소프트 보팅이 예측 성능이 좋아서 더 많이 사용
:분류기들의 레이블 값 결정 확률을 모두 더하고 이를 평균해서 이들 중 가장 높은 레이블 값을 최종 결괏값으로 선정
# 보팅 분류기(Voting Classifier)
-로지스틱 회귀, KNN을 이용하여 소프트 보팅 분류기 생성
import pandas as pd
from sklearn.ensemble import VotingClassifier # 보팅 앙상블 클래스
from sklearn.linear_model import LogisticRegression #선형 회귀
from sklearn.neighbors import KNeighborsClassifier # KNN
from sklearn.datasets import load_breast_cancer # 유방암 데이터 세트
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
cancer = load_breast_cancer() # 유방암 데이터 세트 로딩
data_df = pd.DataFrame(cancer.data, columns=cancer.feature_names)
data_df.head(3)
- VotingClassifier: 보팅 분류기 생성 클래스
- estimators: 리스트 값으로 보팅에 사용될 여러 개의 classifier객체들을 튜플형식으로 입력
- Voting: hard :하드보팅/ soft: 소프트보팅
# 개별 모델은 로지스틱 회귀와 KNN 임.
lr_clf = LogisticRegression() #로지스틱 회귀
knn_clf = KNeighborsClassifier(n_neighbors=8) # KNN
# 개별 모델을 소프트 보팅 기반의 앙상블 모델로 구현한 분류기
vo_clf = VotingClassifier( estimators=[('LR',lr_clf),('KNN',knn_clf)] , voting='soft' )
X_train, X_test, y_train, y_test = train_test_split(cancer.data, cancer.target,
test_size=0.2 , random_state= 156)
# VotingClassifier 학습/예측/평가.
vo_clf.fit(X_train , y_train)
pred = vo_clf.predict(X_test)
print('Voting 분류기 정확도: {0:.4f}'.format(accuracy_score(y_test , pred)))
# 개별 모델의 학습/예측/평가.
classifiers = [lr_clf, knn_clf]
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 분류기 정확도: 0.9474
LogisticRegression 정확도: 0.9386
KNeighborsClassifier 정확도: 0.9386
결론 : voting 분류기가 개별 분류기(로지스틱,KNN) 보다 정확도가 높음.
BUT 보팅으로 여러 개의 기반 분류기를 결합한다고 해서 무조건 기반 분류기 보다 에측 성능이 향상되지는 않는다.
728x90
반응형
'pythonML' 카테고리의 다른 글
[pythonML] 부스팅(Boosting)- XGBoost(eXtra Gradient Boost) (0) | 2022.04.04 |
---|---|
[pythonML] 부스팅(Boosting) - GBM /AdaBoost (0) | 2022.04.01 |
[pythonML] 결정 트리 (Decision Tree) (0) | 2022.03.20 |
[pythonML] 머신러닝으로 타이타닉 생존자 예측 (0) | 2022.03.19 |
[pythonML] feature scaling(피처 스케일링) -표준화(StandardScaler)/ 정규화 (MinMaxScaler)/RobustScaler/ MinMaxScaler (0) | 2022.03.05 |