: 어떤 입력변수를 이용하여 어떻게 분리하는 것이 목표변수의 분포를 가장 잘 구별해 주는지에 대한 기준
• 목표변수의 분포를 구별하는 정도 : 순수도 or 불순도
Scikit learn 공식문서에서 정의하는 criterion
criterion{“gini”, “entropy”, “log_loss”}, default=”gini”
The function to measure the quality of a split. Supported criteria are “gini” for the Gini impurity and “log_loss” and “entropy” both for the Shannon information gain, see Mathematical formulation. Note: This parameter is tree-specific.
지니불순도라는 것은 데이터 분석에서 흔히 의사결정나무에서 사용되는 클래스개수에 따른 케이스들의 불순한 정도를 나타내는 척도이다.
지니불순도가 필요한 이유는 의사결정을 하는데 있어서 최적의 분류를 위한 결정을 계속해서 맞이하는데 이 결정에 사용되기 때문이다. 이 변수로 인해서 분류를 거쳤을 때 지니불순도가 얼마나 되는가? 를 생각할 수 있게된다.
확률 분포가 가지는 정보의 확신도 혹은 정보량을 수치로 표현한 것이다. 확률 분포에서 특정한 값이 나올 확률이 높아지고 나머지 값이 나올 확률은 낮아진다면 엔트로피가 작아진다. 반대로 여러가지 값이 나올 확률이 대부분 비슷한 경우에는 엔트로피가 높아진다. 엔트로피는 확률 분포의 모양이 어떤지를 나타내는 특성 값 중 하나로 볼 수도 있다. 확률 또는 확률 밀도가 특정 값에 몰려있으면 엔트로피가 작다고 하고 반대로 여러가지 값에 골고루 퍼져 있다면 엔트로피가 크다고 한다.
예시)
백인 10명, 흑인 10명이 한 집단에 있다고 하였을 때 , 특정 조건으로 이 집단을 2개의 집단으로 분리했다고 가정
이때 집단이 완벽히 백인과 흑인이 분리되었으면 엔트로피는 0이 된다. 반대로 백인 5명, 흑인 5명이 한집단씩 있다면 엔트로피는 1이 되며, 데이터가 불순하다라고 할 수 있다.
결과 : 0.9710.
A모델
B모델
두 모델의 성능이 같다
라고 한다면 A모델이 억울함 → 기껏 열심히 공부했는데 의지 상실정답 | 1번 예측 확률 | 2번 예측 확률 | 3번 예측 확률 |
---|---|---|---|
2 | 0.31 | 0.66 | 0.03 |
3 | 0.03 | 0.27 | 0.7 |
1 | 0.75 | 0.22 | 0.03 |
# 직접 계산
import numpy as np
answer = np.array([2, 3, 1])
probability = array([[0.31, 0.66, 0.03],
[0.03, 0.27, 0.7 ],
[0.75, 0.22, 0.03]])
res = 0
for ans, prob in zip(answer, probability):
temp = -np.log(l[ans - 1])
res += temp
res / len(answer)
>>> 0.353290820117393
# sklearn 활용 계산
from sklearn.metrics import log_loss
sklearn_log_loss = log_loss(answer, probability)
sklearn_log_loss
>>> 0.353290820117393
sklearn.tree.DecisionTreeClassifier
sklearn.ensemble.RandomForestClassifier
멋사 AI스쿨 8조 팀