10 votos

Locomotora problema con empresas de diversos tamaños

Estoy trabajando a través de Pensar de Bayes (gratis aquí: http://www.greenteapress.com/thinkbayes/) y estoy en el ejercicio 3.1. He aquí un resumen del problema:

"Un ferrocarril números de sus locomotoras en el orden 1..N. Un día ves una locomotora con el número 60. Estimar cuántas locomotoras del ferrocarril."

Esta solución se encuentra con la probabilidad de la función exponencial y antes así:

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, es decir, si vemos un número de tren más grande que una de nuestras hipótesis (1...1000) entonces cada hipótesis de que la menor tiene cero posibilidades de ser correcto. El resto de las hipótesis 1/number_of_trains oportunidad de mostrarnos un tren con este número.

En el ejercicio en el que estoy trabajando sobre el autor, a continuación, añade un poco más. Esto supone que hay una sola empresa. En la vida real, sin embargo, usted tendría una mezcla de grandes y pequeñas empresas y grandes empresas (ambos igualmente probables). Sin embargo, esto significa que usted es más probable que vea un tren de una compañía más grande, ya que tendría más trenes.

Ahora la pregunta es cómo esto se refleje en la probabilidad de la función?

Este no es Stack Overflow así que no estoy pidiendo para la codificación de ayuda, sino tal vez sólo ayuda acerca de cómo podría pensar acerca de este problema en términos de una función de probabilidad.

9voto

Paul Puntos 1

Soy el primero que describe un enfoque para dos empresas en detalle, la extensión a más empresas, a continuación, debe ser intuitivo (al menos para la probabilidad, el estado podría ser más complicado).

Imaginemos que hay dos empresas de Un y B, donde Una ha $N_A$ locomotoras y B ha $N_B$ locomotoras. Asumimos $N_A \ge N_B$ (siempre se puede cambiar de Un y B para hacer esto). El número total para que la hipótesis de locomotoras es $N_{tot} = N_A + N_B$.

Imagine que usted vea una locomotora con el número de $n$. Hay tres casos de la probabilidad:

  1. $N_A < n$: Esto no puede suceder, por lo que la probabilidad es cero.
  2. $N_B < n \le N_A$: Esta locomotora debe venir de la compañía de Una, así que sólo hay una locomotora con este número. Por lo tanto la probabilidad es $1/N_{tot}$
  3. $n \le N_B$: Esta locomotora puede ser de Una o de B, por lo que hay dos locomotoras con este número. La probabilidad de ver a uno de ellos es $2/N_{tot}$.

Como una rápida comprobación de validez: La posibilidad de ver cualquier número en todos los es $$\sum_{i=1}^\infty L(i) = \sum_{i=1}^{N_B} \frac{2}{N_{tot}} + \sum_{i=N_B+1}^{N_A} \frac{1}{N_{tot}} \\ = \frac{2\cdot N_B}{N_{tot}} + \frac{N_A-N_B}{N_{tot}} = \frac{N_A+N_B}{N_{tot}} = 1$$.


Generally, there will be (number of companies + 1) cases, one for each interval $N_i < n \le N_{i+1}$. Luckily, we can look at the problem from a different angle and see that what we need for the likelihood are actually just two numbers: $N_{tot}$, the total number of locomotives; and $N_n$, the number of locomotives that have the number $n$. How likely are we to see one of the $N_n$ locomotive, out of $N_{tot}$ locomotives? This will happen in $\frac{N_n}{N_{tot}}$ de todos los casos, por lo que esta fracción es la probabilidad de. En Python, se puede calcular en dos la suma de los generadores (y usted incluso no tiene que pedir a las empresas por tamaño). Si Ns contiene una lista (o tupla) de los tamaños de empresa de acuerdo a su hipótesis, entonces esto le dará la posibilidad de ver una locomotora con número 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)

Tenga en cuenta que el caso trivial con una empresa también es manejado por este código (de la primera suma se le $N$, la segunda suma es 0 o 1, dependiendo de si $n\le N$).


Para los reincidentes, la ley de Zipf podría ser un buen punto de partida para un realista de la distribución de los tamaños de empresa.

-1voto

user31264 Puntos 751

No voy a analizar el código, pero a continuación es la solución.

Vamos

  • P(loc60) la probabilidad de que un azar de la locomotora tiene el número 60
  • P(N) será la probabilidad anterior de que hay exactamente N locomotoras
  • P(loc60|N) será la probabilidad de que un azar de la locomotora tiene el número 60, si el número total de locomotoras es N,
  • P(N|loc60) la probabilidad de que haya exactamente N locomotoras, si un azar de la locomotora tiene el número 60

Entonces

$$ P(N|\text{loc60}) = {P(\text{loc60}|N) P(N) \over P(\text{loc60})} = {P(\text{loc60}|N) P(N) \over \sum_M P(\text{loc60}|M)}$$

Pero $$ P(\text{loc60}|N) = \cases {1/N & if $N\ge 60$ \\ 0 & otherwise } $$

A partir de ahora, vamos a suponer que $N \ge 60$.

$$ P(N|\text{loc60}) = {P(N)/N \over \sum_{M=60}^\infty P(M)/M} $$

Ahora debemos seleccionar P(N), de lo contrario estamos estancados. Ya no sabemos aún el orden de magnitud de P(N), es razonable suponer que el $\log N$ es distribuido uniformemente entre 0 y algunos $\log N_\max$ (i. e. la probabilidad de que $10^2\le N<10^3$ es la misma que la probabilidad de que $10^3\le N<10^4$). Guestimating $N_\max$ es una tarea complicada, pero desde mi conocimiento previo acerca de los ferrocarriles y locomotoras, puedo asumir que $N_\max \gg 60$ .

La distribución uniforme de la $\log N$ significa que $$P(N) = c(\log (N+1)-\log N) \approx c/N$$, donde c es una constante independiente de la N.

Sustituyendo esta a la fórmula anterior, se tiene: $$ P(N|\text{loc60}) \approx {c/N^2 \over \sum_{M=60}^{N_\max} c/M^2} $$

Pero $$\sum_{M=60}^{N_\max} c/M^2 \approx \int_{60}^{N_\max} {c\over M^2}dM = {c \over 60} - {c \over N_\max} \approx {c\over60} $$

Ahora tenemos

$$ P(N|\text{loc60}) \approx {60/N^2} $$

¿Cuál es la mediana del valor de N? Vamos a ser $N_\text{med}$ , luego

$$ \int_{60}^{N_\text{med}} {60 \over N^2} dN = 1/2 $$

$$ 60/N - {60 \over N_\text{med}} = 1/2 $$

$$ N_\text{med} = 120 $$

Si lo que necesitamos es la esperanza matemática en lugar de la mediana, entonces

$$ E(N) = \int_{60}^{N_\max} {60\over N^2} N dN = 60 \log {N_\max \over 60} $$

A partir de lo que sé acerca de los ferrocarriles, $N_\max$ debe ser de entre $10^3$$10^6$, de modo que E(N) está en algún lugar entre 170 y 600.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X