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

Einen Kommentar hinzufügen

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