Divergencia Kullback-Leibler para dos muestras


10

Traté de implementar una estimación numérica de la divergencia Kullback-Leibler para dos muestras. Para depurar la implementación, extraiga las muestras de dos distribuciones normales y .N ( 1 , 2 )N(0,1)N(1,2)

Para una estimación simple, generé dos histogramas e intenté aproximar numéricamente la integral. Me quedé atascado con el manejo de esas partes del histograma donde los contenedores de uno de los histogramas son cero, de modo que termino dividiendo por cero o el logaritmo de cero. ¿Cómo manejo este problema?

Me vino a la mente una pregunta relacionada: ¿Cómo calcular exactamente la divergencia KL entre dos distribuciones uniformes diferentes? ¿Tengo que restringir la integral a la unión del soporte de ambas distribuciones?


Bueno, el soporte de la distribución normal es el conjunto de números reales. No hay ningún problema en matemática pura, pero sí, para su aproximación numérica, debe asegurarse de que el tamaño de su muestra sea lo suficientemente grande en relación con la región en la que desea integrarse. No podrá integrarse sobre (-inf, + inf) como puede hacerlo en matemáticas puras ... ¿Ir por algo razonable? Si está a más de 3 desviaciones estándar de la media, será bastante delgado ...
Matthew Gunn

1
Con respecto a su segunda pregunta, la divergencia KL entre dos distribuciones uniformes diferentes no está definida ( no está definida). De manera similar, la divergencia KL para dos distribuciones empíricas no está definida a menos que cada muestra tenga al menos una observación con el mismo valor que cada observación en la otra muestra. log(0)
jbowman

@jbowman Pequeña nota. Aunque tiene razón en que no está definido (o - ), es habitual en la teoría de la información tratar log ( 0 ) 0 como 0 . log(0)log(0)00
Luca Citi

Respuestas:


9

La divergencia Kullback-Leibler se define como así que para calcular (estimar) esto a partir de datos empíricos necesitaríamos, tal vez, algunas estimaciones de las funciones de densidad p ( x ) , q ( x ) . Entonces, un punto de partida natural podría ser a través de la estimación de densidad (y después de eso, solo integración numérica). Qué tan bueno o estable sería un método así, no lo sé.

KL(P||Q)=p(x)logp(x)q(x)dx
p(x),q(x)

Pero primero su segunda pregunta, luego volveré a la primera. Digamos que y q son densidades uniformes en [ 0 , 1 ] y [ 0 , 10 ] , respectivamente. Entonces KL ( p | | q ) = log 10 mientras que KL ( q | | p ) es más difícil de definir, pero el único valor razonable para darle es , por lo que puedo ver, ya que implica integrar log ( 1) / /pq[0,1][0,10]KL(p||q)=log10KL(q||p) que podemos elegir interpretar como log . Estos resultados son razonables de la interpretación que doy enIntuition on the Kullback-Leibler (KL) Divergencelog(1/0)log

Volviendo a la pregunta principal. Se pregunta de una manera muy no paramétrica, y no se establecen suposiciones sobre las densidades. Probablemente se necesitan algunas suposiciones. Pero suponiendo que las dos densidades se propongan como modelos competitivos para el mismo fenómeno, probablemente podemos suponer que tienen la misma medida dominante: la divergencia KL entre una distribución de probabilidad continua y una discreta siempre sería infinita, por ejemplo. Un artículo que aborda esta pregunta es el siguiente: https://pdfs.semanticscholar.org/1fbd/31b690e078ce938f73f14462fceadc2748bf.pdf Proponen un método que no necesita estimación de densidad preliminar y analiza sus propiedades.

(Hay muchos otros documentos). Volveré y publicaré algunos detalles de ese documento, las ideas.

 EDIT               

Algunas ideas de ese artículo, que trata sobre la estimación de la divergencia de KL con muestras iid de distribuciones absolutamente continuas. Muestro su propuesta para distribuciones unidimensionales, pero también dan una solución para vectores (usando la estimación de densidad de vecinos más cercana). Para pruebas, lea el periódico!

Pe(x)=1ni=1nU(xxi)
UU(0)=0.5Pcc
D^(PQ)=1ni=1nlog(δPc(xi)δQc(xi))
δPc=Pc(xi)Pc(xiϵ)ϵ

El código R para la versión de la función de distribución empírica que necesitamos es

my.ecdf  <-  function(x)   {
    x   <-   sort(x)
    x.u <-   unique(x)
    n  <-  length(x) 
    x.rle  <-  rle(x)$lengths
    y  <-  (cumsum(x.rle)-0.5) / n
    FUN  <-  approxfun(x.u, y, method="linear", yleft=0, yright=1,
                           rule=2)
    FUN
}          

tenga en cuenta que rlese utiliza para atender el caso con duplicados en x.

Entonces la estimación de la divergencia KL viene dada por

KL_est  <-  function(x, y)   {
    dx  <-  diff(sort(unique(x)))
    dy  <-  diff(sort(unique(y)))
    ex  <-  min(dx) ; ey  <-  min(dy)
    e   <-  min(ex, ey)/2
    n   <-  length(x)    
    P  <-   my.ecdf(x) ; Q  <-  my.ecdf(y)
    KL  <-  sum( log( (P(x)-P(x-e))/(Q(x)-Q(x-e)))) / n
    KL              
}

Luego muestro una pequeña simulación:

KL  <-  replicate(1000, {x  <-  rnorm(100)
                         y <- rt(100, df=5)
                         KL_est(x, y)})
hist(KL, prob=TRUE)

que proporciona el siguiente histograma, que muestra (una estimación) de la distribución muestral de este estimador:

Distribución de muestreo del estimador KL

A modo de comparación, calculamos la divergencia KL en este ejemplo mediante integración numérica:

LR  <-  function(x) dnorm(x,log=TRUE)-dt(x,5,log=TRUE)
100*integrate(function(x) dnorm(x)*LR(x),lower=-Inf,upper=Inf)$value
[1] 3.337668

hmm ... ¡la diferencia es tan grande que hay mucho aquí para investigar!


5

Ampliando un poco la respuesta de kjetil-b-halvorsen , y perdón por no comentar, no tengo la reputación:

  1. Tengo la sensación de que el cálculo analítico debería ser (sin multiplicación por 100):

LR <- function(x) dnorm(x,log=TRUE)-dt(x,5,log=TRUE) integrate(function(x) dnorm(x)*LR(x),lower=-Inf,upper=Inf)$value

  1. D^(P||Q)D^(P||Q)1D(P||Q)

Una vez que se realizan esas dos correcciones, los resultados parecen más realistas.


Gracias, investigaré esto y actualizaré mi respuesta.
kjetil b halvorsen
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.