Domanda:
Come calcolare la divergenza Kullback-Leibler quando il PMF contiene 0?
Legend
2011-08-11 05:08:37 UTC
view on stackexchange narkive permalink

Ho le seguenti serie temporali

enter image description here

ottenute utilizzando i dati pubblicati di seguito.

Per una dimensione della finestra scorrevole di 10, sto provando per calcolare la divergenza KL tra il PMF dei valori all'interno della finestra scorrevole corrente e il PMF della cronologia con l'obiettivo finale di tracciare il valore della divergenza KL nel tempo in modo da poter confrontare due serie temporali.

A partire da ora, sto affrontando un problema concettuale (che spiegherò usando Python):

  In [228]: samples = [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1] # In realtà questo 10 dovrebbe essere 20 perché questo è il valore massimo che ho visto nella serie temporale in [229]: bins = scipy.linspace (0, 10, 21) In [230]: binsOut [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.]))  

Il problema è che il PMF risultante contiene 0 così che non posso realmente moltiplicare due PMF per ottenere la divergenza KL. Qualcuno può dirmi come mitigare questo problema?

Dati

  0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 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 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 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 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 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 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 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  
Tre risposte:
#1
+12
Suresh Venkatasubramanian
2011-08-12 20:48:58 UTC
view on stackexchange narkive permalink

Un trucco standard per affrontare questo problema è usare quella che viene chiamata correzione di Laplace. In effetti, aggiungi un "conteggio" a tutti i contenitori e rinormalizzi. Ci sono anche buone ragioni per aggiungere un conteggio 0,5: questo particolare stimatore è chiamato stimatore Krichevsky-Trofimov.

#2
+4
highBandWidth
2011-08-11 21:56:33 UTC
view on stackexchange narkive permalink

Un modo per pensare al tuo problema è che non hai davvero fiducia nel PMF che hai calcolato dall'istogramma. Potrebbe essere necessario un leggero precedente nel tuo modello. Dato che se fossi sicuro del PMF, la divergenza KL dovrebbe essere infinita poiché hai ottenuto valori in un PMF che sono impossibili nell'altro PMF. Se, d'altra parte, hai avuto un precedente leggero e poco informativo, c'è sempre qualche piccola probabilità di vedere un certo risultato. Un modo per introdurlo sarebbe aggiungere un vettore di uno per uno scalare all'istogramma. La distribuzione teorica precedente che useresti è la distribuzione dirichlet, che è il coniugato precedente della distribuzione categoriale. Ma per scopi pratici puoi fare qualcosa come

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

dove w è un peso positivo, a seconda di quanto forte si desidera avere un precedente.

+1 per il tuo tempo e rispondi. Grazie. Ho letto su questo per le ultime 8 ore e sembra che abbia bisogno di aggiungere una prima per aggirare questo. Tuttavia, non sono in grado di trovare un riferimento adeguato che spieghi questo fatto. È qualcosa di ovvio nella comunità delle statistiche o ti capiterà di conoscere un riferimento che indica questo requisito per la divergenza KL?
#3
+3
Emre
2011-08-11 10:13:28 UTC
view on stackexchange narkive permalink

bin i dati in modo da poter confrontare i due PMF; date due stime PMF $ \ hat P $ e $ \ hat Q $, puoi calcolare il KLD semplicemente come: $ D_ {KL} (\ hat P \ | \ hat Q) \ equiv \ sum_i \ hat P (i) \ log \ dfrac {\ hat P (i)} {\ hat Q (i)} $, dove $ i $ scorre tra i bidoni.

Mi spiace, non conosco R.

+1 per il tuo tempo. Ho aggiornato la mia domanda con il problema che sto affrontando con questa formula. Non sono in grado di capire come affrontare questo problema quando i PMF contengono "0". Potresti avere commenti su come mitigare questo problema?
Lo zero indica l'assenza di dati o è un valore valido? Se fosse il primo, lo ignoreresti semplicemente. In quest'ultimo caso, puoi dedicare uno dei bidoni al valore zero.
Poiché si tratta di una serie temporale, in alcuni casi c'erano zero eventi e in alcuni mancavano i dati, quindi ho aggiunto uno zero per sostituire il valore mancante. Hai portato un punto interessante: posso ignorare i valori in una serie temporale nel caso in cui manchino? Non sarebbe fatale?
Conserverei gli zeri selezionando gli elementi nella finestra mobile, ma li ignorerei ai fini del calcolo del KLD.
Inteso. Grazie! Accettato come risposta. La mia ultima domanda riguarderebbe una metrica correlata chiamata divergenza "Jensen-Shannon". Mi sono imbattuto per caso in questa metrica ma questa metrica non sembra avere un requisito di assoluta continuità. Eventuali suggerimenti?
Dovrebbe esserci un logaritmo nella formula $ D_ {KL} $? e cosa si dovrebbe fare dove $ Q_ {i} = 0 $ e $ P_ {i}> 0 $?
Sì, naturalmente; Ho aggiunto il logaritmo. Puoi evitare la divisione per zero scegliendo Q come dato completo (che presumibilmente non avrà buchi) o aggiungere un piccolo numero a ciascun bin, come menzionato nelle altre risposte.


Questa domanda e risposta è stata tradotta automaticamente dalla lingua inglese. Il contenuto originale è disponibile su stackexchange, che ringraziamo per la licenza cc by-sa 3.0 con cui è distribuito.
Loading...