¿Cómo calcular la divergencia Kullback-Leibler cuando el PMF contiene ceros?

9

Tengo la siguiente serie de tiempo

ingrese la descripción de la imagen aquí

obtenido utilizando los datos publicados a continuación.

Para un tamaño de ventana deslizante de 10, estoy tratando de calcular la divergencia KL entre el PMF de los valores dentro de la ventana deslizante actual y el PMF del historial con el objetivo final de trazar el valor de la divergencia KL en el tiempo para que yo Puede comparar dos series de tiempo.

A partir de ahora, hay un problema conceptual que estoy enfrentando (que explicaré usando Python):

In [228]: samples = [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1]

# In reality this 10 should be 20 because that is the max value I have seen in the timeseries
In [229]: bins = scipy.linspace(0, 10, 21) 
In [230]: bins
Out[230]:
array([  0. ,   0.5,   1. ,   1.5,   2. ,   2.5,   3. ,   3.5,   4. ,
         4.5,   5. ,   5.5,   6. ,   6.5,   7. ,   7.5,   8. ,   8.5,
         9. ,   9.5,  10. ])
In [231]: scipy.histogram(samples, bins=bins, density=True)
Out[231]:
(array([ 1.63636364,  0.        ,  0.36363636,  0.        ,  0.        ,
        0.        ,  0.        ,  0.        ,  0.        ,  0.        ,
        0.        ,  0.        ,  0.        ,  0.        ,  0.        ,
        0.        ,  0.        ,  0.        ,  0.        ,  0.        ]),
 array([  0. ,   0.5,   1. ,   1.5,   2. ,   2.5,   3. ,   3.5,   4. ,
         4.5,   5. ,   5.5,   6. ,   6.5,   7. ,   7.5,   8. ,   8.5,
         9. ,   9.5,  10. ]))

El problema es que el resultado PMFcontiene 0s, de modo que realmente no puedo multiplicar dos PMFs para obtener la divergencia KL. ¿Alguien puede decirme cómo mitigar este problema?

Datos

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 20 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 2 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 0 1 0 1 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 5 0 0 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Leyenda
fuente

Respuestas:

12

Un truco estándar para lidiar con este problema es usar lo que se llama una corrección de Laplace. En efecto, agrega un "conteo" a todos los contenedores y renormaliza. También hay buenas razones para agregar un conteo de 0.5: este estimador particular se llama estimador Krichevsky-Trofimov .

Suresh Venkatasubramanian
fuente
4

Una forma de pensar sobre su problema es que realmente no tiene confianza en el PMF que ha calculado a partir del histograma. Es posible que necesite un ligero previo en su modelo. Dado que si confiaba en el PMF, la divergencia de KL debería ser infinita ya que obtuvo valores en un PMF que son imposibles en el otro PMF. Si, por otro lado, tuviste un previo poco informativo, entonces siempre hay una pequeña probabilidad de ver un cierto resultado. Una forma de introducir esto sería agregar un vector de unas veces algo escalar al histograma. La distribución previa teórica que usaría es la distribución de dirichlet , que es el conjugado anterior de la distribución categórica . Pero para fines prácticos puedes hacer algo como

pmf_unnorm = scipy.histogram(samples, bins=bins, density=True)[0] +  w * scipy.ones(len(bins)-1)
pmf = pmf_unnor / sum(pmf_unnorm)

donde whay algo de peso positivo, dependiendo de cuán fuerte sea el prior que quieras tener.

highBandWidth
fuente
1
+1 por tu tiempo y respuesta. Gracias. He estado leyendo sobre esto durante las últimas 8 horas y parece que necesito agregar un antes de solucionar esto. Sin embargo, no puedo encontrar una referencia adecuada que explique este hecho. ¿Es algo obvio en la comunidad de estadísticas o conocerías una referencia que indique este requisito para la divergencia de KL?
Leyenda
3

Bin los datos para que pueda comparar los dos PMF; dado dos estimaciones de PMFP^ y Q^, puede calcular el KLD simplemente como: DKL(P^Q^)iP^(i)logP^(i)Q^(i), Donde corre sobre los contenedores.i

Lo siento, no se R.

Emre
fuente
1
+1 por tu tiempo. Actualicé mi pregunta con el problema que estoy enfrentando con esta fórmula. No puedo entender cómo abordar este problema cuando los PMF contienen 0s. ¿Le gustaría tener algún comentario sobre cómo mitigar este problema?
Leyenda
¿El cero indica la ausencia de datos o es un valor válido? Si es lo primero, simplemente lo ignorarías. Si es lo último, puede dedicar uno de los contenedores al valor cero.
Emre
Debido a que esta es una serie de tiempo, en algunos casos, hubo cero eventos y en algunos faltaban datos, por lo que agregué un cero para sustituir el valor faltante. Trae un punto interesante: ¿puedo ignorar los valores en una serie temporal en caso de que falten? ¿No sería eso fatal?
Leyenda
Conservaría los ceros seleccionando los elementos en la ventana móvil, pero los ignoraría para calcular el KLD.
Emre
Entendido. ¡Gracias! Aceptado como respuesta. Mi última pregunta sería con respecto a una métrica relacionada llamada divergencia "Jensen-Shannon". Encontré esta métrica por casualidad, pero esta métrica no parece tener un requisito de continuidad absoluta. ¿Alguna sugerencia?
Leyenda