[AI Bootcamp] N221 - Decision Trees

HYUNG JIN·2021년 8월 17일
0

AI Bootcamp

목록 보기
14/17
post-thumbnail

Session Review

Decision Trees(의사결정나무)

a decision tree -> ask a question => classifies the person based on the answer
= 스무고개

👀 이 때, 분류는 명목형(category), 숫자형 모두 가능!

용어정리

  • Root Node (The Root): 모델의 가장 최상단 노드
  • Internal Nodes (Nodes): 모델을 연결하는 노드 (화살표가 위 아래로 연결됨(top-down 형태))
  • Leaf Nodes (Leaves, terminal): 분류 완료된 노드 (위쪽에서 연결된 화살표는 있으나, 아래쪽으로 뻗어나가는 화살표는 없음)

결정트리 학습 알고리즘

= 가지를 치는 방법 => Gini, Entropy

Entropy: '얼마나 탁하냐'에 대한 수치
-> Entropy maximum인 점: 50% / 50%

❗️feature importance: feature들을 데이터를 잘 설명하는 중요도 순으로 나열
-> 결정트리 모델에서는 information gain을 최대화(entropy가 감소하는 방향)하는 것으로 분류!

즉, 각각의 feature과 target 간의 불순도를 따로따로 확인한 후, 가장 불순도가 낮은 feature를 Root Node로 지정
BUT, 그 어떤 feature도 100% 설명력을 가질수는 없음(feature 하나 가지고, target을 완벽하게 설명할 수 없음) = 모든 feature는 impure함
=> 각 feature의 impurity를 계산하여 Root Node로 지정

❗️어디까지 분류해야 하는가?
Gini 불순도 = 분류가 틀릴 확률
-> Gini 불순도가 가장 낮은 feature (impurity가 가장 작은 것) 선택

👀 tree를 만드는 과정에서 나온 분류를 internal node로 둘 것인가, 아니면 여기서 분류를 마치고 leaf node로 만들 것인지 또한 Gini 계수로 판단 -> 만약 이를 leaf node로 두었을 때, 이 데이터를 더 잘 설명한다고 하면, 굳이 다른 feature로 나누지 않고, 분류를 끝냄!

분류하기 전 Gini 불순도 계산 방법(부모 노드) - A, B로 분류한 후 Gini 불순도 계산 방법(자식 노드들의 Gini Impurity(가중평균합)

다시 말하자면, 부모 노드의 Gini Impurity보다 자식노드들의 Gini Impurity가 커지면, 더 이상 트리를 나눈지 않고, 부모 노드가 마지막 leaf node가 된다는 것!

❓ Gini vs. Entropy

같은 현상을 다른 수학적 공식으로 설명한 것
큰 차이가 없음

장점

  • 해석하기 쉽다 (분류과정을 직관적으로 파악 가능(blue-print))
  • 회귀, 분류 문제 모두에서 적용이 가능하다
  • 회귀모델과 달리 특성들 간의 상관관계(상호작용)에 큰 영향을 받지 않음

단점

  • 샘플에 민감하여 트리 고저가 자주 바뀜 -> 해석도 바뀜
  • 과적합이 발생하기 쉽다

트리의 과적합 해결방법

복잡한 트리는 과적합 가능성을 높이기 때문에 복잡도를 낮춰 일반화를 유도 = 의도적으로 작은 나무를 만드는 것(regularization)

이런 경우 자주 사용하는 하이퍼파라미터는

  • min_samples_split(노드에서 분기(분할점)를 만들 때, 최소한 몇 개의 sample이 노드에 있는지 확인)
  • min_samples_leaf(마지막 leaf 노드에 최소한 몇 개의 sample이 존재해야 하는지 지정)
  • max_depth(트리의 전체적인 깊이를 설정) 등이 있음

Pipeline

중복 코드를 최소화하면서, 간결하게 모델을 만들 수 있음

  • named_step(): 괄호 안에 있는 step에 접근할 수 있도록 함

❗️ pipeline에서는 데이터를 학습할 때, fit_transform이 아니라 fit을 사용하는 이유?
pipeline의 score 함수에는 transform이 이미 들어가있기 때문!

Food for Thought

모델 분류

distance-based modelrule-based model
거리 = error(y - y hat)분류 -> A인가 B인가에 대한 확률
e.g. 회귀(regression)e.g. 의사결정모델(decision tree)

Decision Tree가 scaler를 필요로 하지 않는 이유?

error 와의 거리를 최소화하는 것을 목표로 하는 distance-based model의 경우 그 거리의 scale을 통일하는 scaler가 필요함
BUT, 의사결정모델의 경우 rule-based model이라 거리가 의미가 없기 때문에 scaler를 쓸 필요가 없음

❗️모델에 따라 결측치 handling 방법이 달라지나요?

결측치 handling -> "전처리" 단계에서 데이터가 가지고 있는 분포를 보고 결정하는 것
-> 내가 선택하려고 하는 모델에 따라 결측치 handling 방법을 달리하는 것은 바람직하지 않음 b.c. 모델 선택은 전처리 이후에 model development 과정에서 이루어지는 것이기 때문

❓decision tree vs. logistic regression

회귀는 수학적인 증명들을 이해해서 추상적인 것을 잡아내는 것이지만 결정트리는 좀 더 직관적으로 이해할 수 있음
참고자료

모델은 고-급 계산기

모델은 계산은 정확하게 하지만, 그 것이 유의미한 결과인지 판단해주거나, 잘못을 알려주지 않는다 -> 전처리 과정이 중요!

F1 score

-> precision(true positive), recall을 가지고 수식 만든 것 (이 둘은 trade-off 관계 - FP <-> FN의 trade-off 관계)

과제 참고사항

  1. Kaggle 대회는 하루에 5번만 정답 제출이 가능
  2. 모델링 과정에서 결측치 처리를 위해 row 를 임의로 drop 하게 되면, 답안 제출이 되지 않습니다. (row 수 일치하지 않는다는 오류가 뜰 거예요) -> 따라서 결측치 처리를 위해 imputer 를 사용.
  3. 캐글 참여를 위해서는 무엇보다 수강생 분들이 캐글 계정을 만드는 것이 먼저

❓decision regression이란?

profile
Always stay confident

0개의 댓글