Hoe kl-divergentie in r 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.

De eenvoudigste manier om de KL-divergentie tussen twee waarschijnlijkheidsverdelingen in R te berekenen, is door de functie KL() uit het philentropy- pakket te gebruiken.

Het volgende voorbeeld laat zien hoe u deze functie in de praktijk kunt gebruiken.

Voorbeeld: KL-divergentie in R berekenen

Stel dat we de volgende twee kansverdelingen in R hebben:

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

Opmerking : Het is belangrijk dat de kansen van elke verdeling opgeteld één zijn.

We kunnen de volgende code gebruiken om de KL-divergentie tussen de twee distributies te berekenen:

 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 

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 bedraagt.

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:

 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 

De KL-divergentie van de Q-verdeling ten opzichte van de P-verdeling bedraagt ongeveer 0,497 nats .

Merk ook op dat sommige formules logbasis-2 gebruiken om KL-divergentie te berekenen. In dit geval hebben we het over divergentie in termen van bits in plaats van nats.

Om de KL-divergentie in termen van bits te berekenen, kun je log2 gebruiken in het eenheidsargument :

 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

De KL-divergentie van de P-verdeling ten opzichte van de Q-verdeling bedraagt ongeveer 0,7178 bits .

Aanvullende bronnen

In de volgende tutorials wordt uitgelegd hoe u andere veelvoorkomende taken in R kunt uitvoeren:

Hoe een normale verdeling in R te genereren
Hoe een normale verdeling in R te plotten

Einen Kommentar hinzufügen

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