Je travaille via Think Bayes (gratuit ici: http://www.greenteapress.com/thinkbayes/ ) et je fais de l'exercice 3.1. Voici un résumé du problème:
"Un chemin de fer numérote ses locomotives dans l'ordre 1..N. Un jour, vous voyez une locomotive avec le numéro 60. Estimez combien de locomotives le chemin de fer a."
Cette solution se trouve avec la fonction de vraisemblance et la priorité exponentielle comme ceci:
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)
Conceptuellement, cela veut dire que si nous voyons un nombre de trains supérieur à l'une de nos hypothèses (1 ... 1000), alors chaque hypothèse plus petite a une chance nulle d'être correcte. Les autres hypothèses ont une chance 1 / number_of_trains de nous montrer un train avec ce numéro.
Dans l'exercice sur lequel je travaille, l'auteur ajoute un petit plus. Cela suppose qu'il n'y a qu'une seule entreprise. Dans la vraie vie, cependant, vous auriez un mélange de grandes et petites entreprises et de plus grandes entreprises (les deux sont tout aussi probables). Cependant, cela signifierait que vous êtes plus susceptible de voir un train d'une plus grande entreprise car ils auraient plus de trains.
Maintenant, la question est de savoir comment refléter cela dans la fonction de vraisemblance?
Ce n'est pas Stack Overflow, donc je ne demande pas vraiment d'aide au codage, mais peut-être juste une aide sur la façon dont je pourrais penser ce problème en termes de fonction de vraisemblance.
la source
Réponses:
Je décris d'abord en détail une approche pour deux entreprises, l'extension à encore plus d'entreprises devrait alors être intuitive (au moins pour la probabilité, le prieur pourrait être plus délicat).
Imaginez qu'il existe deux sociétés A et B , où A a locomotives et B a locomotives. Nous supposons (vous pouvez toujours basculer entre A et B pour que cela ). Le nombre total pour cette hypothèse de locomotives est .NA NB NA≥NB Ntot=NA+NB
Imaginez que vous voyez une locomotive avec le numéro . Il y a trois cas pour la probabilité:n
Comme une vérification rapide de la raison: la probabilité de voir n'importe quel nombre est .
Généralement, il y aura (nombre d'entreprises + 1) cas, un pour chaque intervalle . Heureusement, nous pouvons regarder le problème sous un angle différent et voir que ce dont nous avons besoin pour la vraisemblance sont en fait seulement deux nombres: , le nombre total de locomotives; et , le nombre de locomotives portant le nombre . Quelle est la probabilité de voir l'une des locomotive, parmi locomotives? Cela se produira dans de tous les cas, donc cette fraction est la probabilité. En Python, vous pouvez calculer cela avec deux générateurs de somme (et vous n'avez même pas besoin de classer les entreprises par taille). SiNi<n≤Ni+1 Ntot Nn n Nn Ntot NnNtot
Ns
contient une liste (ou un tuple) de tailles d'entreprises selon votre hypothèse, cela donnera la probabilité de voir une locomotive avec un nombren
:Notez que le cas trivial avec une entreprise est également géré par ce code (la première somme sera juste , la deuxième sera 0 ou 1, selon que ).N n≤N
Pour les prieurs, la loi de Zipf pourrait être un bon point de départ pour une répartition réaliste des tailles d'entreprises.
la source
Likelihood(data=60, hypo=60)
etLikelihood(data=60, hypo=1000)
évaluez à la même valeur. Donc, si la distribution précédente était uniforme, la partie postérieure sera également uniforme (moins les valeurs de la probabilité 0)Je ne vais pas analyser le code, mais voici la solution.
Laisser
alors
Mais
Désormais, nous supposons queN≥60 .
Maintenant, nous devons sélectionner P (N), sinon nous sommes bloqués. Puisque nous ne connaissons même pas l'ordre de grandeur de P (N), il est raisonnable de supposer quelogN est uniformément répartie entre 0 et certains logNmax (c.-à-d. la probabilité que soit la même que la probabilité que ). Inviter est une tâche délicate, mais d'après mes connaissances antérieures sur les chemins de fer et les locomotives, je peux supposer que .102≤N<103 103≤N<104 Nmax Nmax≫60
La distribution uniforme de signifie que , où c est une constante indépendante de N.logN
En substituant ceci à la formule précédente, nous avons:
Mais
Maintenant nous avons
Quelle est la valeur médiane de N? Soit , puisNmed
Si nous avons besoin d'une attente mathématique plutôt que d'une médiane, alors
D'après ce que je sais des chemins de fer, devrait être compris entre et , donc E (N) se situe entre 170 et 600.Nmax 103 106
la source