- 트리를 깊게 학습시키면 과적합을 일으키기 때문에 배깅(랜덤포레스트)이나 부스팅 앙상블 모델을 사용해 과적합을 피해야한다
- 랜덤포레스트의 장점은 하이퍼파라미터에 상대적으로 덜 민감하다는 것
- 그래디언트 부스팅의 경우 하이퍼파라미터 셋팅에 따라 랜덤포레스트보다 더 좋은 예측 가능
※ Boosting과 Bagging의 차이점
그래디언트 부스팅 / 랜덤포레스트– 둘 다 앙상블 모델이지만 트리를 만드는 방법이 다름
부스팅 : 만들어지는 트리가 이전에 만들어진 트리에 영향을 받는다
랜덤포레스트 : 각 트리를 독립적으로 만든다
부스팅 알고리즘 중 AdaBoost는 각 트리(weak learners)가 만들어질 때 잘못 분류되는 관측치에 가중치를 준다(잘못 분류된 것을 더 신경쓴다의 의미)
다음 트리가 만들어질 때 이전에 잘못 분류된 관측치가 더 많이 샘플링되게 하여 그 관측치를 분류하는데 더 초점을 맞춘다
AdaBoost 알고리즘 예시
첫번째 기본트리에서 예측한 후 다음트리에서 첫번째의 잔차(오류)를 타겟으로 하여 예측
그래디언트 부스팅 (회귀 / 분류 문제 모두 사용가능)
from xgboost import XGBClassifier
model = XGBClassifier(
n_estimators=1000, # early stopping 에 따라 조절
max_depth=7,
learning_rate=0.2,
n_jobs=-1
)
# 인코더와 분류모델 분리
eval_set = [(X_train_encoded, y_train),
(X_val_encoded, y_val)]
# early stopping
model.fit(X_train_encoded, y_train,
eval_set=eval_set,
eval_metric='error',
early_stopping_rounds=50 #50번 동안 스코어의 개선이 없으면 멈춤
)
※ XGBoost parameter