Bayesian

各種規模公司的機車問題

  • September 15, 2013

我正在研究 Think Bayes(在此處免費:http: //www.greenteapress.com/thinkbayes/)並且正在進行練習 3.1。這是問題的摘要:

“一條鐵路的機車編號順序為 1..N。有一天你會看到一輛編號為 60 的機車。估計鐵路有多少機車。”

這個解決方案是通過似然函數和指數先驗找到的,如下所示:

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)

從概念上講,如果我們看到一個大於我們的假設之一(1…1000)的序列號,那麼每個較小的假設正確的可能性為零。其餘的假設有 1/number_of_trains 的機會向我們展示具有此編號的火車。

在我正在研究作者的練習中,然後添加了一些額外內容。這假設只有一家公司。然而,在現實生活中,您會同時擁有大小公司和大公司(兩者可能性相同)。但是,這意味著您更有可能看到大公司的火車,因為他們有更多的火車。

現在的問題是如何在似然函數中反映這一點?

這不是 Stack Overflow,所以我並不是真的在尋求編碼幫助,而是可能只是幫助我如何從似然函數的角度思考這個問題。

我首先詳細概述了兩家公司的方法,然後擴展到更多公司應該是直觀的(至少就可能性而言,先驗可能更棘手)。

假設有兩家公司AB,其中A有機車和B有機車。我們猜測(您可以隨時切換AB以保持此狀態)。該機車假設的總數是.

想像一下,你看到一輛帶有數字的機車. 可能性有以下三種情況:

  1. : 這不可能發生,所以可能性為零。
  2. :這台機車一定是A公司,所以只有一個機車有這個號碼。因此可能性是
  3. : 這個機車可以來自A也可以來自B,所以這個編號的機車有兩個。看到其中一個的可能性是.

作為一個快速的健全性檢查:看到任何數字的可能性是

.


一般會有(公司數+1)個案例,每個區間一個. 幸運的是,我們可以從不同的角度看待這個問題,發現我們需要的可能性實際上只是兩個數字:, 機車總數;和, 有編號的機車數量. 我們看到其中一個的可能性有多大機車,出機車?這將發生在在所有情況下,所以這個分數是可能性。在 Python 中,您可以使用兩個求和生成器來計算(甚至不必按公司規模排序)。如果Ns根據您的假設包含公司規模的列表(或元組),那麼這將給出看到帶有 number 的機車的可能性n

total_number_of_locomotives = sum(N for N in Ns)
number_of_locomotives_with_that_number = sum(1 for N in Ns if n<=N)
likelihood = (number_of_locomotives_with_that_number / total_number_of_locomotives)

請注意,該代碼也處理了一家公司的瑣碎案例(第一個總和將是,第二個總和將是 0 或 1,取決於是否).


對於先驗知識,齊夫定律可能是公司規模實際分佈的一個很好的起點。

引用自:https://stats.stackexchange.com/questions/70096

comments powered by Disqus