a decision tree -> ask a question => classifies the person based on the answer
= 스무고개
👀 이 때, 분류는 명목형(category), 숫자형 모두 가능!
= 가지를 치는 방법 => 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가 된다는 것!
같은 현상을 다른 수학적 공식으로 설명한 것
큰 차이가 없음
복잡한 트리는 과적합 가능성을 높이기 때문에 복잡도를 낮춰 일반화를 유도 = 의도적으로 작은 나무를 만드는 것(regularization)
이런 경우 자주 사용하는 하이퍼파라미터는
min_samples_split
(노드에서 분기(분할점)를 만들 때, 최소한 몇 개의 sample이 노드에 있는지 확인)min_samples_leaf
(마지막 leaf 노드에 최소한 몇 개의 sample이 존재해야 하는지 지정)max_depth
(트리의 전체적인 깊이를 설정) 등이 있음중복 코드를 최소화하면서, 간결하게 모델을 만들 수 있음
named_step()
: 괄호 안에 있는 step에 접근할 수 있도록 함❗️ pipeline에서는 데이터를 학습할 때, fit_transform
이 아니라 fit
을 사용하는 이유?
pipeline의 score 함수에는 transform이 이미 들어가있기 때문!
distance-based model | rule-based model |
---|---|
거리 = error(y - y hat) | 분류 -> A인가 B인가에 대한 확률 |
e.g. 회귀(regression) | e.g. 의사결정모델(decision tree) |
error 와의 거리를 최소화하는 것을 목표로 하는 distance-based model의 경우 그 거리의 scale을 통일하는 scaler가 필요함
BUT, 의사결정모델의 경우 rule-based model이라 거리가 의미가 없기 때문에 scaler를 쓸 필요가 없음
결측치 handling -> "전처리" 단계에서 데이터가 가지고 있는 분포를 보고 결정하는 것
-> 내가 선택하려고 하는 모델에 따라 결측치 handling 방법을 달리하는 것은 바람직하지 않음 b.c. 모델 선택은 전처리 이후에 model development 과정에서 이루어지는 것이기 때문
회귀는 수학적인 증명들을 이해해서 추상적인 것을 잡아내는 것이지만 결정트리는 좀 더 직관적으로 이해할 수 있음
참고자료
모델은 계산은 정확하게 하지만, 그 것이 유의미한 결과인지 판단해주거나, 잘못을 알려주지 않는다 -> 전처리 과정이 중요!
-> precision(true positive), recall을 가지고 수식 만든 것 (이 둘은 trade-off 관계 - FP <-> FN의 trade-off 관계)