さまざまな規模の企業の機関車の問題


9

私は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つより大きいトレイン番号(1 ... 1000)が表示された場合、小さい仮説すべてが正しい可能性がゼロであることを示しています。残りの仮説には、1 / number_of_trainsの確率でこの番号の列車が表示されます。

私が作成者に取り組んでいる演習では、少し余分なものを追加します。これは、会社が1つしかないことを前提としています。ただし、実際には、大企業と中小企業、および大企業(どちらも同じくらい可能性があります)が混在しています。ただし、これは、大企業の列車の方が多いため、大企業の列車を見る可能性が高くなることを意味します。

ここで問題は、これを尤度関数にどのように反映するかです。

これはスタックオーバーフローではないので、実際にコーディングのヘルプを求めているのではなく、尤度関数の観点からこの問題についてどのように考えるかについて単に助けているだけかもしれません。


同じ問題は、Mostellerによる確率の50の挑戦的な問題にもあります。本は広く入手可能です。ベイズはすぐに正しいとは思いません。

本@Hoganを購入しましたが、他の会社が混在しているという部分は含まれていません。
ジャスティンボゾニエ2013年

回答:


8

私は最初に2つの会社のアプローチを詳細に概説しています。さらに多くの会社への拡張は直感的である必要があります(少なくとも可能性のために、以前の会社はよりトリッキーになる可能性があります)。

ABの 2つの会社があり、Aには機関車があり、Bには機関車があるとします。とます(ABをいつでも切り替えることができます)。その機関車の仮説の総数はです。NANBNANBNtot=NA+NB

番号機関車を想像してください。可能性には3つのケースがあります。n

  1. NA<n:これは起こり得ないため、可能性はゼロです。
  2. NB<nNA:この機関車はAのものである必要があるため、この番号の機関車は1つだけです。したがって、可能性は1/Ntot
  3. nNB:この機関車はAまたはBのいずれかからできるため、この番号の機関車は2つあります。それらの1つが表示される可能性はです。2/Ntot

簡単な健全性チェックとして:任意の数値が表示される可能性は、。

i=1L(i)=i=1NB2Ntot+i=NB+1NA1Ntot=2NBNtot+NANBNtot=NA+NBNtot=1

一般に、(会社の数+ 1)ケースがあり、間隔ごとに1つです。幸いにも、我々は別の角度から問題を見て、私たちは可能性のために必要なものを実際にちょうど2つの数字であることを確認できます、機関車の総数。そして、数の持っている機関車の数。機関車のうち、機関車の1つを見る可能性はどのくらいありますか?これはすべてのケースので発生するため、この割合が可能性です。Pythonでは、これを2つの合計ジェネレーターで計算できます(会社をサイズ順に並べる必要もありません)。もしNi<nNi+1NtotNnnNnNtotNnNtotNs仮説に従った会社のサイズのリスト(またはタプル)が含まれている場合、これにより、次の番号の機関車が表示される可能性が高くなります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)

1つの会社の些細なケースもこのコードによって処理されることに注意してください(最初の合計はになり、2番目の合計は応じて0または1になります)。NnN


前者の場合、Zipfの法則は、企業規模の現実的な分布の良い出発点になる可能性があります。


これは素晴らしい答えであり、一般化の仕方をはっきりと理解できると思います。お時間をいただきありがとうございます。
ジャスティンボゾニエ2014

結果の尤度関数が仮説に関係なく同じ値を持つことは何の価値もありません。つまり、Likelihood(data=60, hypo=60)Likelihood(data=60, hypo=1000)同じ値に評価されます。したがって、事前分布が均一であった場合、事後分布も均一になります(尤度が0であった値を差し引いたもの)
ecerulm

0

私はコードを分析するつもりはありませんが、以下は解決策です。

しましょう

  • P(loc60)は、ランダムな機関車が60番である確率
  • P(N)は、N個の機関車が存在する事前確率です
  • P(loc60 | N)は、機関車の総数がNの場合、ランダムな機関車の数が60である確率です。
  • P(N | loc60)は、ランダムな機関車の数が60の場合、正確にN個の機関車がある確率です

その後

P(N|loc60)=P(loc60|N)P(N)P(loc60)=P(loc60|N)P(N)MP(loc60|M)

しかし、

P(loc60|N)={1/N if N60 0 otherwise 

これ以降、と仮定します。N60

P(N|loc60)=P(N)/NM=60P(M)/M

ここで、P(N)を選択する必要があります。そうしないと、行き詰まります。P(N)の大きささえわからないので、が0といくつかの(つまり、は、)である確率と同じです。ゲスト評価はトリッキーな作業ですが、鉄道や機関車に関する私の以前の知識から、と想定でき ます。log N maxlogNlogNmax102N<103103N<104NmaxNmax60

の一様分布は、であることを意味し。ここで、cはに依存しない定数です。logN

P(N)=c(log(N+1)logN)c/N

これを前の式に置き換えると、次のようになります

P(N|loc60)c/N2M=60Nmaxc/M2

ただし、

M=60Nmaxc/M260NmaxcM2dM=c60cNmaxc60

今私たちは持っています

P(N|loc60)60/N2

Nの中央値は?それをとすると、Nmed

60Nmed60N2dN=1/2

60/N60Nmed=1/2

Nmed=120

必要なのが中央値ではなく数学的期待値である場合、

E(N)=60Nmax60N2NdN=60logNmax60

私が鉄道について知っていることから、はから間でなければならないので、E(N)は170から600の間のどこかです。10 3 10 6Nmax103106


1
これは単純な問題に対処しているようです。しかし、異なるサイズの異なる鉄道会社がある場合はどうでしょうか?
ジャスティンボゾニア2013年

これは、異なるサイズの異なる鉄道会社がある場合に正確に対処します。「は0と一定の間で均一に分布してい」はサイズの分布です。log N maxlogNlogNmax
user31264 2013年

4
そう言うなら。「会社」という言葉が答えに一度も現れないのは奇妙です。接続が表示されません。
ジャスティンボゾニア2013年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.