Snoopy [ML] 4. DecisionTree(결정트리)
머신러닝과 딥러닝/ML 개념정리

[ML] 4. DecisionTree(결정트리)

Sooyoon Jeong 2022. 10. 26.

멋쟁이 사자처럼 AI스쿨 7기 오늘코드 박조은 강사님의 강의자료 및 강의 내용을 바탕으로 포스팅하였습니다.


사이킷 런 - user guide - 1. supervised learning - 10번: tree 계열

사이킷 런 - user guide - 1. supervised learning - 11번: boost tree 계열

 

1. 결정 트리 학습법(decision tree learning)

어떤 항목에 대한 관측값과 목표값을 연결시켜주는 예측 모델로 결정 트리를 사용하는 학습법

 

타이타닉 데이터, 생존여부를 나타내는 결정트리, 위키피디아

위에서 확인할 수 있듯이 스무고개를 하는 것처럼 질문을 이어가며 학습하는 구조이며,

특정 기준에 따라 데이터를 구분하는 모델이 바로 Decision Tree이다.

 

질문이나 정담을 담은 상자(위 사진 속 마름모나 타원)를 노드라고 하며

맨 처음 분류기준(남자인가?)를 Root Node, 맨 마지막 노드를 Terminal Node 혹은 Leaf Node라고 한다.

 

💡사이킷런에서 클래스 호출

from sklearn.tree import DecisionTreeClassifier
from sklearn.tree import DecisionTreeRegressor

 

 

2. 종류

결정트리는 분류와 회귀 모두에서 사용할 수 있다.

 

💡분류 및 회귀트리(Classification And Regression Tree, CART)는 두 트리를 아울러 일컫는 용어

 - 분류 트리 분석은 예측된 결과로 입력 데이터가 분류되는 클래스를 출력한다.

 - 회귀 트리 분석은 예측된 결과로 특정 의미를 지니는 실수 값을 출력한다. (예: 주택의 가격, 환자의 입원 기간)

 

💡 배깅 결정 트리 (부트스트랩 + aggregating)

초기 앙상블 방법, 반복적으로 교체 과정을 수행하는 것과 함께 훈련 데이터를 재샘플링하고,

합의 예측을 위한 트리를 선택하는 것으로 다수의 의사 결정 트리를 생성

 

  - 랜덤 포레스트 분류기에서는 분류 속도를 향상시키기 위해서 결정 트리들을 사용한다.

    ※ DT의 앙상블 버전이 랜덤 포레스트이다.

  - 부스트 트리는 회귀 분석과 분류 문제에 사용될 수 있다.

  - 회전 포레스트는 모든 결정 트리가 먼저 입력 트리 중 임의의 부분 집합에 대한 주성분 분석 (PCA)을 적용하여 훈련된다.

 

3. 방법

- 지니불순도

- 엔트로피

 

4. 장점

1) 결과를 해석하고 이해하기 쉽다.

 

2) 자료를 가공할 필요가 거의 없다.

(다른 기법들의 경우 자료를 정규화하거나 임의의 변수를 생성하거나 값이 없는 변수를 제거해야 하는 경우가 있다.)

 

3) 수치 자료와 범주 자료 모두에 적용할 수 있다.

다른 기법들은 일반적으로 오직 한 종류의 변수를 갖는 데이터 셋을 분석하는 것에 특화되어 있다. (일례로 신경망 학습은 숫자로 표현된 변수만을 다룰 수 있는 것에 반해 관계식(relation rules)은 오직 명목 변수만을 다룰 수 있다.

 

4) 화이트박스 모델을 사용한다. (트리를 보면 설명이 가능하기 때문)

모델에서 주어진 상황이 관측 가능하다면 불 논리를 이용하여 조건에 대해 쉽게 설명할 수 있다.

(결과에 대한 설명을 이해하기 어렵기 때문에 인공신경망은 대표적인 블랙 박스 모델이다.)

 

5) 안정적이다. 해당 모델 추리의 기반이 되는 명제가 다소 손상되었더라도 잘 동작한다.

 

6) 대규모의 데이터 셋에서도 잘 동작한다.

방대한 분량의 데이터를 일반적인 컴퓨터 환경에서 합리적인 시간 안에 분석할 수 있다.

 

7) 시각화가 쉽고, 다른 알고리즘에 비해 트리를 1개만 그리기 때문에 속도가 빠르다.

 

5. 단점

1) 과적합 문제 발생

결정 트리 학습자가 훈련 데이터를 제대로 일반화하지 못할 경우 너무 복잡한 결정 트리를 만들 수 있다.

이 문제를 해결하기 위해서 가지치기 같은 방법을 사용하여야 한다.

 

2)

약간의 차이에 따라 (레코드의 개수의 약간의 차이) 트리의 모양이 많이 달라질 수 있다. 두 변수가 비슷한 수준의 정보력을 갖는다고 했을 때, 약간의 차이에 의해 다른 변수가 선택되면 이 후의 트리 구성이 크게 달라질 수 있다.

 

6. 결정트리 알고리즘의 파라미터

DecisionTreeClassifier(
    *,
    criterion='gini',
    splitter='best',
    max_depth=None,
    min_samples_split=2,
    min_samples_leaf=1,
    min_weight_fraction_leaf=0.0, # The minimum weighted fraction of the sum total of weight
    max_features=None, # The number of features to consider when looking for the best split
    random_state=None,
    max_leaf_nodes=None,
    min_impurity_decrease=0.0,
    class_weight=None,
    ccp_alpha=0.0,
)

💡 criterion: 가지 분할의 품질 측정 기능(gini, entropy)

 

💡 max_depth: 트리의 최대 깊이

  - 완벽하게 클래스 값이 결정될 때 까지 분할하거나 데이터 개수가 min_samples_split보다 작아질 때까지 분할
  - 깊이가 깊어지면 과적합이 될 수 있으니 주의

 

💡 min_samples_split: 내부 노드를 분할할 때 필요한 최소 샘플 수

  - 샘플 수를 적게 설정할 수록 (하나의 노드에 너무 작은 샘플이 존재한다면) 해당 상황에 과적합될 수 있다.

  - 과적합을 제어하는데 사용하는 파라미터이며, default는 2이다.

 

💡 min_samples_leaf: 리프 노드에 있어야 하는 최소 샘플 수

 

💡min_samples_split과 함께 과적합을 제어하는 용도로 사용

  -  불균형한 데이터의 경우 특정 클래스의 데이터가 극도로 작을 수 있으므로 작게 설정할 필요가 있음

 

💡 max_leaf_nodes: 리프 노드 숫자의 제한치

 

💡 random_state: 추정기의 무작위성을 제어하는 파라미터, 실행했을 때 같은 결과가 나오도록 하는 옵션

 


🔗 참고자료

오늘코드 박조은 강사님 강의자료

https://scikit-learn.org/stable/modules/tree.html

https://ko.wikipedia.org/wiki/%EA%B2%B0%EC%A0%95_%ED%8A%B8%EB%A6%AC_%ED%95%99%EC%8A%B5%EB%B2%95

 

댓글