on
수업 들은 기념 결정 트리(Decision Tree) 다시 정리하기 호호
수업 들은 기념 결정 트리(Decision Tree) 다시 정리하기 호호
https://bkshin.tistory.com/entry/%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-4-%EA%B2%B0%EC%A0%95-%ED%8A%B8%EB%A6%ACDecision-Tree
위 블로그를 필사하며 공부
* 모든 텍스트와 이미지의 출처는 위 블로그입니다.
* 결정 트리 (Decision Tree)
: 특정 기준(질문)에 따라 데이터를 구분하는 모델
- 한 번의 분기 때마다 변수 영역을 두 개로 구분
출처: ratsgo's blog
출처: 텐서 플로우 블로그
- 데이터를 가장 잘 구분할 수 있는 질문들로 기준을 나눔
- 지나치게 많이 하면 위처럼 오버피팅이 됨.
- 결정 트리에 아무 파라미터를 주지 않고 모델링하면 오버피팅이 됨
가지치기(Pruning)
: 오버피팅을 막기 위한 전략
- 트리의 최대 깊이나 터미널 노드의 최대 개수, or 한 노드가 분할하기 위한 최소 데이터 수 제한
- min_sample_split 파라미터를 조정하여 한 노드에 들어있는 최소 데이터 수를 정해줄 수 있음
ex. min_sample_split=10이라면, 한 노드에 10개의 데이터가 있을 경우 그 노드는 더 이상 분기 x
- max_depth를 통해 최대 깊이 지정 가능
ex. max_depth=4라면, 깊이가 4보다 크게 가지를 치지 않음
엔트로피(Entropy), 불순도(Impurity)
- 불순도(Impurity): 해당 범주 안에 서로 다른 데이터가 얼마나 섞여 있는지를 뜻함
출처: ratsgo's blog
- 위 그림에서 위쪽 범주는 불순도가 낮고, 아래쪽 범주는 불순도가 높다.
- 한 범주에 하나의 데이터만 있다면 불순도가 최소이고, 한 범주 안에 서로 다른 두 데이터가 정확히 반반이라면 불순도가 최대
- 결정트리는 불순도를 최소화하는 방향으로 학습을 진행함
- 엔트로피(Entropy): 불순도를 수치적으로 나타낸 척도
- 엔트로피가 높다=불순도가 높다 / 엔트로피가 낮다=불순도가 낮다
- 엔트로피가 1 = 불순도 최대 (한 범주 안에 서로 다른 데이터가 정확히 반반 있다.)
- 엔트로피가 0 = 불순도 최소 (한 범주 안에 하나의 데이터만 존재)
출처: 위 블로그
(Pi = 한 영역 안에 존재하는 데이터 가운데 범주 i에 속하는 데이터의 비율)
(예제)
출처: 위 블로그
- P_slow = 2/4 = 0.5
- P_fast = 0.5
->> 엔트로피: 1 (정확히 반반 있다.)
정보 획득 (Information gain)
: 분기 이전의 엔트로피에서 분기 이후의 엔트로피를 뺀 수치
- 엔트로피가 1인 상태에서 0.7로 바뀌었다면 정보 획득은 0.3
Information gain = entropy(parent) - [weighted average]entropy(children)
- entropy(parent): 분기 이전의 엔트로피
- entropy(children): 분기 이후의 엔트로피
- [weighted average]entropy(children): entropy(children)의 가중 평균
- 분기 이후 엔트로피에 대해 가중 평균을 하는 이유: 분기를 하면 범주가 2개 이상으로 쪼개지기 때문
- 범주가 1개라면 위 엔트로피 공식으로 바로 엔트로피 구할 수 있지만
- 범주가 2개 이상이라면 가중 평균을 활용해 분기 이후 엔트로피를 구함
- 결정 트리 알고리즘은 정보 획득을 최대화하는 방향으로 학습이 진행된다.
- 어느 feature의 어느 분기점에서 정보 획득이 최대화되는지 판단을 해 분기가 진행됨
(경사 기준 분기)
출처: 위 블로그
- steep은 총 3개이며 이 때 속도는 각각 slow, slow, fast
- flat은 총 2개이며 이 때 속도는 fast
--->>> entropy(flat) = 0
* steep으로 분기했을 때,
- slow는 2개 --> P_slow=2/3
- fast는 1개 --> P_fast=1/3
--->>> entropy(steep) = 0.9184 (공식 이용)
* 분기 이후 노드에 대한 가중평균은?
[weighted average] entropy(children) = weighted average of steep * entropy(steep) + weighted average of flat * entropy(flat)
= 3/4 * 0/9184 + 1/4 * 0
= 0.6888
Information gain = entropy(parent) - [weighted average] entropy(children)
= 1 - 0.688
= 0.3112
- 경사 feature를 기준으로 분기를 햇을 때 0.3112만큼의 정보 획득(information gain)이 있다는 뜻
(표면 기준 분기)
출처: 위 블로그
- bumpy는 총 2개이며 이 때 속도는 slow, fast
- smooth는 총 2개이며 이 때 속도는 slow, fast
-->> 하나의 범주에 서로 다른 데이터가 정확히 반반 있으므로 entropy(bumpy) = entropy(smooth) = 1
information gain = entropy(parent) - [weighted average] entropy(children)
= 1 - (2/4) * 1 - (2/4) * 1
= 0
- 즉, 표면을 기준으로 분기했을 때는 정보 획득이 전혀 x
(속도 제한 기준 분기)
출처: 위 블로그
- yes의 경우 slow, slow
- no의 경우 fast, fast
--->> entropy(yes) = entropy(no) = 0
즉, information gain = 1
- 경사, 표면, 속도제한 기준으로 분기를 했을 때 정보 획득은 각각 0.3112, 0, 1이다.
- 결정트리는 정보 획득이 가장 많은 방향으로 학습이 진행되므로 첫 분기점을 속도제한 기준으로 잡는다.
- 이런식으로 max_depth나 min_sample_split으로 설정한 범위까지 분기를 하게 된다.
이게 바로 결정트리의 전체적인 알고리즘 !!
처음 위 블로그로 결정 트리를 공부했을 때, 정보 획득 부분이 솔직히 전혀 이해가 가지 않았었다. 그러다 최근 학교 수업에서 배우고 다시 복습을 해보니 이해가 쏙쏙 .. 넘 재밌다 이런 공부 허허
from http://yeon22.tistory.com/125 by ccl(A) rewrite - 2021-11-03 19:26:38