본문 바로가기
개발기록/머신러닝

[머신러닝] 지도학습 (Supervised Learning) - Decision Tree 알고리즘

by spectrum20 2024. 11. 18.
반응형

Decision Tree (결정트리)

- Tree를 만들기 위해 "예/아니오" 질문을 반복하여 학습하는 의사결정 모델
- 다양한 앙상블(ensemble)모델이 존재 (ex. RandomForest, GradientBoosting, XGBoost, LightGBM)
- 분류와 회귀에 모두 사용 가능

 
 

  • 결정트리

  • 새로운 데이터 포인트가 들어오면 해당하는 노드를 찾아,
    분류라면 더 많은 클래스를 선택하고, 회귀라면 평균을 구한다
  • 지니불순도를 사용하여 데이터 분류의 기준을 잡는다
  • 타깃값이 하나로만 이루어진 리프노드를 순수노드(G=0)라고 한다
  • 모든 노드가 순수노드가 될 때까지 학습하면, 모델이 복잡해지고 과대적합된다

 

Gini Impurity (지니 불순도)

: 데이터 집합의 불확실성 또는 순도를 수치화한 것
  G값이 작을수록 순도가 높다

pi (특정 클래스에 속하는 항목의 비율)

  • G=0 (p=1 데이터 집합이 완전히 순수, 하나의 데이터로만 이루어짐)
  • G=0.5 (p1=0.5, p2=0.5 데이터 집합이 두개의 데이터로 이루어지고, 두 데이터의 개수가 같음)

 

Decision Tree(결정트리) 과대적합 제어

  • 노드 생성을 미리 중단하는 사전 가지치기(pre-pruning)와 트리를 만든 후에 크기가 작은 노드를 삭제하는 사후 가지치기 (pruning)가 있다
    (sklearn은 사전 가지치기만 지원)
  • 트리의 최대 깊이나 리프노드의 최대 개수를 제어 
  • 노드가 분할하기 위한 데이터포인트의 최소 개수를 지정

 

매개변수(Hyperparameter)

  • max_depth : 트리의 최대 깊이 (값이 클수록 모델의 복잡도가 올라간다)
  • max_leaf_nodes : 리프 노드의 최대 개수
  • min_samples_leaf : 리프 노드가 되기 위한 최소 샘플의 개수

 

특징

장점

  • 만들어진 모델을 쉽게 시각화할 수 있어, 이해하기쉽다 (white box model)
  • 각 특성이 개별 처리되기때문에, 데이터 스케일에 영향을 받지않아 특성의 정규화나 표준화가 필요없다
  • 트리 구성시, 각 특성의 중요도를 계산하기 때문에, 특성선택(Feature selection)에 활용될 수 있다

단점

  • 훈련데이터 범위 밖의 포인트는 예측할 수 없다 (ex. 시계열 데이터)
  • 가지치기를 사용함에도 불구하고 과대적합되는 경향이 있어 일반화 성능이 좋지않다

 
 


Decision Tree Ensemble (결정트리 앙상블)

  • 앙상블은 여러 머신러닝 모델을 연결하여, 더 강력한 모델을 만드는 기법
  • 결정트리의 가지치기 후, 과대적합되는 단점을 보완하는 모델
  • Random Forest, Gradient Boosting, XGBoost, LightGBM, CatBoost 등
  • 회귀와 분류에 모두 사용 가능
     

 

 

Random Forest

: 서로 다른 방향으로 과대적합된 트리를 많이 만들고, 평균은 내어 일반화시키는 모델

다양한 트리를 만드는 방법
- 트리를 만들 때, 사용하는 데이터 포인트 샘플을 무작위로 선택한다
- 노드 구성 시, 기준이 되는 특성을 무작위로 선택한다
 

매개변수

  • n_estimators : 생성할 트리의 개수
  • n개의 데이터 부트스트랩 샘플 구성 : n개의 데이터 포인트 중 무작위로 n횟수만큼 반복 추출, 중복된 데이터가 들어있을 수 있다
  • max_features : 무작위로 선택될 후보 특성의 개수 (각 노드별로 max_features 개수만큼 무작위로 특성을 고른 뒤, 최선의 특성을 찾는다)
  • max_feature를 높이면 트리들이 비슷해진다

 

특징

장점

  • 결정트리의 단점을 보완하고 장점은 그대로 가지고있는 모델이어서 별다른 조정없이도 괜찮은 결과를 만들어낸다
  • 트리가 여러개 만들어지기 때문에, 비전문가에게 예측과정을 보여주기 어렵다
  • 랜덤하게 만들어지기 때문에, random_state를 고정해야 같은 결과를 볼 수 있다

단점

  • 텍스트 데이터와 같은 희소한 데이터에는 잘 동작하지 않는다
  • 큰 데이터세트에도 잘 동작하지만, 훈련과 예측이 상대적으로 느리다
  • 트리 개수가 많아질수록 시간이 더 오래 걸린다

 
 

Gradient Boosting

: 정확도가 낮더라도 얕은 깊이의 모델을 만든 뒤, 나타난 예측오류를 두번째 모델이 보완
• 이전 트리의 예측오류를 보완하여, 다음 트리를 만드는 작업을 반복한다
• 마지막까지 성능을 쥐어짜고 싶은경우 사용 (주로, 경진대회에서 많이 활용)
  * XGBoost model : GradientBoosting을 더 발전시킨 모델
 

매개변수

n_estimators : 생성할 트리의 개수 (트리가 많아질수록 과대적합이 될 수 있음)
learning_rate : 오차 보정 정도 (값이 높을수록 오차를 많이 보정)
max_depth : 트리의 깊이 (일반적으로 트리의 깊이를 깊게 설정하지 않음)
 

특징

장점 단점
보통 트리의 깊이를 깊게하지 않기 때문에,
예측속도가 비교적 빠르다.
이전 트리의 오차를 반영해서 새로운 트리를 만들기 때문에,
학습 속도가 느리다.
특성의 스케일을 조정하지 않아도 된다. 희소한 고차원 데이터에는 잘 동작하지 않는다.

 
 
 
 

반응형

댓글