Kaggle and Data Analytics

결정나무(Decision Tree),랜덤포레스트 (Random Forest), 그래디언트부스팅(Gradient Boosting) + 배깅(Bagging)

Kkamang 2021. 2. 23. 21:21
아래의 내용들은 [Introduction to Machine Learning with Python (O'Reilly)]를 참고하였습니다.

0. 언제 트리모델을 써야할까?

트리모델들은 컬럼이 너무 많아지면 (>1,000 columns) 차원의 저주가 발생한다.

따라서 1,000개 미만의 column이 있을 때 트리모델을 쓰면 좋은데, 그렇다면 Bagging/Boosting 선택은 어떤 기준으로 할까? 

 

1. Decision Tree의 장단점 

장점: 

  • 시각화가 쉽다.
  • 스케일에 구애받지 않는다. 

단점: Max_depth를 지정해주어도(사전 가지치기) 과대적합되는 경향이 있다. 

 

Decision Tree의 치명적인 단점인 과대적합을 극복하기 위해서 보통 앙상블(Ensemble) 모델을 사용한다.

 

 


우선, 트리모델을 사용하기로 결정했는데 컬럼이 많으면 Random 추출의 약점을 보완할 수 있는 boosting을 사용하는 게 좋다. 

Boosting 모델에는 colsample_bytree라는 조건도 있기 때문에 Bagging 모델의 장점도 살릴 수 있다. 즉, 헷갈릴 때에는 boosting 모델을 선택하는 걸 추천한다. 

 

2. Bagging &  Boosting 

Ensemble: 여러가지 모델들을 함께 사용해서 시너지 효과를 내는 것. 여러명의 전문가들이 모여서 논의하면 더 좋은 결과가 도출되는 것과 비슷하다.

2-1. Bagging (Random Forest)

Bagging: Bootstrap Aggregating

중복을 허용한 랜덤 샘플링으로 Training Sets를 만들고, 각각의 training set을 가지고 따로 모델(분류기)을 학습시키는 것 

 

 

아주 많은 (과대적합 되어 있을) Decision Tree들을 랜덤하게 만들어, 이들이 도출한 결과값을 종합하여 결정을 내리는 모델 

여러개의 모델이 투표를 한다고 생각하면 쉽다.

 

 

유용한 유투브 영상(왕추천): 

 

StatQuest1-1

StatQuest1-2 

Bootstrap Sample: n_samples개의 데이터 포인트 중에서 무작위로 데이터를 n_samples 횟수만큼 반복하여 추출한다. *중복 추출 가능

 

변수 선택하기

  • n_estimator: 만들고자 하는 나무의 개수, 대체로 클수록 좋음 (메모리랑 시간이 여유 있다면)  

장단점 

  • 장점: 단일 트리모델의 단점을 보완하여 더 깊이있는 트리를 만들 수 있다.
  • 단점: 텍스트 데이터와 같이 차원이 매우 높고 희소한 데이터에는 적합하지 않다. 그리고 선형모델보다 메모리를 많이 사용하여 훈련과 예측이 느릴 수 있다. 

※ 너무 많은 컬럼이 있을 때에는 랜덤 포레스트 약점: 랜덤성

RandomForest는 랜덤으로 샘플을 뽑아서 나무를 만드는데 컬럼까지 너무 많아져버리면, 주요한 Feature이 반영되지 않을 확률이 높아진다. 이런 때에는 Boosting 모델을 사용해야 한다. 하지만 CatBoost는 Boosting 모델 중에서도 복잡한 정보를 가진 컬럼이 있을 때 유리하기 때문에 XGBoost나 L-GBM을 쓰면 된다.  

 


2-1. Gradient Boosting 

무작위성을 이용한 RandomForest와 달리, Gradient Boosting은 무작위성 없이 트리의 오차를 보완하며 순차적으로 트리를 만드는 '강력한 사전 가지치키'를 이용한다. a.k.a Weak Learner 

StatQuest2-1

StatQuest2-2

StatQuest2-3

StatQuest2-4

변수 선택하기

  • n_estimator: RandomForest와 달리 n_estimator가 커지면 과대적합될 가능성도 높아진다. 
  • learning_rate: 이전 트리의 오차를 보정하는 정도를 조절한다. learning_rate이 낮아지면 복잡한 모델을 만들기 위해 n_estimator를 크게 가져가야 한다.
  • col_sample: tree마다 sample(컬럼)을 선택한다 - 서로의 나무를 참고해서(Random Forest와의 차이점) 0.5면, a 나무는 50개의 샘플을 랜덤하게 추출한다. 결과적으로 더 다양한 트리를 만들어낼 수 있게 된다.

 

장단점 

  • 장점: Supervised 학습에서 가장 널리 사용되는 강력한 모델 
  • 단점: RandomForest와 마찬가지로 희소한 고차원 데이터에는 잘 작동하지 않음