: 여러 개의 분류기(Classifier)를 생성하고, 그 예측을 결합함으로써 보다 정확한 최종 예측을 도출하는 기법
1. 랜덤포레스트
2. 그래디언트 부스팅
++부스팅 알고리즘
1. XGBoost
2. LightGBM
3. 스태킹(Stacking)
1. 보팅(Voting)
: 일반적으로 서로 다른 알고리즘을 가진 분류기를 결합
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
cancer = load_breast_cancer()
data_df = pd.DataFrame(cancer.data, columns=cancer.feature_names)
data_df.head(3)
# 개별 모델은 로지스틱 회귀와 KNN 임.
lr_clf = LogisticRegression(solver='liblinear')
knn_clf = KNeighborsClassifier(n_neighbors=8)
# 개별 모델을 소프트 보팅 기반의 앙상블 모델로 구현한 분류기
vo_clf = VotingClassifier( estimators=[('LR',lr_clf),('KNN',knn_clf)] , voting='soft' )
# estimators는 리스트 값으로 보팅에 사용될 여러 개의 Classifier 객체들을 튜플 형식으로 입력받음
# voting은 'hard'시 하드 보팅, 'soft'시 소프트 보팅 방식을 적용(기본은 'hard')
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.9561
LogisticRegression 정확도: 0.9474
KNeighborsClassifier 정확도: 0.9386
보팅 분류기의 정확도가 높다
But, 여러 개의 분류기를 결합한다고 해서 무조건 예측 성능이 향상되는 것은 아니다.
2. 배깅(Bagging)
: 각각의 분류기가 모두 같은 유형의 알고리즘 기반, 데이터 샘플링을 서로 다르게 학습 + 랜덤포레스트
[부트스트래핑(Bootstrapping) : 데이터를 샘플링 해서 추출하는 분할 방식]
교차 검증이 데이터 세트 간 중첩을 허용하지 않는 것과 다르게 배깅 방식은 중첩을 허용한다.
3. 부스팅(Boosting)
: 여러 개의 분류기가 순차적으로 학습, 앞에서 학습한 분류기가 예측이 틀린 데이터에 대해서 올바르게 예측할 수 있도록 다음 분류기에게는 가중치(weight)를 부여하면서 학습과 예측을 진행 + 그래디언트 부스트, XGBoost, LightGBM
1. 스태킹
보팅과 스태킹은 서로 다른 알고리즘 기반 / 배깅과 부스팅은 결정 트리 알고리즘 기반
앙상블 학습에서는 학습 데이터의 예외 상황에 집착한 나머지 과적합이 발생해 실제 테스트 데이터에서 예측 성능이 떨어질 수 있다는 단점을 매우 많은 분류기를 결합하여 극복하고 있다. == 결정 트리 알고리즘의 장점은 그대로 취하고 단점은 보완하는 편향-분산 트레이트오프 효과를 극대화할 수 있다는 것이다.
[LCA] Ecochain의 LCA Beginner Course (1) What is LCA? (0) | 2024.07.05 |
---|---|
[파이썬 완벽 가이드] 04 분류 (6) 랜덤 포레스트 (2) | 2024.05.29 |
[영어] 영어 에세이 작성하는 방법 (0) | 2024.05.02 |
[SDGs] 네옴시티 (0) | 2024.04.24 |
[SDGs] 11번 지속가능한 도시와 공동체 (0) | 2024.04.24 |