Introduction
드디어 앙상블 러닝을 배운다.
예전부터 개념은 알고 있었지만, 코딩을 시작하는건 처음..
다시 천천히 정리해보자.
앙상블 학습(Ensemble Learning)
여러 분류학습기(estimators)들을 생성하고 예측을 결합하여,
단일 분류기가 가진 것보다 더 나은 예측결과를 도출하기 위한 기법을 말한다.
넓은 의미로 앙상블 학습은 서로 다른 모델을 결합한 것을 얘기하기도 한다.
앙상블 학습의 유형으로 보팅 voting, 배깅 bagging, 부스팅, boosting, 스태킹 stacking 등이 있다.
특징
앙상블 학습은 여러 모델들을 결합함으로서 단일모델들의 약점을 보완하는 방식이다.
따라서 뛰어난 성능을 가진 모델로만 구성하는 것보다,
성능이 떨어지더라도 서로 다른 유형의 모델을 섞는 것이 전체 성능 향상에 도움이 될 수 있다.
보팅(Voting)
앙상블 학습을 공부할 때 알아야 할 용어 첫번째, 보팅.
앙상블 학습의 유형 중 하나로 이해하면 된다.
보팅이란 아래 그림과 같이 서로 다른 estimator들을 데이터셋에 적용해 예측값을 받고,
이를 합산하여 최종 예측값을 산출해내는 방식을 말한다.
하드 보팅(Hard voting)과 소프트 보팅(Soft voting)
하드보팅은 각 분류기가 만든 예측값들을 다수결 투표해,
가장 많은 표를 얻은 예측값을 최종 예측값으로 결정하는 보팅 방식을 말한다.
소프트보팅은 각 분류기가 예측한 클래스별 확률을 평균내어 최종 예측값을 도출한다.
일반적으로 하드보팅보다는 소프트보팅의 성능이 상대적으로 더 우수하다.
연습 코드
개념은 알고있어도 결국 코딩을 직접 해보지 않으면 무용지물.
사이킷런에서는 VotingClassifier를 통해 보팅을 사용할 수 있다.
from sklearn.datasets import load_breast_cancer
from sklearn.ensemble import VotingClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# 위스콘신 유방암 데이터셋 로드
cancer = load_breast_cancer()
# 개별 모델: 로지스틱 회귀와 KNN
lr = LogisticRegression(solver='liblinear')
knn = KNeighborsClassifier(n_neighbors=8)
# voting classifier 설정. estimor를 요상한 방식으로 넣는다. 이건 딕셔너리도 아니고...
vc = VotingClassifier(estimators=[('LR', lr), ('KNN', knn)], voting='soft')
# 샘플 나누기, fit, predict 과정은 앙상블이라고 해서 다를 것 없다.
X_train, X_test, y_train, y_test = train_test_split(cancer.data, cancer.target, test_size=0.2)
vc.fit(X_train, y_train)
pred = vc.predict(X_test)
print('Voting 분류기 정확도: {0:.4f}'.format(accuracy_score(y_test , pred)))
# 개별모델 학습/예측/평가
clfs = [lr, knn]
for clf in clfs:
clf.fit(X_train, y_train)
pred = clf.predict(X_test)
class_name = clf.__class__.__name__
print('{0} 정확도: {1:.4f}'.format(class_name, accuracy_score(y_test, pred)))
결과값에서는 Voting 분류기가 신기하게 더 좋은 성능을 보여주었지만, 항상 그런 것은 아니다.
여러 번 돌려보면 오히려 성능이 나빠질 때도 관찰된다.
Conclusion
다음번에는 Random forest와 Bagging에 대해 알아볼 예정이다.
Referenses
- 파이썬 머신러닝 완벽 가이드의 PPT 그림을 이용했다.
'PL > Python' 카테고리의 다른 글
[코드 스터디] UCI-HAR 데이터셋3: 결정트리 적용 (0) | 2022.12.15 |
---|---|
Decision Tree Classifier: 하이퍼파라미터 정리 (0) | 2022.12.15 |
pandas value_counts() 사용법 (0) | 2022.12.09 |
데이터셋 분리: Validation (검증) 데이터셋은 무엇인가? (0) | 2022.12.08 |
pandas groupby cumcount 사용법 이해 (0) | 2022.12.06 |
댓글