Data scientist/Machine Learning

[ML/DL] 앙상블 학습 (Ensemble Learning): 2. Voting(보팅)이란?

나아무늘보 2020. 11. 5. 03:08
반응형

voting 이란?

 

다른 알고리즘이 낸 결과물에 대하여 투표를 통해 결정하는 방식이다.

 

voting과 Bagging은 투표방식이라는 공통점을 가지지만 차이점이 있다.

- voting은 다른 알고리즘 model을 조합해서 사용한다.

- bagging은 동일 알고리즘을 다른 sample 조합을 사용한다.

 

 

 

보팅의 유형

 

Hard voting - 각자의 분류를 했을 때 가장 투표를 많이 받은걸 선택한다.

 

Soft voting - 분류에 따라서 1,2가 있었을때 각각의 확률을 구하고 이것을 더해서 평균을 낸다. 그때 가장 높았던 것을 사용한다.

 

성능 측면에서는 소프트 보팅이 상대적으로 우수하다.

 

 

 

Voting 구현 

 

from sklearn.tree import DecisionTreeClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.ensemble import RandomForestClassifier
from sklearn.preprocessing import LabelEncoder , OneHotEncoder , StandardScaler , MinMaxScaler , Binarizer
from sklearn.model_selection import train_test_split , GridSearchCV
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score , roc_auc_score
from sklearn.metrics import confusion_matrix, precision_recall_curve , roc_curve
import pandas as pd
import numpy  as np
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
import warnings
warnings.filterwarnings('ignore')
from sklearn.neighbors import KNeighborsClassifier
from sklearn.ensemble import VotingClassifier
from sklearn.datasets import load_breast_cancer

 

cancer = load_breast_cancer()

cancer.keys()

 

 

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

cancer_df.head()

 

 

# 소프트 보팅

 

# 앙상블을 구현하는 보팅 분류기 - votingClassifier

dtc = DecisionTreeClassifier()
lr = LogisticRegression()
rfc = RandomForestClassifier()
knn = KNeighborsClassifier()

 

# 앙상블 모델을 구현하기 위해서는 구현을 위한 분류기(votingClassifier)

voting_model = VotingClassifier([('dtc',dtc),('lr',lr),('knn',knn)],voting='soft')

 

#데이터 세트를 분리

X_train , X_test, y_train, y_test = train_test_split(cancer.data,cancer.target, test_size=.2,random_state =156)

 

# 보팅 분류기를 이용해서 학습/예측/평가

voting_model.fit(X_train, y_train)
y_pred = voting_model.predict(X_test)
print('VOTING ACCURACY:', accuracy_score(y_test,y_pred))

 

# 개별 학습기에 대한 학습/예측/평가

classifier = [dtc,lr,knn]

for c in classifier:
    c.fit(X_train,y_train)
    pred=c.predict(X_test)
    print(c.__class__.__name__, accuracy_score(y_test,pred))

 

 

 

# 하드 보팅

 

# 앙상블을 구현하는 보팅 분류기 - votingClassifier

dtc = DecisionTreeClassifier()
lr = LogisticRegression()
rfc = RandomForestClassifier()
knn = KNeighborsClassifier()

 

# 앙상블 모델을 구현하기 위해서는 구현을 위한 분류기(votingClassifier)

voting_model = VotingClassifier([('dtc',dtc),('lr',lr),('knn',knn)],voting='hard')

 

#데이터 세트를 분리

X_train , X_test, y_train, y_test = train_test_split(cancer.data,cancer.target, test_size=.2,random_state =156)

 

# 보팅 분류기를 이용해서 학습/예측/평가

voting_model.fit(X_train, y_train)
y_pred = voting_model.predict(X_test)
print('VOTING ACCURACY:', accuracy_score(y_test,y_pred))

 

# 개별 학습기에 대한 학습/예측/평가

classifier = [dtc,lr,knn]

for c in classifier:
    c.fit(X_train,y_train)
    pred=c.predict(X_test)
    print(c.__class__.__name__, accuracy_score(y_test,pred))

 

 

 


 

 

-참조 : injo.tistory.com/22

 

[Chapter 4. 분류] 앙상블 학습

4-2. 앙상블 학습 In [1]: from IPython.core.display import display, HTML display(HTML(" ")) 1. 앙상블 학습이란?¶ 앙상블(Ensemble) 학습¶ 앙상블이란 여러 개의 알고리즘을 사용하여, 그..

injo.tistory.com

ariz1623.tistory.com/207

 

앙상블 학습 개요

앙상블 학습 이란 앙상블 학습을 통한 분류는 여러 개의 분류기를 생성하고 그 예측을 결합함으로써 보다 정확한 최종 예측 도출하는 기법을 말한다. 앙상블 학습의 유형은 보팅, 배깅, 부스팅

ariz1623.tistory.com

 

반응형