Özet:
Çünkü henüz görmediğiniz bir verideki tüm belirsizlikleri tam olarak çözmek için cevaplamanız gereken ortalama toplam mükemmel soru sayısını temsil eder . muhtemel cevapları olan mükemmel bir soru , cevaplandığında, olasılıkların alanını n azaltacağı sorusudur.nn kere .
Örnek:
Diyelim ki yüzlü bir zar atmıştım ve sonucunu tahmin edecektiniz. Olasılıkların alanı 6'dır . Bana bu ikilik "sonuç 1 nedir?" Gibi sorular sorabilirsin. (Cevap evet ya da hayır, yani n = 2 ) ve cevabım "hayır" olabilir. O zaman sadece olanakları ile uzayın uzayı 1661n=21 . Yani bu soru sormak için iyi bir soru değil.
Alternatif olarak, "Bu daha büyüktür böyle bu üstün ikili soru olarak iyi sorular, sorabilirsiniz ?" Ve cevabım olurdu "yeppies!" - o zaman patlama, olasılıkların alanı yarı yarıya azalır! Yani sadece orada 6 / 2 = 3 aday (başlangıçta 6 üzerinden gösterilmiştir). Cehennem evet dostum.3.56/2=3
Şimdi, olasılıkların yalnızca olasılık olduğu durumda olan ve hangi tanımla - belirsizlik bırakmadığı (o zaman cevabı biliyorsunuz) olan duruma ulaşana kadar bu iyi soruların tekrarını tekrar tekrar sorduğunuzu varsayalım .1
Bunu yapalım:
- olasılık. S: Sonuç > 3.5 mi? A: Evet.6>3.5
- olasılık bıraktı. S: sonuç ≥ 5 mi? A: Evet.6/2=3≥5
- olasılık bıraktı. S: sonuç = 6 mı? A: Evet.6/2/2=1.5=6
Sonucun numara olması gerektiği sonucuna varıyorsunuz ve sadece 3 ikili soru sormanız gerekiyordu . Yani c , e i l ( log 2 ( 6 ) ) = C e ı l ( 2.58 ) = 363ceil(log2(6))=ceil(2.58)=3
Şimdi, açıkçası, ikili soruların sayısı her zaman doğal bir sayıdır. Peki neden Shannon entropi kullanmaz fonksiyonunu? Çünkü aslında sorulması gereken ortalama iyi soru sayısını ortaya koyuyor.ceil
Bu deneyi tekrarlarsanız (bir Python kodu yazarak), ortalama olarak mükemmel ikili soru sormanız gerekeceğini fark edeceksiniz .2.58
Elbette, eğer ikili sorular sorarsanız, kütüğün temelini buna ayarlarsınız. Yani burada Sorularımız ikili çünkü. Beklediğiniz soruları sorarsanız n birçok olası cevaplar, size tabanını ayarlayacaktır n yerine 2 yani log n ( . . . ) .log2(...)nn2logn(...)
Simülasyon:
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))
Sonuçlar:
total questions: 26634
average questions per outcome: 2.6634
Holy molly Dude .2.6634≠log2(6)≠2.58
Sorun nedir? Bu var hemen hemen yakın ama umduğu gibi değil gerçekten yakın. Python'un PRNG'si yavaş bir şaka demeye mi çalışıyor? Yoksa Shannon yanılıyor mu? Yoksa bu yasak mı - anlayışım yanlış mı? Her iki şekilde de YARDIM. SOS zaten ahbap.