So berechnen sie die kl-divergenz in r (mit beispiel)
In der Statistik ist die Kullback-Leibler-Divergenz (KL) eine Distanzmetrik, die den Unterschied zwischen zwei Wahrscheinlichkeitsverteilungen quantifiziert.
Wenn wir zwei Wahrscheinlichkeitsverteilungen haben, P und Q, schreiben wir die KL-Divergenz im Allgemeinen mit der Notation KL(P || Q), was „Divergenz von P von Q“ bedeutet.
Wir berechnen es nach folgender Formel:
KL(P || Q) = ΣP(x) ln (P(x) / Q(x))
Wenn die KL-Divergenz zwischen zwei Verteilungen Null ist, bedeutet dies, dass die Verteilungen identisch sind.
Der einfachste Weg, die KL-Divergenz zwischen zwei Wahrscheinlichkeitsverteilungen in R zu berechnen, ist die Verwendung der Funktion KL() aus dem Philentropy- Paket.
Das folgende Beispiel zeigt, wie Sie diese Funktion in der Praxis nutzen können.
Beispiel: Berechnung der KL-Divergenz in R
Angenommen, wir haben die folgenden zwei Wahrscheinlichkeitsverteilungen in R:
#define two probability distributions
P <- c(.05, .1, .2, .05, .15, .25, .08, .12)
Q <- c(.3, .1, .2, .1, .1, .02, .08, .1)
Hinweis : Es ist wichtig, dass die Wahrscheinlichkeiten jeder Verteilung eins ergeben.
Wir können den folgenden Code verwenden, um die KL-Divergenz zwischen den beiden Verteilungen zu berechnen:
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
Die KL-Divergenz der P-Verteilung von der Q-Verteilung beträgt ungefähr 0,589 .
Beachten Sie, dass die in dieser Berechnung verwendeten Einheiten als Nats bezeichnet werden, was für Natural Unit of Information steht.
Wir würden also sagen, dass die KL-Divergenz 0,589 Nats beträgt.
Beachten Sie auch, dass die KL-Divergenz keine symmetrische Metrik ist. Das heißt, wenn wir die KL-Divergenz der Q-Verteilung von der P-Verteilung berechnen, erhalten wir wahrscheinlich einen anderen Wert:
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
Die KL-Divergenz der Q-Verteilung von der P-Verteilung beträgt ungefähr 0,497 Nats .
Beachten Sie außerdem, dass einige Formeln den Logarithmus zur Basis 2 verwenden, um die KL-Divergenz zu berechnen. In diesem Fall sprechen wir von Divergenz in Bezug auf Bits und nicht auf Nats.
Um die KL-Divergenz in Bits zu berechnen, können Sie log2 im Einheitenargument verwenden:
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
Die KL-Divergenz der P-Verteilung von der Q-Verteilung beträgt etwa 0,7178 Bit .
Zusätzliche Ressourcen
Die folgenden Tutorials erklären, wie Sie andere häufige Aufgaben in R ausführen:
So erzeugen Sie eine Normalverteilung in R
So zeichnen Sie eine Normalverteilung in R auf