• 간단히 Tree 모델이란
  • 모델을 만드는 과정
  • 알고리즘
  • R tree library (tree, rpart, ctree)

 

1. tree 모델

결정트리 (Decision tree)는 분류와 회귀 모두 가능한 지도학습 모델입니다. 

특정 질문에 따라 예, 아니오로 구분하는 모델을 결정트리모델이라고 합니다. 

 

예를 들면, 강아지와 고양이, 새를 구분하는데 질문으로 '날개는 있나요?'라고 한다면

강아지와 고양이는 날개가 없으므로 '아니오', 새는 날개가 있으니 '예'로 두가지로 구분합니다. 

 

따라서 한번 질문을 던질때, 우리는 이것을 분기라고 부를 것인데, 이때마다 두개의 영역으로 구분합니다. 

 

 

 

앞으로, 질문이나 정답을 담은 네모상자는 Node라고 부를 것인데, 

가장 첫 질문이 되는 node를 Root Node라고하고 맨 마지막 node를 Terminal Node or Leaf Node라고 합니다. 

중간마디는 말 그대로 Intermediate Node라고 합니다. 

이런 모습을 거꾸로 뒤짚어놓은 나무같다고 해서 Decision Tree라고 합니다. 

 

 

 

2. 트리모델을 만드는 과정

 

 

가장 위에서부터 아래까지 node의 깊이를 hyperparameter로 주고 학습을 시키는데, 

깊이가 너무 깊다면, 오버피팅 될 가능성이 높습니다. 

 

이럴때, 가지치기(Prunning)으로 오버피팅을 막을 수 있습니다. 

 

우리가 hyperparameter로 정할 수 있는 것은, 최대 깊이, 터미널 노드의 최대개수, 한 노드가 분할하기위한 최소 데이터수를 제한하는 것입니다. 

 

R과 파이썬에서 hyperparameter를 부르는 명칭은 각 library별로 다르지만,

예를 들어, sklearn에서 min_sample_split (한 노드가 분할하기 위한 최소데이터 설정변수)를 10으로 해준다면, 데이터가 10개 이하가 되면 더이상 분할하지 않습니다. 

또한, max_depth를 통해 최대 깊이를 정해주고, 만일 값이 4라면 4보다 크게 가지를 치지 않습니다. 

 

3. 알고리즘

 

엔트로피(Entropy)와 불순도(Impurity)

불순도란 해당 범주 안에 서로 다른 데이터가 얼마나 섞여있는지를 뜻합니다. 

불순도가 높다는 것은 순도가 낮다고 말할 수 있습니다. 

 

예를 들어, 아래 그림에서 윗 부분은 불순도가 낮다고 말할 수 있습니다. 

 

엔트로피는 이런 불순도를 수치적으로 나타낸 척도입니다. 

엔트로피가 높다는 것은 불순도가 높다는것이고, 낮은건 불순도가 낮다는 뜻입니다. 

엔트로피는 0,1사이에 값을 가지는데 1이면 불순도가 최대입니다. 

이 뜻은 한 범주안에 데이터가 정확히 반반 있다는 뜻입니다. 

 

정보획득(Information gain)

 

엔트로피가 1인 상태에서 0.7인 상태로 바뀌었다면 정보획득은 0.3입니다. 

분기 이전의 엔트로피에서 분기 이후의 엔트로피를 뺀 수치를 정보획득이라고 합니다. 

 

Information gain = entropy(parent) - [weighted average] entropy(children)

 

4. R library

 

의사결정나무를 생성하는 3가지 방법이 있습니다.

tree()함수, rpart()함수, ctree()함수

각각, 다른 라이브러리의 함수입니다. 

 

각각, 살펴보면

  1. tree()함수: binary recursive partitioning방법을 사용합니다. 불순도의 측도로 엔트로피지수를 사용하며, tree()함수는 엔트로피가 높은 상태에서 낮은상태가 되도로고 나무모양을 생성합니다.
  2. CART(Classification And Regression Trees)방법을 사용합니다. Gini index가 작아지는 방향으로 움직이며 가장 많이 감소시켜주는 변수가 영향을 가장 많이 끼치는 변수가 됩니다.
  3. Unbiased recursive partitioning based on permutation test방법을 사용합니다. p-test를 거친 significance를 기준으로 가지치기를 할 변수를 결정하기 때문에 biased될 위험이 없어서 별도로 가지치리를 할 필요가 없는 모델입니다. 

ctree같은 경우 앞에 두, tree와 part함수의 단점을 보완해줍니다. 

 

 

 

 

 

 

+ Recent posts