[데이터분석] 엔트로피(Entropy) 이해하기
- 인공지능 및 데이터과학/데이터분석 & 통계
- 2022. 1. 31.
보통 엔트로피라 하면 과학 분야에서 많이 쓰이는 말이지만, 통계학 혹은 데이터 분석쪽에서도 곧잘 쓰이는 용어이다. 일단 엔트로피를 가장 많이 활용하는 것 중 하나가 결정 트리(Decision Tree)이다. 결정 트리의 경우 우리가 엔트로피를 이해하고, 정보 이득(Information Gain)도 공식으로 풀어낼 수 있다면 충분히 결정 트리를 구현할 수 있을 정도이다.
엔트로피의 개념
엔트로피는 노드의 불순성(혹은 무작위성)을 나타내며, 1로 갈수록 불순하고, 0으로 갈수록 불순하지 않다는 의미이다. 여기서 불순하지 않다는 것은 잘 섞이지 않았다는 의미이다.
예를 들어, 백인 10명, 흑인 10명이 한 집단에 있다고 하였을 때, 특정 조건으로 이 집단을 2개의 집단으로 분리했다고 가정을 해보자.
이때 집단이 완벽히 백인과 흑인이 분리되었으면 엔트로피는 0이 된다. 반대로 백인 5명, 흑인 5명이 한집단씩 있다면 엔트로피는 1이 되며, 데이터가 불순하다라고 할 수 있다. 이처럼 엔트로피 공식으로 나온 데이터는 속성이 매우 잘 설계되었다 말할 수 있는 척도가 될 것이다.
엔트로피 설명 데이터
본 포스팅에서 쉽게 설명하기 위해서 아래와 같은 데이터로 설명을 해보도록 한다. 이 데이터는 KNN을 설명하기 위해서 쓴 이전 포스팅 내용인데 엔트로피 설명에 적합할 것 같아서 써보기로 하였다.
위에서 독립변수는 키와 몸무게 2개가 있고, 라벨 값으로 보직이라는 것이 존재한다. 결정 트리는 독립변수들의 값을 어떻게 설정해야 가장 최적의 모델을 나올 것인지를 계산하게 되는데 일단 키와 몸무게의 엔트로피를 알아보도록 한다.
엔트로피 공식
위 예시 데이터를 기준으로 우선 분류되기 전의 엔트로피 값을 계산해보면 총 row는 8개이고 헌병 4명, 그외 4명으로 이를 위 공식에 넣을 경우 다음과 같이 변경이 될 것이다.
-(4/8)log(4/8)-p(4/8)log(4/8)
위 내용을 Python으로 계산할 경우 아래와 같다
import math
a = 4
b = 4
entropy = -(math.log2(a/(a+b))*(a/(a+b)))-(math.log2((b/(a+b)))*(b/(a+b)))
print('entropy->', entropy)
entropy-> 1.0
현재의 데이터 기준으로 엔트로피를 보면 알 수 있지만 데이터가 매우 적절하게 잘 섞였다는 것을 알 수 있으며 이제 이 데이터를 기준으로 분류를 해보고 엔트로피를 구해보도록 한다.
값 분류 및 엔트로피 계산
몸무게 75이상
우선 몸무게가 75이상일 때를 기준으로 엔트로피를 구해보도록 한다. Yes의 경우, 헌병 값이 1명밖에 없고, 그외의 보직이 2명이 있으며, 당연히 No일 경우 헌병 3, 그외 2명이다.
Yes 조건 | No 조건 |
0.9182958340544896 | 0.9709505944546686 |
몸무게의 경우 위와 같이 엔트로피들이 0.91, 0.97이 나왔다. 이번에는 키를 기준으로 키가 180cm이 넘었을 때 엔트로피가 어떻게 되는지 확인해보도록 한다.
키 180cm 이상 조건
키의 경우, 몸무게 75보다 값이 좀더 한쪽으로 쏠린 값 즉, 불순하지 않는 값의 모양을 보인다. 위의 값의 엔트로피를 구하면
Yes | No |
0.8112781244591328 | 0.8112781244591328 |
둘다 0.81로 몸무게의 경우보다 더 유의미한 조건이라는 것을 알 수 있다. 엔트로피를 구했으면 이제 사실 어떤 값을 쓰는 것이 더 좋은지를 구해야 하는 차례가 있는데 엔트로피 이후의 단계를 정보 이득(Information Gain)이라 하며 아래 링크에서 확인할 수 있다.
[데이터분석] 정보 이득(Information Gain) 이해하기
연관포스팅
'인공지능 및 데이터과학 > 데이터분석 & 통계' 카테고리의 다른 글
[데이터분석] 파이썬(Python) 산점도(Scatter) 사용하기 (0) | 2022.09.26 |
---|---|
[데이터분석] 정보 이득(Information Gain) 이해하기(feat. 엔트로피) (0) | 2022.02.03 |
[Visualization] Python 히스토그램(histogram) 사용하기 (0) | 2022.01.12 |
[Python] 판다스(Pandas)로 데이터 확인 및 기초통계 하기 (0) | 2021.05.28 |
확률의 함정을 간파, 베이즈 정리(Bayes' Theorem) (2) | 2020.12.13 |