728x90
앙상블 학습 (Ensemble Learning)
여러개의 분류기(Classifier)를 생성하고 그 예측을 결합함으로써 보다 정확한 최종 예측을 도출하는 기법
단일 모델의 약점을 다수의 모델들을 결합하여 보완
뛰어난 성능을 가진 모델들로만 구성하는 것 보다 성능이 떨어지더라고 서로 다른 유형의 모델을 섞는 것이 오히려 전체 성능이 도움될 수 있음
보팅(Voting)
- 서로 다른 알고리즘을 가진 분류기를 결합하는 것
보팅의 유형
- Hard Voting: 다수의 Classifier간 다수결로 최종 class결정
- Soft Voting: 다수의 Classifier들의 class 확률을 평균하여 결정
배깅(Bagging)
- 각각의 분류기가 모두 같은 유형의 알고리즘 기반이지만, 데이터 샘플링을 서로 다르게 가져가면서 학습을 수행해 보팅을 수행하는 것
- 랜덤포레스트
부스팅(Boosting)
- 여러개의 약한 학습기(weak learner)를 순차적으로 학습-예측하면서 잘못 예측한 데이터나 학습 트리에 가중치 부여를 통해 오류를 개선해 나가면서 학습하는 방식
- AdaBoost, XGBoost, LightGBM
보팅 실습
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
import warnings
warnings.filterwarnings('ignore')
# 데이터 불러오기
cancer = load_breast_cancer()
data_df = pd.DataFrame(cancer.data, columns=cancer.feature_names)
# 개별 모델은 로지스틱 회귀와 KNN 임.
lr_clf = LogisticRegression(solver='liblinear')
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= 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)))
728x90
'머신러닝' 카테고리의 다른 글
하이퍼파라미터 튜닝 방법 - Bayesian Optimization (0) | 2024.03.04 |
---|---|
[분류] 부스팅 - XGBoost (0) | 2024.03.03 |
[분류] 랜덤포레스트 RandomForest (0) | 2024.03.03 |
[분류] DecisionTree GridSearchCV로 하이퍼파라미터 튜닝 해보기 (0) | 2024.03.03 |
[분류] 결정트리 파라미터 DecisionTree parameters (0) | 2024.03.03 |