머신러닝 (Machine Learning)/분류(Classification) 분석

결정 트리 (Decision Tree)

DS지니 2021. 2. 13. 23:41
728x90
반응형

결정트리는 머신러닝 알고리즘 중 직관적으로 이해하기 쉬운 알고리즘입니다.

데이터에 있는 규칙을 학습을 통해 자동으로 찾아내 트리(Tree) 기반의 분류 규칙을 만드는 것입니다.

if/else를 기반으로 예측을 위한 규칙을 만드는 알고리즘으로 스무고개 게임을 생각해 볼 수 있습니다.

따라서, 데이터의 어떤 기준을 바탕으로 규칙을 만들어야 가장 효율적인 분류가 될 것인가가 알고리즘의 성능을 크게 좌우합니다.

결정트리

 


 

1. 결정트리의 구조

각 가지의 특성에 따라 Node 이름이 있습니다.

데이터 세트에 피처가 있고 이러한 피처를 결합해 규칙 조건을 만들 때마다 규칙 노드가 만들어집니다. 하지만 많은 규칙이 있다는 것은 곧 분류를 결정하는 방식이 더욱 복잡해진다는 얘기고, 이는 곧 과적합으로 이어지기 쉽습니다. 

즉, 트리의 깊이(depth)가 깊어질수록 결정 트리의 예측 성능이 저하될 가능성이 높습니다.

 

https://www.javatpoint.com/machine-learning-decision-tree-classification-algorithm

 

Root Node
(=Parent node)
루트 노드는 결정트리의 시작으로 전체 데이터셋을 대표한다. 여러 세트로 더 나뉘어진다.
Decision Node
(Internal Node)
결정노드 또는 규칙노드는 규칙 조건을 나타낸다.
Leaf Node 결정된 클래스 값을 나타내고 node의 마지막(결괏값)이다.
Sub-Tree(=Branch Tree) 새로운 규칙 조건마다 규칙 노드 기반의 서브 트리 생성
Child nodes Decision Nodes + Leaf Nodes
Pruning 가지치기. 트리에서 원치않는 가지들을 제거하는 과정.

가능한 한 적은 결정 노드로 높은 예측 정확도를 가지려면 데이터를 분류할 때 최대한 많은 데이터 세트가 해당 분류에 속할 수 있도록 결정 노드의 규칙이 정해져야 합니다. 이를 위해서는 어떻게 트리를 분할할 것인가가 중요한데 최대한 균일한 데이터 세트를 구성할 수 있도록 분할하는 것이 필요하다.

 

 


 

2. 트리 분할 (Split)

결정노드(Decision Node)는 정보 균일도가 높은 데이터 세트를 먼저 선택할 수 있도록 규칙 조건을 만듭니다.

즉, 정보 균일도가 데이터 세트로 쪼개질 수 있도록 조건을 찾아 서브 데이터 세트를 만들고, 다시 이 서브 데이터 세트에서 균일도가 높은 자식 데이터셋(Child data set)을 쪼개는 방식을 자식 트리로 내려가면서 반복하는 방식으로 데이터 값을 예측하게 됩니다.

 

균일한 데이터 세트란?

예를 들어 바구니 안에 10개의 과일이 있는데 모든 과일이 사과이면 균일하다고 합니다.

9개의 사과와 1개의 귤이 있으면 균일도가 높은 편 입니다. 하지만 4개의 사과와 6개의 귤이 골고루 섞여 있으면 균일하다고 할 수 없습니다. 이처럼 데이터 셋 안에 같은 데이터가 많으면 균일한 데이터 세트라고 말합니다.

 


 

3. 균일도의 측정 방법 - 정보이득지수, 지니 계수

 

1) 엔트로피를 이용한 정보이득지수(Information Gain)

 

정보이득(Information Gain)은 엔트로피(Entropy)라는 개념을 기반으로 합니다. 

(*엔트로피 : 주어진 데이터 집합의 혼잡도)

서로 다른 값이 섞여 있으면 엔트로피가 높고, 같은 값이 섞여 있으면 엔트로피가 낮습니다.

정보 이득 지수 = 1 - 엔트로피 지수(혼잡도)

결정 트리는 이 정보 이득 지수로 분할 기준을 정합니다. 즉, 정보 이득이 높은 속성을 기준으로 분할합니다.

 

2) 지니 계수(Gini coefficient)

 

지니계수는 원래 경제학에서 불평등 지수를 나타낼 때 사용하는 계수입니다. 경제학자인 Corrado Gini의 이름에서 딴 계수로서 0이 가장 평등하고 1로 갈수록 불평등합니다. 머신러닝에서의 지니 계수는 낮을수록 데이터 균일도가 높은 것으로 해석해 지니 계수가 낮은 속성을 기준으로 분할합니다.

 

 


 

 

 

4. 결정 트리 모델의 특징

  장점 단점
1. 정보의 '균일도'라는 룰을 기반으로 하고 있어서 알고리즘  이 쉽고 직관적이라는 점. 1. 피처가 많고 균일도가 다양하게 존재하면 트리가 복잡해지고 실제상황(test data)에 유연하게 대처할 수 없어 예측 성능이 떨어짐.
-> 극복하기위해 트리 크기 제한하는 튜닝 필요
2. 룰이 매우 명확하고, 이 룰에 기반해 어떻게 규칙노드와 리프노드가 만들어 지는지 알 수 있고, 시각화로 표현 가능  
3. 정보의 균일도만 신경 쓰면 되므로 특별한 경우를 제외하고는 각 피처의 스케일링이나 정규화의 전처리 작업이 필요없음.  

 


 

4. Decision Tree 알고리즘 - sklearn.DecisionTreeClassifier

 

  • Defalt - 지니계수
  • Information Gain이 높거나 Gini Coefficient가 낮은 조건을 찾아서 자식 트리 노드에 걸쳐 반복적으로 분할한 뒤, 데이터가 모두 특정 분류에 속하게 되면 분할을 멈추고 분류를 결정합니다.
1. 데이터 집합의 모든 아이템이 같은 분류에 속하는지 확인
IF True 🔽 Else 🔽
2-1.
리프노드로 만들어서 분류 결정
2-2.
데이터를 분할하는데 가장 좋은 속성과 분할 기준을 찾음
(정보이득 or 지니계수)
3.
해당 속성과 분할 기준으로 데이터 분할하여 Branch 노드    생성
4.
모든 데이터 집합의 분류가 결정 될 때까지 1 반복

 

<DecisionTree 클래스>

  • DecisionTreeClassifer (분류)
  • DecisionTreeRegressor (회귀)

 

<DesicionTree 파라미터>

min_samples_split - 노드를 분할하기 위한 최소한의 샘플 데이터 수
- 과적합을 제어함
- defalt =2
- 작게 설정할수록 분할되는 노드가 많아져서 과적합 가능성 증가
min_samples_leaf - 말단 노드(leaf)가 되기 위한 최소한의 샘플 데이터 수
- min_samples_split과 유사하게 과적합 제어 용도.
- 비대칭적(imbalanced) 데이터의 경우 특정 클래스의 데이터가 극도로 작을 수 있으므로 이 경우는 작게 설정 필요.
max_features - 최적의 분할을 위해 고려할 최대 피처 개수
- defalt = None (모든 피쳐 사용)
- int 형 = 대상 피처의 개수로 지정
- float 형 = 전체 피처 중 대상 피처의 퍼센트로 지정
- 'sqrt' = 전체 피처 개수의 루트값 선정
- 'auto' = squrt
- 'log' = 전체 피처 중 log2 선정
- 'None' = 전체피처 선정
max_depth - 트리의 최대 깊이를 규정
- defalt = None (완벽하게 클래스 결정 값이 될 때까지 계속 분할 or 노드가 가지는 데이터 개수가 min_samples_split보다 작아질 때까지 계속 깊이를 증가)
max_leaf_nodes - 말단 노드(Leaf)의 최대 개수

 


 

 

결정 트리 그래프 시각화에 대한 자세한 설명 🔽

 

2021/02/14 - [머신러닝 (Machine Learning) 기초/분류(Classification)] - Decision Tree Graphviz

 

Decision Tree Graphviz

▶ Jupyter notebook 과 Google Colab에서 Graphviz 사용하기. (설치 및 사용법) velog.io/@gggggeun1/%EA%B2%B0%EC%A0%95%ED%8A%B8%EB%A6%AC-%EA%B7%B8%EB%9E%98%ED%94%84-exportgraphviz 결정트리 그래프 export..

gggggeun.tistory.com

 

728x90
반응형