앙상블(Ensemble)은 기계 학습에서 여러 개의 모델을 결합하여 하나의 강력한 모델을 구성하는 기법을 말합니다. 각 개별 모델의 예측을 종합함으로써 개별 모델보다 더 나은 예측 성능을 달성할 수 있습니다. 앙상블은 단일 모델보다 더욱 정확하고 안정적인 예측을 제공할 수 있습니다.
주요 개념
- 개별 모델의 다양성 확보: 앙상블은 다양한 방법을 사용하여 여러 개의 개별 모델을 생성합니다. 이들 모델은 독립적으로 학습하거나 서로 다른 학습 데이터를 사용하여 학습될 수 있습니다.
- 결합 방법: 개별 모델의 예측을 결합하는 방법에는 여러 가지가 있습니다. 주로 사용되는 방법으로는 평균화(Averaging), 가중 평균화(Weighted Averaging), 투표(Voting), 스태킹(Stacking) 등이 있습니다.
- 앙상블 종류:
- 배깅(Bagging): 각 모델이 독립적으로 학습하도록 하기 위해 데이터를 랜덤하게 부트스트랩 샘플링하여 학습하는 방법입니다. 예시로는 Random Forest가 있습니다.
- 부스팅(Boosting): 약한 학습기(weak learner)를 순차적으로 학습시켜 강한 학습기(strong learner)를 구성하는 방법입니다. 예시로는 AdaBoost, Gradient Boosting Machines(GBM), XGBoost가 있습니다.
- 스태킹(Stacking): 여러 개의 다른 학습 모델의 예측 결과를 사용하여 새로운 메타 모델(meta model)을 학습시키는 방법입니다.
장점
- 성능 향상: 다양한 모델의 다양성과 예측력을 결합하여 보다 정확한 예측을 제공할 수 있습니다.
- 일반화 성능 향상: 과적합을 줄이고 일반화 성능을 개선할 수 있습니다.
- 데이터의 다양한 특성을 잡아낼 수 있음: 다양한 방법을 사용하여 데이터의 다양한 측면을 고려할 수 있습니다.
단점
- 계산 비용: 여러 모델을 학습하고 결합하는 과정에서 추가적인 계산 비용이 발생할 수 있습니다.
- 해석의 어려움: 많은 모델이 결합되므로 각 모델의 기여를 해석하기 어려울 수 있습니다.
코드 예시
이 코드는 다양한 분류기를 사용하여 Voting Classifier를 구성하고, 각 분류기의 성능을 비교하는 예제입니다.
from sklearn.ensemble import RandomForestClassifier
from sklearn.ensemble import VotingClassifier
from sklearn.svm import SVC
from sklearn.naive_bayes import GaussianNB
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score
# 다양한 분류기 정의
knn_clf = KNeighborsClassifier(n_neighbors=11)
nb_clf = GaussianNB()
rndf_clf = RandomForestClassifier(n_estimators=2, random_state=0)
svm_clf = SVC(kernel='linear')
dt_clf = DecisionTreeClassifier(max_features=3, random_state=0)
# Voting Classifier 정의
voting_clf = VotingClassifier(
estimators=[
('dt', dt_clf), # Decision Tree Classifier
('nb', nb_clf), # Gaussian Naive Bayes Classifier
('knn', knn_clf), # K-Nearest Neighbors Classifier
('rndf', rndf_clf), # Random Forest Classifier
('svm', svm_clf) # Support Vector Machine Classifier
],
voting='hard' # Voting 방법: 'hard' (다수결)
)
# 분류기 리스트
clfList = [dt_clf, knn_clf, nb_clf, rndf_clf, svm_clf, voting_clf]
# 각 분류기에 대해 학습하고 성능 평가
for clf in clfList:
clf.fit(x_train, y_train) # 모델 학습
pred = clf.predict(x_test) # 예측
print(f"{clf.__class__.__name__:23s}: {accuracy_score(y_test, pred):.3f}") # 정확도 출력
'인공지능&머신러닝' 카테고리의 다른 글
[머신러닝]랜덤 포레스트(Random Forest) 원리 및 코드 예시 (0) | 2024.06.24 |
---|---|
[머신러닝]서포트벡터머신(SVM,Support Vector Machine)원리 및 코드 예시 (0) | 2024.06.24 |
[머신러닝]K-최근접 이웃(KNN모델)원리 및 코드 예시 (0) | 2024.06.24 |
[데이터 전처리]데이터 스케일링(Data Scaling): (0) | 2024.06.24 |
[머신러닝]결정트리(Decision Tree)원리 및 코드 예시 (0) | 2024.06.24 |