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.