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

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *