Резюме:
Потому что он представляет собой среднее общее количество совершенных вопросов, на которые вам нужно получить ответы, чтобы полностью устранить все неопределенности в данных, которые вы еще не видели. Идеальный вопрос с возможными ответами - это тот, который, если ответить, пространство возможностей будет уменьшено в раз.nn
Пример:
Предположим, что я бросил гранный кубик, и вы должны были предсказать его исход. Пространство возможностей . Вы могли бы задать мне такие вопросы, как этот бинарный "результат ?" (ответ либо да, либо нет, т.е. ), и мой ответ может быть «nopies!». Тогда пространство возможностей всего . Так что этот вопрос не очень хороший вопрос.661n=21
В качестве альтернативы, вы можете задать лучшие вопросы, такие как этот превосходный бинарный вопрос «больше ?», И мой ответ будет «Yeppies!» - тогда бум, пространство возможностей сокращается вдвое! Т.е. осталось всего кандидата (из первоначально 6). Черт, да, чувак.3.56/2=3
Теперь предположим, что вы продолжаете рекурсивно задавать больше этих хороших вопросов, пока не дойдете до случая, когда пространство возможностей имеет только возможность, благодаря которой - по определению - не остается двусмысленности (вы знаете ответ).1
Давай сделаем это:
- 6 возможностей. В: Является ли результат ? A: Да.>3.5
- 6/2=3 возможности. Q: результат ? A: Да.≥5
- 6/2/2=1.5 осталось возможностей. Q: результат ? A: Да.=6
Вы заключаете, что результат должен быть № , и вам нужно было только задать бинарных вопроса. Т.е.63ceil(log2(6))=ceil(2.58)=3
Теперь, очевидно, количество бинарных вопросов всегда является натуральным числом. Так почему же энтропия Шеннона не использует функцию ? Потому что на самом деле выкладывается среднее количество хороших вопросов, которые нужно задать.ceil
Если вы повторите этот эксперимент (написав код Python), вы заметите, что в среднем вам нужно будет задать идеальных бинарных вопросов.2.58
Конечно, если вы задаете бинарные вопросы, вы устанавливаете базу журнала на это. Так что здесь потому что наши вопросы были двоичными. Если вы задаете вопросы, которые ожидают возможных ответов, для базы вы установите вместо , то есть .log2(...)nn2logn(...)
Моделирование:
import random
total_questions = 0
TOTAL_ROUNDS = 10000
for i in range(0,TOTAL_ROUNDS):
outcome = random.randrange(1,7)
total_questions += 1
if outcome > 3.5:
total_questions += 1
if outcome >= 5:
total_questions += 1
if outcome == 5:
pass
else:
# must be 6! no need to ask
pass
else:
# must be 4! no need to ask
pass
else:
total_questions += 1
if outcome >= 2:
total_questions += 1
if outcome == 2:
pass
else:
# must be 3! no need to ask
pass
else:
# must be 1! no need to ask
pass
print 'total questions: ' + str(total_questions)
print 'average questions per outcome: ' + str(total_questions/float(TOTAL_ROUNDS))
Результаты:
total questions: 26634
average questions per outcome: 2.6634
Святой чувак .2.6634≠log2(6)≠2.58
В чем дело? Это почти близко, но не совсем близко, как я надеялся. Это PRNG Питона пытается сказать медленную шутку? Или Шеннон ошибается? Или это - не дай Бог - мое понимание неверно? В любом случае ПОМОГИТЕ. SOS уже чувак.