Estoy trabajando a través de Think Bayes (gratis aquí: http://www.greenteapress.com/thinkbayes/ ) y estoy en el ejercicio 3.1. Aquí hay un resumen del problema:
"Un ferrocarril numera sus locomotoras en el orden 1..N. Un día ves una locomotora con el número 60. Estima cuántas locomotoras tiene el ferrocarril".
Esta solución se encuentra con la función de verosimilitud y la exponencial anterior de la siguiente manera:
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)
Conceptualmente esto es decir, si vemos un número de tren mayor que una de nuestras hipótesis (1 ... 1000), entonces cada hipótesis más pequeña tiene cero posibilidades de ser correcta. El resto de las hipótesis tienen una probabilidad de 1 / number_of_trains de mostrarnos un tren con este número.
En el ejercicio en el que estoy trabajando, el autor agrega un poco más. Esto supone que solo hay una compañía. Sin embargo, en la vida real tendrías una mezcla de compañías grandes y pequeñas y compañías más grandes (ambas igualmente probables). Sin embargo, esto significaría que es más probable que vea un tren de una compañía más grande ya que tendrían más trenes.
Ahora la pregunta es ¿cómo reflejar esto en la función de probabilidad?
Esto no es Stack Overflow, así que realmente no estoy pidiendo ayuda para la codificación, sino que tal vez solo ayude sobre cómo podría pensar sobre este problema en términos de una función de probabilidad.
fuente
Respuestas:
Primero esbozo un enfoque para dos compañías en detalle, la extensión a incluso más compañías debería ser intuitiva (al menos para la probabilidad, lo anterior podría ser más complicado).
Imagine que hay dos compañías A y B , donde A tiene locomotoras y B tiene locomotoras . Asumimos (siempre puede cambiar A y B para hacer que esto se mantenga). El número total para esa hipótesis de locomotoras es .norteUNA nortesi norteUNA≥nortesi nortet o t=norteUNA+nortesi
Imagina que ves una locomotora con el número . Hay tres casos para la probabilidad:norte
Como una verificación rápida de la cordura: La probabilidad de ver cualquier número es .
En general, habrá (número de empresas + 1) casos, uno para cada intervalo . Afortunadamente, podemos ver el problema desde un ángulo diferente y ver que lo que necesitamos para la probabilidad son en realidad solo dos números: , el número total de locomotoras; y , el número de locomotoras que tienen el número . ¿Qué tan probable es que veamos una de las locomotoras , fuera de las locomotoras ? Esto sucederá en de todos los casos, por lo que esta fracción es la probabilidad. En Python, puede calcular esto con dos generadores de suma (y ni siquiera tiene que ordenar las empresas por tamaño). Sinorteyo< n ≤nortei + 1 nortet o t nortenorte norte nortenorte nortet o t nortenortenortet o t
Ns
contiene una lista (o tupla) de tamaños de compañía de acuerdo con su hipótesis, entonces esto le dará la posibilidad de ver una locomotora con númeron
:Tenga en cuenta que el caso trivial con una compañía también se maneja con este código (la primera suma será , la segunda suma será 0 o 1, dependiendo de si ).norte n ≤ N
Para los anteriores, la ley de Zipf podría ser un buen punto de partida para una distribución realista de los tamaños de las empresas.
fuente
Likelihood(data=60, hypo=60)
yLikelihood(data=60, hypo=1000)
evaluar al mismo valor. Entonces, si la distribución anterior fue uniforme, la posterior también será uniforme (menos los valores para lo que la probabilidad era 0)No voy a analizar el código, pero a continuación está la solución.
Dejar
Entonces
Pero
De ahora en adelante, asumimos que .norte≥ 60
Ahora debemos seleccionar P (N), de lo contrario estamos atascados. Como no conocemos ni siquiera el orden de magnitud de P (N), es razonable suponer que está distribuido uniformemente entre 0 y algunos (es decir, la probabilidad de que es lo mismo que la probabilidad de que ). Guestimating es una tarea difícil, pero por mi conocimiento previo sobre ferrocarriles y locomotoras, puedo suponer que .Iniciar sesiónnorte Iniciar sesiónnortemax 102≤ N<103 103≤ N<104 4 nortemax nortemax≫ 60
La distribución uniforme de significa que , donde c es una constante independiente de N.Iniciar sesiónnorte
Sustituyendo esto por la fórmula anterior, tenemos:
Pero
Ahora tenemos
¿Cuál es el valor medio de N? Deja que sea , luegonortemedicina
Si lo que necesitamos es expectativa matemática en lugar de mediana, entonces
Por lo que sé sobre los ferrocarriles, debería estar entre y , por lo que E (N) está en algún lugar entre 170 y 600.nortemax 103 106 6
fuente