본문 바로가기
머신러닝

[결정트리] 내가 이해한 결정트리

by 딍이 2024. 5. 21.
반응형

결정트리 (Decision Tree)는 의사결정나무라고도 합니다 분류와 회귀 모두 가능한 지도학습 모델이며, 스무고개 하듯이 질문을 이어가며 학습합니다 아래처럼요

 

[노드]

  • 맨 위에 날개가 있나요? 가 루트 노드(Root Node)
  • 맨 마지막에 매, 펭귄, 돌고래, 곰은 터미널 노드(Terminal Node) 혹은 리프 노드(Leaf Node) 라고 합니다
  • 나무같이 생겨서 결정 트리라고 부릅니다

 

[과적합]

어떤 기준으로 규칙을 만들어야 (규칙 : 날 수 있나요? 지느러미가 있나요?) 분류 성능을 좌우함

규칙이 많음 → 학습이 잘됨 → 복잡함 → 과적합

 

[정보이득]

  • 정보이득 (Infromation Gain)은 엔트로피를 기반으로 하는 개념으로 엔트로피는 주어진 데이터 집합의 혼잡도를 의미하는데 서로 다른 값들이 섞여 있으면 엔트로피가 높고 같은 값으로 섞여 있으면 엔트로피가 낮다.
  • IG가 높음 : 정보가 풍부
  • 정보이득 : 1 - (엔트로피 지수)

[엔트로피] : 주어진 데이터 집합의 혼잡도

  • 모든 노드에서 계산 가능하며 엔트로피가 낮으면 IG가 높아지며 높으면 IG가 낮아진다.
  • 계산 방법 예시
    • ex) 전체 데이터에서 운동을 하는 사람 : 하지 않는 사람이 3:2 라고 가정하자
    • 이때 운동 하는 사람의 비율은 0.6 하지 않는 사람의 비율은 0.4이다.
    • 이를 수식으로 나타내면 -0.6 * log2(0.6) - 0.4 * log2(0.4) = 0.971 으로 계산 된다.

[지니계수]

  • 지니계수 : 낮을수록 데이터의 균일도가 높고 높으면 균일도가 낮음
  • 높을수록 잘 분류되지 못한것, 높을수록 혼잡도가 높음
  • 지니계수 계산 예시 1 (리프노드)

  • 이 그림에서 다람쥐가 1, 낙타가 4 인데 지니계수를 계산해보자
  • 다람쥐 = 1/5, 낙타 = 4/5 사실 계산은 거의 다했다
  • 1-((1/5)**2 + (4/5)**2)
  • 다람쥐 비율 제곱 + 낙타 비율 제곱 하고 1에서 빼기 
  • 지니계수 계산 예시 2 (질문노드)
  • 이런게 있다고 할때
  • 왼쪽 지니계수 계산은 아래와 같다 위에 다람쥐 낙타 예시와 값만다름
  • 이때 이 질문에 대한 지니계수를 구하고 싶어요
  • 이렇게 각각 리프 노드의 지니계수를 곱해주고 계산하면 질문에 대한 지니계수를 구할 수 있어요

[균일도]

  • A는 낮은 균일도, C는 높은 균일도

[불순도]

  • 불순도 : 여러 범주가 섞여있는 정도를 의미
  • (45%, 55%)인 샘플은 불순도가 높으며 (80%, 20%)인 샘플은 불순도가 낮다
  • 불순도가 낮다 = 지니계수가 높다 = 엔트로피가 낮다 = 균일도가 높다 = 정보이득이 높다

[가지치기]

  • 가지치기(Pruning)는 과적합을 방지하고 일반화 성능을 높이기 위한 방식으로 모델의 복잡성을 줄이는 목적으로 사용됨
  • 결정트리의 가지를 제거하거나 병합하여 트리의 크기를 줄이는 과정
  • Max_depth를 통해 나무의 깊이를 줄이거나 Min_sample_split 파라미터를 조정하여 한 노드에 들어있는 최소 데이터수를 조정함
  • 오버피팅을 줄일 수 있으나 너무 과하면 데이터 정확도가 떨어 질 수 있음

[각각의 개념이 어디에 쓰이는지]

  • 한번 분할할때 아래 4개의 개념을 전부 사용하기도 하고 선택해서 사용하기도 함
  • IG : 루트 노드부터 각 노드가 분할 될 때, IG를 최대화 하는 특성을 선택함
  • 엔트로피 : 엔트로피의 감소량을 측정하여 불확실성을 최소화하는 방향으로 분할
  • 지니계수 : 데이터의 균일도를 최대화 하는 특성 선택
  • 균일도 : 균일도를 높이는 방향으로 분할
  • 의사결정나무에서 루트 노드에서 시작하여 데이터를 분할해 나갈 때, 다양한 특성들로 분할해보고 그 중에서 Information Gain (정보 이득)이 가장 높은 특성을 선택하여 분할하는 것이 일반적인 접근 방식입니다.

[하이퍼 파라미터]

  • Min_sample_split : 샘플이 최소한 몇개 이상이어야 하위 노드로 분리 할 것 인지 (클수록 과적합 방지, 낮을수록 정확하게 분리되어 과적합)
  • Min_sample_leaf : 잎 노드가 되려면 가지고 있어야 할 최소 샘플의 수 (클수록 과적합 방지, 낮을수록 과적합)
  • Min_sample_split을 만족해도 Min_sample_leaf를 만족하지 못하면 leaf가 되지 못한다
  • Max_depth : 얼마나 깊게 트리를 만들 것 인지, None이면 최대한 깊게 (불순도가 0이 될때까지)
  • Max_leaf_nodes : 최대 몇개의 잎 노드가 만들어 질 때 까지 리프 노드로 분리 할 것 인지
  • Max_feature : 최적의 split을 위해 고려할 최대 feature 개수

 

 

[변수 중요도] 

  • 변수 중요도를 의미하는 Feature Importance Plot을 통해서 결정트리를 시각화 할 수 있습니다. 
  • 결과 변수를 예측할때 어떤 예측 변수의 기여도가 높은지를 확인 할 수 있는 방법이에요.

→ 이런 결정 트리 모아둔게 랜덤포레스트~!

 

[CART] : Greedy Algorithm

  • 결정트리를 훈련시키기 위해서 Classification and Regression Tree 알고리즘을 사용함
  • 훈련세트를 하나의 특성 K와 임계값 t를 사용해서 2개의 서브셋으로 나눔
  • ex: 꽃잎의 길이 (K) ≤ 2.45cm (t)
  • 가장 불순도가 낮은 서브셋으로 나눌 수 있는 (K,t) 를 찾음 
  • 이 알고리즘이 최소화 해야 하는 비용함수
  • 계속 나누다가 최대 깊이가 되면 중지하거나 불순도를 줄이는 분할을 찾을 수 없을 때 멈춤

[지니 불순도와 엔트로피]

  • 지니 불순도와 엔트로피는 큰 차이가 없어서 둘 다 비슷한 트리를 만들어냄
  • 그렇지만 지니 불순도가 조금 더 계산이 빠름
  • 지니 불순도는 가장 빈도가 높은 클래스를 한쪽 가지로 고립시키는 경향이 있으나 엔트로피는 조금 더 균형 잡힌 트리를 만듦

[규제 매개변수] 

  • 결정트리는 훈련 데이터에 대한 제약 사항이 거의 없는 편
  • 제한이 없으면 트리가 훈련 데이터에 과적합 되기 쉽고, 훈련전에 파라미터 수가 결정되지 않음 → 비 파라미터 모델
  • 파라미터 모델 : 미리 정의된 모델 파라미터 수를 가지므로 자유도가 제한되고 과대적합 될 위험이 줄어듦
  • 규제 : 트리의 자유도 제한하기 (max_depth) : max_depth를 줄이면 모델을 규제하게 되고 과대적합의 위험이 감소함 

[회귀] 

 

 

  • 회귀도 분류와 마찬가지로 규제가 없다면 결정트리가 과대적합 되기 쉬움
  • 규제 추가 전 후를 비교하면 과적합 차이가 나는 걸 알 수 있음

[불안정성] 

  • 결정트리는 계단 모양의 결정 경계를 만들기 때문에 훈련세트 회전에 민감함
  • 또 다른 문제는 훈련 데이터에 있는 작은 변화에도 매우 민감하다는것
  • → 많은 트리에서 만든 예측을 평균하여 불안정성을 극복하는 랜덤 포레스트 개발

 

[참고]

반응형

댓글