Jak obliczyć rozbieżność kl w r (z przykładem)
W statystyce rozbieżność Kullbacka-Leiblera (KL) jest metryką odległości, która określa ilościowo różnicę między dwoma rozkładami prawdopodobieństwa.
Jeśli mamy dwa rozkłady prawdopodobieństwa, P i Q, generalnie rozbieżność KL zapisujemy za pomocą notacji KL(P || Q), co oznacza „rozbieżność P od Q”.
Obliczamy to za pomocą następującego wzoru:
KL(P || Q) = ΣP(x) ln (P(x) / Q(x))
Jeżeli rozbieżność KL pomiędzy dwoma rozkładami wynosi zero, oznacza to, że rozkłady są identyczne.
Najprostszym sposobem obliczenia rozbieżności KL pomiędzy dwoma rozkładami prawdopodobieństwa w R jest użycie funkcji KL() z pakietu Philentropy .
Poniższy przykład pokazuje, jak w praktyce wykorzystać tę funkcję.
Przykład: obliczenie rozbieżności KL w R
Załóżmy, że mamy następujące dwa rozkłady prawdopodobieństwa w 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)
Uwaga : Ważne jest, aby prawdopodobieństwa każdego rozkładu sumowały się do jednego.
Możemy użyć następującego kodu do obliczenia rozbieżności KL pomiędzy dwoma rozkładami:
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
Rozbieżność KL rozkładu P od rozkładu Q wynosi w przybliżeniu 0,589 .
Należy pamiętać, że jednostki używane w tych obliczeniach nazywane są nats , co jest skrótem od naturalnej jednostki informacji .
Powiedzielibyśmy więc, że rozbieżność KL wynosi 0,589 nat .
Należy również pamiętać, że rozbieżność KL nie jest metryką symetryczną. Oznacza to, że jeśli obliczymy rozbieżność KL rozkładu Q z rozkładu P, prawdopodobnie otrzymamy inną wartość:
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
Rozbieżność KL rozkładu Q od rozkładu P wynosi około 0,497 nat .
Należy również pamiętać, że w niektórych formułach do obliczenia rozbieżności KL używa się logarytmu o podstawie 2. W tym przypadku mówimy o rozbieżności w kategoriach bitów , a nie NAT.
Aby obliczyć rozbieżność KL w bitach, możesz użyć log2 w argumencie jednostkowym :
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
Rozbieżność KL rozkładu P od rozkładu Q wynosi w przybliżeniu 0,7178 bitów .
Dodatkowe zasoby
Poniższe samouczki wyjaśniają, jak wykonywać inne typowe zadania w języku R:
Jak wygenerować rozkład normalny w R
Jak wykreślić rozkład normalny w R