Saya sedang mengerjakan Think Bayes (gratis di sini: http://www.greenteapress.com/thinkbayes/ ) dan saya sedang berolahraga 3.1. Berikut ringkasan masalahnya:
"Sebuah kereta api memberi nomor lokomotifnya dalam urutan 1..N. Suatu hari kamu melihat lokomotif dengan nomor 60. Perkirakan berapa banyak lokomotif yang dimiliki kereta api."
Solusi ini ditemukan dengan fungsi kemungkinan dan eksponensial sebelumnya seperti:
class Train(Suite):
def __init__(self, hypos, alpha=1.0):
# Create an exponential prior
Pmf.__init__(self)
for hypo in hypos:
self.Set(hypo, hypo**(-alpha))
self.Normalize()
def Likelihood(self, data, hypo):
if hypo < data:
return 0
else:
return (1.0/hypo)
Secara konseptual ini dikatakan, jika kita melihat jumlah kereta yang lebih besar dari salah satu hipotesis kami (1 ... 1000) maka setiap hipotesis yang lebih kecil memiliki peluang nol untuk menjadi benar. Sisa hipotesis memiliki peluang 1 / number_of_trains untuk menunjukkan kepada kami kereta dengan nomor ini.
Dalam latihan saya bekerja pada penulis kemudian menambahkan sedikit tambahan. Ini mengasumsikan hanya ada satu perusahaan. Namun dalam kehidupan nyata Anda akan memiliki campuran perusahaan besar dan kecil dan perusahaan besar (keduanya sama-sama kemungkinan). Namun, ini berarti Anda lebih mungkin melihat kereta dari perusahaan yang lebih besar karena mereka akan memiliki lebih banyak kereta.
Sekarang pertanyaannya adalah bagaimana mencerminkan hal ini dalam fungsi kemungkinan?
Ini bukan Stack Overflow jadi saya tidak benar-benar meminta bantuan pengkodean, tetapi mungkin hanya membantu tentang bagaimana saya berpikir tentang masalah ini dalam hal fungsi kemungkinan.
sumber
Jawaban:
Saya pertama kali menguraikan pendekatan untuk dua perusahaan secara rinci, ekstensi untuk lebih banyak perusahaan kemudian harus intuitif (setidaknya untuk kemungkinan, yang sebelumnya bisa lebih rumit).
Bayangkan ada dua perusahaan A dan B , di mana A memiliki lokomotif dan B memiliki lokomotif . Kami menganggap (Anda selalu dapat beralih A dan B untuk membuat penahanan ini). Jumlah total untuk hipotesis lokomotif itu adalah .NA NB NA≥NB Ntot=NA+NB
Bayangkan Anda melihat lokomotif dengan nomor . Ada tiga kasus untuk kemungkinan:n
Sebagai pemeriksaan kewarasan cepat: Kemungkinan untuk melihat angka sama sekali adalah .
Secara umum, akan ada (jumlah perusahaan + 1) kasus, satu untuk setiap interval . Untungnya, kita dapat melihat masalah dari sudut yang berbeda dan melihat bahwa yang kita butuhkan untuk kemungkinan sebenarnya hanya dua angka: , jumlah total lokomotif; dan , jumlah lokomotif yang memiliki nomor . Seberapa besar kemungkinan kita melihat salah satu lokomotif , di luar lokomotif ? Ini akan terjadi di dari semua kasus, jadi fraksi ini adalah kemungkinannya. Dengan Python, Anda dapat menghitung ini dengan dua generator jumlah (dan Anda bahkan tidak perlu memesan perusahaan berdasarkan ukuran). JikaNsaya< n ≤Ni + 1 Nt o t Nn n Nn Nt o t NnNt o t
Ns
berisi daftar (atau tuple) ukuran perusahaan sesuai dengan hipotesis Anda, maka ini akan memberikan kemungkinan untuk melihat lokomotif dengan nomorn
:Perhatikan bahwa kasus sepele dengan satu perusahaan juga ditangani oleh kode ini (jumlah pertama hanya akan menjadi , jumlah kedua akan menjadi 0 atau 1, tergantung pada apakah ).N n ≤ N
Bagi para prior, hukum Zipf bisa menjadi titik awal yang baik untuk distribusi ukuran perusahaan yang realistis.
sumber
Likelihood(data=60, hypo=60)
danLikelihood(data=60, hypo=1000)
evaluasi dengan nilai yang sama. Jadi jika distribusi sebelumnya seragam, posterior juga akan seragam (minus nilai untuk kemungkinan 0)Saya tidak akan menganalisis kode, tetapi di bawah ini solusinya.
Membiarkan
Kemudian
Tetapi
Mulai sekarang, kita asumsikan bahwa .N≥ 60
Sekarang kita harus memilih P (N), kalau tidak kita macet. Karena kita bahkan tidak tahu urutan besarnya P (N), masuk akal untuk mengasumsikan bahwa didistribusikan secara seragam antara 0 dan beberapa (yaitu probabilitas bahwa sama dengan probabilitas bahwa ). Menjamu N_ adalah tugas yang sulit, tetapi dari pengetahuan saya sebelumnya tentang kereta api dan lokomotif, saya dapat berasumsi bahwa .catatanN catatanNmaks 102≤ N<103 103≤ N<104 Nmaks Nmaks≫ 60
Distribusi seragam dari berarti bahwa , di mana c adalah konstanta independen pada N.catatanN
Mengganti ini dengan rumus sebelumnya, kita memiliki:
Tetapi
Sekarang kita punya
Berapa nilai median N? Biarlah , laluNmed
Jika yang kita butuhkan adalah ekspektasi matematis daripada median, maka
Dari apa yang saya ketahui tentang jalur kereta api, harus antara dan , jadi E (N) berada di suatu tempat antara 170 dan 600.Nmaks 103 106
sumber