정보 엔트로피가 1보다 큰 이유는 무엇입니까?


11

엔트로피를 계산하기 위해 다음 기능을 구현했습니다.

from math import log

def calc_entropy(probs):
    my_sum = 0
    for p in probs:
        if p > 0:
            my_sum += p * log(p, 2)

    return - my_sum

결과:

>>> calc_entropy([1/7.0, 1/7.0, 5/7.0])
1.1488348542809168
>>> from scipy.stats import entropy # using a built-in package 
                                    # give the same answer
>>> entropy([1/7.0, 1/7.0, 5/7.0], base=2)
1.1488348542809166

엔트로피는 0과 1 사이이며 0은 매우 확실하고 1은 매우 불확실하다는 것을 이해했습니다. 엔트로피 측정 값이 1보다 큰 이유는 무엇입니까?

로그베이스의 크기를 늘리면 엔트로피 측정 값이 작아 지지만베이스 2가 표준이라고 생각하므로 이것이 문제라고 생각하지 않습니다.

나는 명백한 것을 놓치고 있어야하지만, 무엇?


기지가 엔트로피의 종류에 의존하지 않습니까? 2 Shannon Shannon 엔트로피와 자연 로그 통계 역학 엔트로피가 아닌가?
Alexis

@Alexis, 그러나 Shannons의 엔트로피 범위는 0과 1 사이입니까?
Akavall

1
아니요 : Shannon 엔트로피는 음이 아닙니다.
Alexis

2
엔트로피가 2보다 많은 이벤트가있는 경우 엔트로피가 1보다 크면 아무런 문제가 없으며 엔트로피의 값은 이벤트가 이진 인 두 경우 (2 개의 이벤트가있는 경우)에만 0과 1 사이입니다.
Akavall

답변:


17

엔트로피확률 과 같지 않습니다 .

엔트로피는 랜덤 변수의 "정보"또는 "불확실성"을 측정합니다. 베이스 2를 사용하는 경우 비트 2로 측정됩니다. 변수에 둘 이상의 정보 비트가있을 수 있습니다.

이 예에서, 하나의 샘플은 약 1.15 비트의 정보를 "포함한다". 다시 말해, 일련의 샘플을 완벽하게 압축 할 수 있다면 평균적으로 샘플 당 많은 비트가 필요합니다.


감사합니다. 나는 그것을 얻는다고 생각하지만 확인하고 싶다. 나는 다음 진술이 맞습니까? 결과가 두 개 뿐인 경우 얻을 수있는 대부분의 정보는 1 비트이지만 결과가 2 개 이상인 경우 1 비트 이상의 정보를 얻을 수 있습니다.
Akavall

예. (예를 들어, 샘플 당 2 개의 공정한 동전 던지기 로 생성 될 수있는 4 개의 균일하게 분포 된 결과를 고려하십시오 .)
CL.

또한 엔트로피의 범위는 이진 분류 문제의 경우 0-1부터 로그베이스 2k까지입니다. 여기서 k는 보유한 클래스 수입니다.
MichaelMMeskhi

13

엔트로피의 최대 값은 logk, 어디 k사용중인 카테고리 수입니다. 숫자 값은 자연스럽게 사용중인 로그의 기초에 따라 다릅니다.

질문에서와 같이 기본 2 로그를 예로 사용하십시오. log21 이다 0log22 이다 1보다 큰 결과 1 카테고리의 수가 1 또는 2. 보다 큰 값1 그것을 초과하면 잘못 될 것입니다 log2k.

이를 고려하여 엔트로피를 스케일링하는 것이 일반적입니다. logk결과가 01,


그것에 대해 몰랐습니다. 감사합니다. 따라서 기본적으로 로그의 밑은 샘플의 길이와 같고 더 크지 않습니까?
Fierce82

2
샘플의 길이도 중요하지 않습니다. 카테고리가 몇 개입니까?
닉 콕스

간단히 말하면, 그것은 가능한 범주의 수 또는 엔트로피를 계산하는 범주의 수입니까? 예. 10 개의 가능한 범주가 있지만 엔트로피를 계산하는 시스템에 2 개의 범주를 나타내는 3 개의 샘플이 있습니다. 이 경우 k는 2입니까?
eljusticiero67

실제로 발생하지 않는 범주는 확률 0을 관찰했으며 엔트로피 결과에 영향을 미치지 않습니다. 그것은 더 엄격하게 정당화 될 수있는 강력한 협약입니다.0log0는 0으로 간주됩니다 (여기서 로그의 기초는 중요하지 않습니다).
Nick Cox

-2

이것을 시도하십시오 (베이스를 참고하십시오 e) :

from math import log

def calc_entropy(probs):
    my_sum = 0
    for p in probs:
        if p > 0:
            my_sum += p * log(p)

    return - my_sum

기부:

>>> calc_entropy([1/7.0, 1/7.0, 5/7.0])
0.796311640173813

나는 그것을 할 수 있다는 것을 알고 있지만, log base 2를 사용하면 0과 1 사이의 엔트로피 값을 산출해야한다는 인상을 받았다.
Akavall

사용 log2 일련의 불확실성을 특징 짓는 데 필요한 비트 수를 측정 p-값. 참조 xkcd.com/936en.wikipedia.org/wiki/Entropy_%28information_theory%29
알렉시스

이 답변은 nats로 표현 된 엔트로피가 1그러나 그것이 사실이 아니기 때문에 귀하가 전달하고자하는 정보인지 의심합니다.
whuber
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.