Ich arbeite an Think Bayes (kostenlos hier: http://www.greenteapress.com/thinkbayes/ ) und mache Übung 3.1. Hier ist eine Zusammenfassung des Problems:
"Eine Eisenbahn nummeriert ihre Lokomotiven in der Reihenfolge 1..N. Eines Tages sehen Sie eine Lokomotive mit der Nummer 60. Schätzen Sie, wie viele Lokomotiven die Eisenbahn hat."
Diese Lösung wird mit der Wahrscheinlichkeitsfunktion und dem Exponentialprior wie folgt gefunden:
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)
Konzeptionell heißt das: Wenn wir eine Zugnummer sehen, die größer als eine unserer Hypothesen ist (1 ... 1000), hat jede kleinere Hypothese eine Null-Chance, korrekt zu sein. Der Rest der Hypothesen hat eine 1 / number_of_trains-Chance, uns einen Zug mit dieser Nummer zu zeigen.
In der Übung arbeite ich am Autor und füge dann ein kleines Extra hinzu. Dies setzt voraus, dass es nur eine Firma gibt. Im wirklichen Leben hätten Sie jedoch eine Mischung aus großen und kleinen Unternehmen und größeren Unternehmen (beide gleich wahrscheinlich). Dies würde jedoch bedeuten, dass Sie eher einen Zug einer größeren Firma sehen, da diese mehr Züge haben würde.
Die Frage ist nun, wie dies in der Wahrscheinlichkeitsfunktion widergespiegelt werden kann.
Dies ist kein Stapelüberlauf, daher bitte ich nicht wirklich um Hilfe beim Codieren, sondern vielleicht nur darum, wie ich dieses Problem in Bezug auf eine Wahrscheinlichkeitsfunktion beurteilen könnte.
quelle
Antworten:
Ich skizziere zunächst einen Ansatz für zwei Unternehmen im Detail. Die Erweiterung auf noch mehr Unternehmen sollte dann intuitiv sein (zumindest für die Wahrscheinlichkeit, dass der Prior schwieriger sein könnte).
Stellen Sie sich vor gibt es zwei Unternehmen A und B , wobei A hat Lokomotiven und B hat Lokomotiven. Wir nehmen (Sie können jederzeit A und B wechseln , um dies zu halten). Die Gesamtzahl für diese Hypothese von Lokomotiven ist .N B N A ≥ N B N t o t = N A + N B.NA NB NA≥NB Ntot=NA+NB
Stellen Sie sich vor, Sie sehen eine Lokomotive mit der Nummer . Es gibt drei Fälle für die Wahrscheinlichkeit:n
Zur schnellen Überprüfung der Gesundheit: Die Wahrscheinlichkeit, überhaupt eine Zahl zu sehen, ist .
Im Allgemeinen gibt es Fälle (Anzahl der Unternehmen + 1), einen für jedes Intervall . Glücklicherweise können wir das Problem aus einem anderen Blickwinkel betrachten und feststellen, dass wir für die Wahrscheinlichkeit tatsächlich nur zwei Zahlen benötigen: , die Gesamtzahl der Lokomotiven; und die Anzahl der Lokomotiven mit der Nummer . Wie wahrscheinlich ist es, dass wir eine der Lokomotiven von -Lokomotiven sehen? Dies geschieht in allen Fällen in , daher ist dieser Bruch die Wahrscheinlichkeit. In Python können Sie dies mit zwei Summengeneratoren berechnen (und Sie müssen die Unternehmen nicht einmal nach Größe sortieren). Wenn N t o t N n N N N N t o t N nNi<n≤Ni+1 Ntot Nn n Nn Ntot NnNtot
Ns
Enthält eine Liste (oder ein Tupel) von Unternehmensgrößen gemäß Ihrer Hypothese. Dies gibt die Wahrscheinlichkeit, eine Lokomotive mit der Nummer zu sehenn
:Beachten Sie, dass der triviale Fall mit einer Firma auch von diesem Code behandelt wird (die erste Summe ist nur , die zweite Summe ist 0 oder 1, je nachdem, ob ).n ≤ N.N n≤N
Für die Vorgesetzten könnte das Zipf-Gesetz ein guter Ausgangspunkt für eine realistische Verteilung der Unternehmensgrößen sein.
quelle
Likelihood(data=60, hypo=60)
undLikelihood(data=60, hypo=1000)
bewerten Sie auf den gleichen Wert. Wenn also die vorherige Verteilung gleichmäßig war, ist auch der hintere Teil gleichmäßig (abzüglich der Werte für die Wahrscheinlichkeit 0)Ich werde den Code nicht analysieren, aber unten ist die Lösung.
Lassen
Dann
Aber
Von nun an nehmen wir an, dass .N≥60
Jetzt sollten wir P (N) auswählen, sonst stecken wir fest. Da wir nicht einmal die Größenordnung von P (N) kennen, ist es vernünftig anzunehmen, dass gleichmäßig zwischen 0 und einigen (dh die Wahrscheinlichkeit, dass ist die gleiche wie die Wahrscheinlichkeit, dass ). gastieren ist eine knifflige Aufgabe, aber aufgrund meiner Vorkenntnisse über Eisenbahnen und Lokomotiven kann ich davon ausgehen, dass .logN 10 2 ≤ N < 10 3logNmax 102≤N<103 103≤N<104 Nmax Nmax≫60
Die gleichmäßige Verteilung von bedeutet, dass , wobei c eine von N unabhängige Konstante ist.logN
Wenn wir dies durch die vorherige Formel , haben wir:
Aber
Jetzt haben wir
Was ist der Medianwert von N? Dann sei esNmed
Wenn wir eher mathematische Erwartung als Median brauchen, dann
Nach dem, was ich über Eisenbahnen weiß, sollte zwischen und , also liegt E (N) irgendwo zwischen 170 und 600.10 3 10 6Nmax 103 106
quelle