Divergenza di Kullback-Leibler per due campioni


10

Ho cercato di implementare una stima numerica della divergenza di Kullback-Leibler per due campioni. Per eseguire il debug dell'implementazione, estrarre i campioni da due distribuzioni normali e .N(0,1)N(1,2)

Per una semplice stima ho generato due istogrammi e ho provato ad approssimare numericamente l'integrale. Mi sono bloccato nel maneggiare quelle parti dell'istogramma in cui i bin di uno dell'istogramma sono zero in modo tale da finire con la divisione per zero o il logaritmo di zero. Come gestisco questo problema?

Mi è venuta in mente una domanda correlata: come calcolare esattamente la divergenza KL tra due diverse distribuzioni uniformi? Devo limitare l'integrale all'unione del supporto di entrambe le distribuzioni?


Bene, il supporto della distribuzione normale è l'insieme di numeri reali. Non c'è nessun problema in matematica pura, ma sì, per la tua approssimazione numerica, devi assicurarti che la dimensione del tuo campione sia abbastanza grande rispetto alla regione su cui vuoi integrarti. Non sarai in grado di integrarti su (-inf, + inf) come puoi in matematica pura ... Scegli qualcosa di ragionevole? Se sei a più di 3 deviazioni standard dalla media, sarà piuttosto sottile ...
Matthew Gunn,

1
Rispetto alla tua seconda domanda, la divergenza KL tra due diverse distribuzioni uniformi è indefinita ( non è definita). Allo stesso modo, la divergenza KL per due distribuzioni empiriche non è definita a meno che ogni campione abbia almeno un'osservazione con lo stesso valore di ogni osservazione nell'altro campione. log(0)
jbowman,

@jbowman Piccola nota. Anche se hai ragione sul fatto che non è definito (o ), nella teoria dell'informazione è consuetudine trattare come . log(0)log(0)00
Luca Citi,

Risposte:


9

La divergenza di Kullback-Leibler è definita come quindi per calcolare (stimare) questo dai dati empirici avremmo bisogno, forse, di alcune stime delle funzioni di densità . Quindi un punto di partenza naturale potrebbe essere la stima della densità (e, successivamente, solo l'integrazione numerica). Non so quanto sia valido o stabile un metodo del genere.

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

Ma prima la tua seconda domanda, poi tornerò alla prima. Diciamo che e sono densità uniformi su e rispettivamente. Quindi mentre è più difficile da definire, ma l'unico valore ragionevole da dare è , per quanto posso vedere, dal momento che comporta integrando che possiamo scegliere di interpretare come . Questo risultato è ragionevole dall'interpretazione che do in Intuition on the Kullback-Leibler (KL) Divergencepq[0,1][0,10]KL(p||q)=log10KL(q||p)log(1/0)log

Tornando alla domanda principale. Viene chiesto in modo molto non parametrico e non vengono assunti presupposti sulle densità. Probabilmente sono necessari alcuni presupposti. Ma supponendo che le due densità siano proposte come modelli concorrenti per lo stesso fenomeno, possiamo probabilmente supporre che abbiano la stessa misura dominante: la divergenza di KL tra una distribuzione di probabilità continua e una discreta sarebbe sempre l'infinito, per esempio. Un documento che affronta questa domanda è il seguente: https://pdfs.semanticscholar.org/1fbd/31b690e078ce938f73f14462fceadc2748bf.pdf Propongono un metodo che non richiede una stima preliminare della densità e ne analizza le proprietà.

(Ci sono molti altri documenti). Tornerò e pubblicherò alcuni dettagli di quel documento, le idee.

 EDIT               

Alcune idee da quel documento, che riguarda la stima della divergenza di KL con i campioni da distribuzioni assolutamente continue. Mostro la loro proposta di distribuzioni monodimensionali, ma offrono anche una soluzione per i vettori (usando la stima della densità del vicino più vicino). Per prove leggi il documento!

Propongono di utilizzare una versione della funzione di distribuzione empirica, ma interpolati linearmente tra i punti campione per ottenere una versione continua. Definiscono dove è la funzione del passo di Heavyside, ma definita in modo che . Quindi quella funzione interpolata linearmente (e estesa orizzontalmente oltre l'intervallo) è ( per continuo). Quindi propongono di stimare la divergenza di Kullback-Leibler di dove e

Pe(x)=1ni=1nU(xxi)
UU(0)=0.5Pcc
D^(PQ)=1ni=1nlog(δPc(xi)δQc(xi))
δPc=Pc(xi)Pc(xiϵ)ϵ è un numero più piccolo della spaziatura più piccola dei campioni.

Il codice R per la versione della funzione di distribuzione empirica di cui abbiamo bisogno è

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
}          

si noti che rleviene utilizzato per occuparsi del caso con duplicati in x.

Quindi la stima della divergenza KL è data da

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              
}

Quindi mostro una piccola simulazione:

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

che fornisce il seguente istogramma, mostrando (una stima) la distribuzione campionaria di questo stimatore:

Distribuzione campionaria dello stimatore KL

Per confronto, calcoliamo la divergenza di KL in questo esempio per integrazione numerica:

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 differenza è abbastanza grande che c'è molto qui da indagare!


5

Espandendo un po 'la risposta di kjetil-b-halvorsen , e scusami per non aver commentato, non ho la reputazione:

  1. Ho la sensazione che il calcolo analitico dovrebbe essere (senza moltiplicazioni per 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. Se ho ragione, lo stimatore non converge alla divergenza KL, ma la convergenza è dichiarata come: . La freccia rappresenta come convergenza.D^(P||Q)D^(P||Q)1D(P||Q)

Una volta apportate queste due correzioni, i risultati sembrano più realistici.


Grazie, esaminerò questo e aggiornerò la mia risposta.
kjetil b halvorsen,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.