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