한 종류의 데이터로 여러 머신러닝 학습모델(기본모델)을 만들어 그 모델들의 예측결과를 다수결이나 평균을 내어 예측하는 방법
n회 복원추출을 진행했을 때 그 샘플이 추출되지 않았을 확률
한 부트스트랩세트는 표본의 63.2%에 해당하는 샘플을 가진다
안뽑힌 36.8%이 Out of bag 샘플이며 이걸로 모델을 검증(val)한다
→ 이렇게 부트스트램세트로 만들어진 기본모델들을 합치는 과정이 Aggregation
※ 회귀문제 : 기본모델 결과들의 평균으로 결과를 냄
분류문제 : 다수결로 가장 많은 모델들이 선택한 범주로 예측
# 보통 설치를 해야 오류가 안난다
!pip install category_encoders
from category_encoders import OrdinalEncoder
⚠️ 범주들을 순서가 있는 숫자형으로 바꾸기 때문에 순서 정보가 생긴다
범주들 사이에 분명한 순위가 있을때 전처리로 숫자를 정해주면 좋다
랜덤포레스트는 기본모델들의 트리를 만들 때 무작위로 선택한 특성세트를 사용
결정트리에서 모든 특성(n개)을 고려하여 최적의 특성을 고르고 분할
랜덤포레스트에서는 특성 n개 중 일부분 k개의 특성을 선택 하고 이 k개에서 최적의 특성을 찾아내어 분할 이때 k개는 일반적으로 를 사용
from sklearn.ensemble import RandomForestClassifier
※ 결정트리모델보다 상대적으로 과적합을 피할 수 있는 이유?
다르게 샘플링된 데이터로 과적합된 결정트리를 만들고 그 결과를 평균내 사용하는 모델이 랜덤포레스트
import matplotlib.pyplot as plt
pipe_ord = make_pipeline(
OrdinalEncoder(),
SimpleImputer(),
RandomForestClassifier(random_state=10, n_jobs=-1, oob_score=True)
)
# 특성 중요도(ordinal)
rf_ord = pipe_ord.named_steps['randomforestclassifier']
importances_ord = pd.Series(rf_ord.feature_importances_, X_train.columns)
# 상위 10개의 특성 시각화
n = 10
plt.figure(figsize=(10,n/4))
plt.title(f'Top {n} features with ordinalencoder')
importances_ord.sort_values()[-n:].plot.barh();
※ 하이퍼파라미터