Come calcolare la divergenza kl in r (con esempio)


In statistica, la divergenza Kullback-Leibler (KL) è una metrica di distanza che quantifica la differenza tra due distribuzioni di probabilità.

Se abbiamo due distribuzioni di probabilità, P e Q, generalmente scriviamo la divergenza KL usando la notazione KL(P || Q), che significa “divergenza di P da Q”.

Lo calcoliamo utilizzando la seguente formula:

KL(P || Q) = ΣP(x) ln (P(x) / Q(x))

Se la divergenza KL tra due distribuzioni è zero, ciò indica che le distribuzioni sono identiche.

Il modo più semplice per calcolare la divergenza KL tra due distribuzioni di probabilità in R è utilizzare la funzione KL() del pacchetto philentropy .

L’esempio seguente mostra come utilizzare questa funzione nella pratica.

Esempio: calcolo della divergenza KL in R

Supponiamo di avere le seguenti due distribuzioni di probabilità in R:

 #define two probability distributions
P <- c(.05, .1, .2, .05, .15, .25, .08, .12)
Q <- c(.3, .1, .2, .1, .1, .02, .08, .1)

Nota : è importante che la somma delle probabilità di ciascuna distribuzione sia pari a uno.

Possiamo usare il seguente codice per calcolare la divergenza KL tra le due distribuzioni:

 library (philentropy)

#rbind distributions into one matrix
x <- rbind(P,Q)

#calculate KL divergence
KL(x, unit=' log ')

Metric: 'kullback-leibler' using unit: 'log'; comparing: 2 vectors.
kullback-leibler 
       0.5898852 

La divergenza KL della distribuzione P dalla distribuzione Q è circa 0,589 .

Tieni presente che le unità utilizzate in questo calcolo sono note come nat , che è l’abbreviazione di unità naturale di informazione .

Quindi diremmo che la divergenza KL è 0,589 nat .

Si noti inoltre che la divergenza KL non è una metrica simmetrica. Ciò significa che se calcoliamo la divergenza KL della distribuzione Q dalla distribuzione P, probabilmente otterremo un valore diverso:

 library (philentropy)

#rbind distributions into one matrix
x <- rbind(Q,P)

#calculate KL divergence
KL(x, unit=' log ')

Metric: 'kullback-leibler' using unit: 'log'; comparing: 2 vectors.
kullback-leibler 
       0.4975493 

La divergenza KL della distribuzione Q dalla distribuzione P è di circa 0,497 nat .

Si noti inoltre che alcune formule utilizzano log base-2 per calcolare la divergenza KL. In questo caso parliamo di divergenza in termini di bit anziché di nat.

Per calcolare la divergenza KL in termini di bit, puoi utilizzare log2 nell’argomento unità :

 library (philentropy)

#rbind distributions into one matrix
x <- rbind(P,Q)

#calculate KL divergence (in bits)
KL(x, unit=' log2 ')

Metric: 'kullback-leibler' using unit: 'log2'; comparing: 2 vectors.
kullback-leibler 
       0.7178119

La divergenza KL della distribuzione P dalla distribuzione Q è di circa 0,7178 bit .

Risorse addizionali

I seguenti tutorial spiegano come eseguire altre attività comuni in R:

Come generare una distribuzione normale in R
Come tracciare una distribuzione normale in R

Aggiungi un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *