앙상블 학습은 약한분류기를 생성하고 그 예측을 결합하여 정확한 최종 예측을 도출하는 기법을 말합니다.
앙상블 학습 유형은 크게 보팅, 배깅, 부스팅으로 나눌수 있습니다.
이번포스팅에서는 앙상블 기법중 하나인 보팅기법에 대해 포스팅 하려고 합니다.
보팅 방법에는 하드보팅과 소프트보팅이 있습니다. 일반적으로 하드보팅보다는 소프트보팅이 예측 성능이 좋아서 많이 쓰이기 때문에 이번포스팅에서는 소프트 보팅을 이용해 보도록 하겠습니다.
우선 모듈들을 import 해줍니다.
import pandas as pd
from sklearn.ensemble import VotingClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.neighbors import KNeighborsClassifier
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
voting분류기와, 로지스틱회귀,K-Neigbors분류기를 임포트해줍니다.
이번 voting을 할때 이용할 데이터는 사이킷런 데이터에 들어있는 유방암 데이터를 이용하겠습니다.
cancer = load_breast_cancer()
data_df = pd.DataFrame(cancer.data, columns=cancer.feature_names)
data_df.head(3)
데이터를 로드해준뒤 데이터를 확인해 줍니다.
data_df.head(3)
mean radius mean texture ... worst symmetry worst fractal dimension
0 17.99 10.38 ... 0.4601 0.11890
1 20.57 17.77 ... 0.2750 0.08902
2 19.69 21.25 ... 0.3613 0.08758
데이터가 잘 로딩이 되었으니 이제 voting분류기를 만들어 보겠습니다.
이번에 voting분류기는 로지스틱회귀와 K-근접분류를 이용하여 생성해보겠습니다
lr_clf = LogisticRegression()
knn_clf = KNeighborsClassifier(n_neighbors=8)
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= 1)
lr_clf = 로지스틱회귀
knn_clf = K-근접분류
vo_vlf = Votingclassfier , 로지스틱회귀,K-근접 분류, 보팅방법은 soft로 설정해줍니다.
Voting 분류기 정확도: 0.9561
95.61이라는 아주 높은 정확도가 나왔습니다.
그렇다면 로지스틱회귀와, K-근접의 정확도는 얼마나 나오는지 확인을 해보겠습니다.
개별적인 정확도를 알아보는 코드는 다음과 같습니다.
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)))
이제 결과를 확인해보도록 하겠습니다.
LogisticRegression 정확도: 0.9474
KNeighborsClassifier 정확도: 0.9474
Voting을 이용한 분류기의 정확도가 더 높은 정확도를 보여줍니다.
하지만 Voting이 항상 좋은 정확도를 보여주는 것은 아닙니다.
때로는 1개의 분류기가 더 높은 성능을 보일때도 있습니다.
이것으로 Votingclassifier 에대한 포스팅을 마치겠습니다.
'Python > Sklearn' 카테고리의 다른 글
[Python]Ensmeble "lightgbm" (0) | 2022.03.25 |
---|---|
[Python] Ensemble "RandomForest" (0) | 2022.03.18 |
[Python]Human Activity Recognition Using by "Decision Tree" (0) | 2022.03.17 |
[Python]Data Preprocessing & Encoding (데이터 전처리 인코딩 & 데이터스케일링) (0) | 2022.03.15 |
[Python]Cross Validation & GridSearchCV (교차검증, 하이퍼파라미터 튜닝) (0) | 2022.03.15 |