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

Einen Kommentar hinzufügen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert