본문 바로가기
Experience/- KT AIVLE School

KT AIVLE School 4주차 정리 - 앙상블(Ensenble)

by Yoojacha 2023. 2. 27.

앙상블 (Ensemble)

- 여러 개의 모델을 결합하여 성능 향상


앙상블 종류

  • 보팅
    • 하드 보팅 - 여러 모델의 예측들을 다수결의 원칙으로 최종 예측 값 도출
    • 소프트 보팅 - 여러 모델의 예측 확률을 따져서 최종 예측 값 도출
  • 배깅
    • 하나의 모델로 분할하여 샘플링한 데이터들을 각각 주어서 학습하여 예측한 결과를 보팅
    • 범주형 데이터는 보팅, 연속형 데이터는 평균으로 집계
    • 데이터 분할 시 중복 허용
    • ex) 랜덤 포레스트
  • 부스팅
    • 학습 후 나온 예측의 오차를 가지고 또다시 학습하는 것을 반복
    • Gradient Boost
    • ex) XGBoost, LightGBM, CatBoost
  • 스태킹
    • 여러 모델들을 가지고 예측값들을 도출한 후, 예측값들을 가지고 다시 마지막 모델을 가지고 예측

랜덤 포레스트

  • 결정트리를 앙상블한 것
  • 기본값으로 복원 추출 방식(데이터 중복)으로 데이터를 결정트리알고리즘 학습을 100번 수행 후 예측을 평균을 낸다.
  • Feature 의 개수를 랜덤하게 가져간다.

주요한 파라미터

n_estimators 결정트리 개수 100
max_depth 결정트리의 최대 깊이 (과적합 방지) None
max_feature 분할을 위해 고려할 Feature 수 'auto'
bootstrap 부트스트랩 사용 여부 True
criterion 분할 함수 'gini' or 'entropy'
max_leaf_nodes 리프 노드 개수 제한 None
min_samples_leaf 각 리프 노드가 가져야할 최소 샘플 수 1
min_samples_split 노드 분할에 필요한 최소 샘플 수 2
n_jobs cpu 병렬 연산 설정 1 (-1은 최대 사용)

어트리뷰트

classes_ 범주 레이블
feature_importance_ 변수들의 중요도 값이 담긴 배열
n_classes_ target의 범주 개수
n_features_ feature 개수

앙상블 보팅 코드

from sklearn.ensemble import VotingClassifier

lr_model = LR(solver='liblinear')
knn_model = KNNC(n_neighbors=6)

estimators = [('LR',lr_model),('KNN',knn_model)]
vo_clf = VotingClassifier( estimators=estimators , voting='soft' )

x_train, x_test, y_train, y_test =\
    train_test_split(x, y, test_size=0.2, random_state=1)

vo_clf.fit(x_train , y_train)
y_pred = vo_clf.predict(x_test)
print('Voting 분류기 정확도: {0:.4f}'.format(accuracy(y_test , y_pred)))

# 모델별 정확도 확인
models = [lr_model, knn_model]
for m in models:
    m.fit(x_train , y_train)
    y_pred = m.predict(x_test)
    class_name= m.__class__.__name__
    print(f'{class_name} 정확도: {accuracy(y_test , y_pred):.4f}'

댓글