반응형
[machine learning] - 머신러닝 - 스태킹 앙상블
목차
1. 앙상블이란
2. 보팅
3. 배깅
(1) 앙상블( Ensemble Learning) 이란
여러 개의 분류기(Classifier)를 생성하고 그 예측을 결합함으로써 보다 정확한 최종 예측을 도출하는 기법
-> 어려운 문제의 결론을 내기 위해 여러 명의 전문가의 의견을 수렴해 결정하는 것과 비슷하다.
앙상블의 유형으로는 보팅, 배깅, 부스팅 방법이 있습니다. 순서대로 정리해보겠습니다.
(2) 보팅 : 서로 다른 알고리즘을 가진 분류기를 결합하는 것이다.
보팅의 유형은 두 가지로 하드 보팅과 소프트 보팅이 있다.
하드 보팅이란 예측한 결괏값들 중 다수의 분류기가 결정한 예측값을 최종 보팅 결괏값으로 선정하는 것이다.
( 다수결 원칙과 비슷하다.)
소프트 보팅이란 분류기들의 레이블 값 결정 확률을 모두 더하고 이를 평균해서 이들 중 확률이 가장 높은 레이블 값을 최종 보팅 결과값으로 선정한다.
(2-2) 보팅 분류기 - VotingClassifier
from sklearn.ensemble import VotingClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.neighbors import KNeighborsClassifier
from skleran.metrics import accuracy_score
# 개별 모델 생성
lr_clf = LogisticRegression()
knn_clf = KNeighborsClassifier(n_neighbors=8)
# 개별 모델을 소프트 보팅의 기반의 앙상블 모델 구현
vo_clf = VotingClassifier(estimators=[('LR', lr_clf), ('KNN', knn_clf)], voting='soft')
vo_clf.fit(x_train, y_train)
pred = vo_clf.predict(x_test)
print(accuracy_score(y_test, pred)
VotingClassifier 파라미터
estimators : 리스트 값으로 보팅에 사용될 여러 개의 Classifier 객체들을 튜플 형식으로 입력한다.
voting : 하드 보팅 or 소프트 보팅 방식을 적용한다.
○ 각 분류기 정확도 비교하기
classifiers = [lr_clf, knn_clf, vo_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)))
(3) 배깅 : 같은 알고리즘으로 여러 개의 분류기를 만들어서 보팅으로 최종 결정하는 알고리즘
* 각각의 분류기가 모두 같은 유형의 알고리즘 기반이지만, 데이터 샘플링을 서로 다르게 가져가면서 학습을 수행해 보팅을 수행한다.
대표적으로 랜덤 포레스트가 있다. RandomForestClassifier
랜덤 포레스트는 여러 개의 결정 트리 분류기가 전체 데이터에서 배깅 방식으로 각자의 데이터를 샘플링해 개별적으로 학습을 수행한 뒤 최종적으로 모든 분류기가 보팅을 통해 예측 결정을 하게 된다.
EX) 랜덤 포레스트 RandomForestClassifier
from sklearn.ensemble import RandomForestClassifier
rf_clf = RandomForestClassifier(random_state=0)
rf_clf.fit(x_train, y_train)
pred = rf_clf.predict(x_test)
print(accuracy_score(y_test, pred))
랜덤 포레스트 파라미터
n_estimators : 랜덤 포레스트에서 결정 트리의 개수를 지정한다. (디폴트 값 10)
max_features : 결정 트리에 사용된 max_features 파라미터와 같다. 하지만 랜덤 포레스트의 트리를 분할하는 피처를 참조할 때 전체 피처가 아니라 sqrt(전체 피처 개수) 만큼 참조합니다. (전체가 16개라면 분할을 위해 4개 사용)
max_depth, min_samples_leaf도 결정 트리와 같다.
반응형
'AI > Machine Learning' 카테고리의 다른 글
불균형 데이터 처리를 위한 언더 샘플링과 오버 샘플링 (0) | 2022.04.09 |
---|---|
[ML] 머신러닝 - 부스팅 GBM, XGBoost, LightGBM (0) | 2022.04.09 |
[ML] 머신러닝 결정트리 (DecisionTreeClassifier, DecisionTreeRegressor) (0) | 2022.04.06 |
[ML] 머신러닝 모델의 오차행렬, 정확도, 정밀도, 재현율 구하기 (0) | 2022.04.05 |
[ML] 머신러닝 교차 검증- KFold, Stratified KFold, cross_val_score() (0) | 2022.04.04 |