AI

결정 트리 (Decision Tree)

땅콩새싹 2021. 7. 22. 14:49
반응형

 


 

결정 트리 (Decision Tree)

결정 트리(Decision Tree, 의사결정트리, 의사결정나무라고도 함)는 분류(Classification)와 회귀(Regression) 모두 가능한 지도 학습 모델 중 하나입니다. 결정 트리는 스무고개 하듯이 예/아니오 질문을 이어가며 학습합니다.

타이타닉호 탑승객의 생존 여부를 나타내는 결정 트리 입니다. 잎 아래의 숫자는 각각 생존 확률과 탑승객이 그 잎에 해당될 확률을 의미합니다. 이렇게 특정 질문에 따라 데이터를 구분하는 모델을 결정 트리 모델이라고 합니다. 한번의 분기 때마다 변수 영역을 두 개로 구분합니다. 결정 트리에서 질문이나 정답을 담은 네모 상자를 노드(Node)라고 합니다. 맨 처음 분류 기준을 Root Node라고 하고 맨 마지막 노드를 Terminal Node 또는 Leaf Node라고 합니다.

 

  • 지니 불순도 (Gini Impurity)

아래의 그림과 같이 두 가지 트리가 있습니다. 어떤 트리가 데이터를 잘 분류하는 모델일까요?

정확히 하나의 그룹에 하나의 label만 포함되 있는 두 번째 트리가 더 분류를 잘 하는 모델이라고 생각할 수 있습니다. 첫 번째 트리처럼 여러가지 label이 어느정도 포함되어 있는지 확인할 수 있는 지표로 지니 불순도(Gini Impurity)값을 활용할 수 있습니다.

각 그룹의 지니 불순도를 계산하기 위해서는 1에서 각 그룹에 속한 데이터의 각 label이 차지하는 비율의 제곱을 빼면 됩니다. 예를들어 총 4개의 데이터 세트에서 레이블 A가 3개, B가 1개 포함되어 있는 그룹이 있다면 다음과 같이 계산이 됩니다.

만약 위의 두 번째 그림과 같이 단 하나의 label로만 구성되어 있다면 지니 불순도 값은 0이 됩니다. 데이터 분할 이후 각 그룹의 불순도가 낮으면 낮을수록 데이터가 잘 분류되었다고 볼 수 있겠습니다.

 

  • 정보 이득 (Information Gain)

특정 기준으로 데이터를 분할하였을 때 정보 이득을 계산함으로써 어떤 기준으로 데이터를 나누어야 할지 알 수 있습니다. 정보 이득은 데이터를 분할하기 전의 불순도와 분할 후의 불순도의 차를 계산함으로써 얻을 수 있습니다.

불순도가 0.5인 데이터가 있다고 할 때 이를 분할하여 세 개의 그룹으로 나누었고 각 그룹의 불순도가 0, 0.375, 0 이었다고 할 때 정보 이득(information gain)은 0.5 - 0 - 0.375 - 0 = 0.125로 계산됩니다. 분할 시 정보 이득이 높을 수록 좋습니다. 만약 정보 이득이 0 이라면 분할 전과 분할 후의 불순도가 같다는 것을 의미하기 때문에 이는 의미가 없는 분할이라고 볼 수 있습니다.

  • Weighted Information Gain

분할 전과 분할 후의 불순도를 비교하는 것 만으로는 좋은 분할 기준을 선정함에 있어서 부족한 점이 있습니다. 그렇기 때문에 분할 후 각 그룹에 속하는 데이터의 수도 비교해야 합니다.

두 개의 데이터 세트 모두 불순도는 0으로 동일하지만 오른쪽 세트가 더 의미있는 세트로 생각할 수 있습니다. 데이터의 개수가 충분히 많고 분류 결과가 우연에 의해 만들어진 것이 아니라고 확신할 수 있기 때문입니다.

이렇게 생성된 데이터 세트의 크기에 따라 Weighted Information Gain을 계산해 볼 수 있습니다.

 

Decision Tree의 한계

결정 트리는 정보 이득이 가장 높은 특징으로 분할하는데 이러한 행위가 항상 가장 최적의 트리를 형성하는 것은 아닙니다. 당장 분할할 때 정보 이득이 조금 낮은 특징으로 분할하더라도 최종적으로 더 좋은 결과가 나올 수도 있기 때문입니다. 최적의 트리를 찾는 것은 매우 어려운 작업입니다. 하지만 이러한 방식으로 트리를 만드는 것도 합리적인 접근 방식으로 많은 경우에 좋은 트리를 형성할 수 있습니다.

결정 트리의 또 다른 문제는 학습 데이터에 과적합되기 쉽다는 것 입니다. 트리가 커질수록 학습 데이터 위주로 데이터를 분할하게 되기 때문에 학습 데이터에만 맞는 모델이 만들어지게 되는 것 입니다. 이를 해결하기 위해 가지치기(pruning)를 해주어 학습 데이터에 과적합 되는 것을 막아주어야 합니다.

scikit-learn에서는 모델 객체를 생성할 때 DecisionTreeClassifier(max_depth = n) 이런 식으로 트리의 최대 크기를 지정할 수 있습니다.

반응형

'AI' 카테고리의 다른 글

교차 검증(cross validation)  (0) 2021.07.27
결정 트리 (Decision Tree) 실습  (0) 2021.07.23
SGD 실습(SGDClassifier scikit-learn)  (0) 2021.07.21
SGD and Batch, Mini-Batch  (0) 2021.07.21
경사 하강법  (0) 2021.07.21