Come calcolare la divergenza kl in python (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.

Possiamo usare la funzione scipy.special.rel_entr() per calcolare la divergenza KL tra due distribuzioni di probabilità in Python.

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

Esempio: calcolo della divergenza KL in Python

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

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

 #define two probability distributions
P = [.05, .1, .2, .05, .15, .25, .08, .12]
Q = [.3, .1, .2, .1, .1, .02, .08, .1]

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

 from scipy. special import rel_entr

#calculate (P || Q)
sum(rel_entr(P, Q))

0.589885181619163

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:

 from scipy. special import rel_entr

#calculate (Q || P)
sum(rel_entr(Q, P))

0.497549319448034

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

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

Risorse addizionali

I seguenti tutorial spiegano come eseguire altre operazioni comuni in Python:

Come creare una matrice di correlazione in Python
Come creare una matrice di covarianza in Python

Aggiungi un commento

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