Почему энтропия информации больше 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 была стандартной, поэтому я не думаю, что это проблема.

Должно быть, я упускаю что-то очевидное, но что?

Akavall
источник
Разве база не зависит от вида энтропии? Разве не энтропия Шеннона базы 2 и статистическая механика натуральной логарифмической энтропии?
Алексис
@ Алексис, но разве энтропия Шеннона не находится в диапазоне от 0 до 1?
Akavall
1
Нет: энтропия Шеннона неотрицательна.
Алексис
2
Кажется, нет ничего плохого в том, что энтропия больше 1, если у меня более двух событий, а значение энтропии находится в диапазоне от 0 до 1 только в особом случае, когда мои события являются двоичными (у меня есть два события).
Akavall

Ответы:

17

Энтропия - это не то же самое, что вероятность .

Энтропия измеряет «информацию» или «неопределенность» случайной величины. Когда вы используете базу 2, она измеряется в битах; и в переменной может быть более одного бита информации.

В этом примере один образец «содержит» около 1,15 бит информации. Другими словами, если бы вы смогли идеально сжать серию семплов, вам понадобилось бы в среднем столько битов на семпл.

CL.
источник
Благодарю вас. Я думаю, что понимаю, но я хочу убедиться. Я следующее утверждение верно? Если у меня есть только два результата, то большая часть информации, которую я могу получить, составляет 1 бит, но если у меня больше 2 результатов, я могу получить больше, чем 1 бит информации.
Akavall
Да. (Например, рассмотрим четыре равномерно распределенных результата, которые могут быть получены двумя точными бросками монет за образец.)
CL.
Чтобы добавить к этому, энтропия колеблется от 0-1 для задач двоичной классификации и от 0 до логического значения базы 2 k, где k - количество классов, которые у вас есть.
MichaelMMeskhi
13

Максимальное значение энтропии равно , где - количество категорий, которые вы используете. Его числовое значение будет естественно зависеть от базы логарифмов, которые вы используете.klogkk

Используя в качестве примера логарифмы с основанием 2, как в вопросе: равно а равно , поэтому результат, превышающий , определенно неверен, если число категорий равно или . Значение больше будет неправильным, если оно превысит .0 log 2 2 1 1 1 2 1 log 2 klog210log2211121log2k

Ввиду этого довольно часто масштабировать энтропию на , так что результаты тогда падают между и ,0 1logk01

Ник Кокс
источник
не знал об этом, спасибо. Таким образом, основа логарифма должна быть равна длине выборки, а не больше?
Fierce82
2
Длина образца тоже не имеет значения. Это сколько у вас категорий.
Ник Кокс
просто чтобы уточнить, это k количество возможных категорий или количество категорий, для которых вы рассчитываете энтропию? например. У меня есть 10 возможных категорий, но есть 3 выборки, представляющие 2 категории в системе, для которой я рассчитываю энтропию. К в этом случае 2?
eljusticiero67
Категории, которые не встречаются на практике, имеют нулевую вероятность и не влияют на результат энтропии. Это строгое соглашение, которое может быть более строго обосновано, что следует принимать равным нулю (основание логарифмов здесь несущественно). 0log0
Ник Кокс
-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
Alexis
источник
Я знаю, что могу это сделать, но у меня сложилось впечатление, что использование логарифмической базы 2 также должно давать значение энтропии от 0 до 1. Может ли логарифмическая база 2 использоваться только при наличии двух вероятностей?
Akavall
Использование измеряет количество битов, необходимое для характеристики неопределенности ряда значений . См. Xkcd.com/936 и en.wikipedia.org/wiki/Entropy_%28information_theory%29 рlog2p
Алексис
Этот ответ предполагает, что энтропия, выраженная в nats, не должна превышать , но я сомневаюсь, что это информация, которую вы намеревались донести, потому что это просто неправда. 1
whuber