Hoe kl-divergentie in python te berekenen (met voorbeeld)
In de statistiek is de Kullback-Leibler (KL)-divergentie een afstandsmetriek die het verschil tussen twee waarschijnlijkheidsverdelingen kwantificeert.
Als we twee kansverdelingen hebben, P en Q, schrijven we de KL-divergentie doorgaans met de notatie KL(P || Q), wat „divergentie van P van Q“ betekent.
We berekenen het met de volgende formule:
KL(P || Q) = ΣP(x) ln (P(x) / Q(x))
Als de KL-divergentie tussen twee verdelingen nul is, geeft dit aan dat de verdelingen identiek zijn.
We kunnen de functie scipy.special.rel_entr() gebruiken om de KL-divergentie tussen twee waarschijnlijkheidsverdelingen in Python te berekenen.
Het volgende voorbeeld laat zien hoe u deze functie in de praktijk kunt gebruiken.
Voorbeeld: berekening van de KL-divergentie in Python
Stel dat we in Python de volgende twee kansverdelingen hebben:
Opmerking : Het is belangrijk dat de kansen van elke verdeling opgeteld één zijn.
#define two probability distributions
P = [.05, .1, .2, .05, .15, .25, .08, .12]
Q = [.3, .1, .2, .1, .1, .02, .08, .1]
We kunnen de volgende code gebruiken om de KL-divergentie tussen de twee distributies te berekenen:
from scipy. special import rel_entr
#calculate (P || Q)
sum(rel_entr(P, Q))
0.589885181619163
De KL-divergentie van de P-verdeling ten opzichte van de Q-verdeling bedraagt ongeveer 0,589 .
Merk op dat de eenheden die bij deze berekening worden gebruikt, bekend staan als nats , wat een afkorting is van Natural Unit of Information .
We zouden dus zeggen dat de KL-divergentie 0,589 nats is.
Merk ook op dat KL-divergentie geen symmetrische metriek is. Dit betekent dat als we de KL-divergentie van de Q-verdeling berekenen ten opzichte van de P-verdeling, we waarschijnlijk een andere waarde zullen krijgen:
from scipy. special import rel_entr
#calculate (Q || P)
sum(rel_entr(Q, P))
0.497549319448034
De KL-divergentie van de Q-verdeling ten opzichte van de P-verdeling bedraagt ongeveer 0,497 nats .
Opmerking : sommige formules gebruiken logbasis-2 om KL-divergentie te berekenen. In dit geval hebben we het over divergentie in termen van bits in plaats van nats.
Aanvullende bronnen
In de volgende tutorials wordt uitgelegd hoe u andere veelvoorkomende bewerkingen in Python uitvoert:
Hoe u een correlatiematrix in Python maakt
Hoe u een covariantiematrix in Python maakt