Я реализовал следующую функцию для вычисления энтропии:
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 была стандартной, поэтому я не думаю, что это проблема.
Должно быть, я упускаю что-то очевидное, но что?
mathematical-statistics
python
entropy
Akavall
источник
источник
Ответы:
Энтропия - это не то же самое, что вероятность .
Энтропия измеряет «информацию» или «неопределенность» случайной величины. Когда вы используете базу 2, она измеряется в битах; и в переменной может быть более одного бита информации.
В этом примере один образец «содержит» около 1,15 бит информации. Другими словами, если бы вы смогли идеально сжать серию семплов, вам понадобилось бы в среднем столько битов на семпл.
источник
Максимальное значение энтропии равно , где - количество категорий, которые вы используете. Его числовое значение будет естественно зависеть от базы логарифмов, которые вы используете.klogk k
Используя в качестве примера логарифмы с основанием 2, как в вопросе: равно а равно , поэтому результат, превышающий , определенно неверен, если число категорий равно или . Значение больше будет неправильным, если оно превысит .0 log 2 2 1 1 1 2 1 log 2 klog21 0 log22 1 1 1 2 1 log2k
Ввиду этого довольно часто масштабировать энтропию на , так что результаты тогда падают между и ,0 1logk 0 1
источник
Попробуйте это (обратите внимание на базу ):e
Предоставление:
источник