앙상블 (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}'
댓글