Jak obliczyć rozbieżność kl w pythonie (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, zazwyczaj 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.

Możemy użyć funkcji scipy.special.rel_entr() do obliczenia rozbieżności KL pomiędzy dwoma rozkładami prawdopodobieństwa w Pythonie.

Poniższy przykład pokazuje, jak w praktyce wykorzystać tę funkcję.

Przykład: obliczenie rozbieżności KL w Pythonie

Załóżmy, że w Pythonie mamy następujące dwa rozkłady prawdopodobieństwa:

Uwaga : Ważne jest, aby prawdopodobieństwa każdego rozkładu sumowały się do jednego.

 #define two probability distributions
P = [.05, .1, .2, .05, .15, .25, .08, .12]
Q = [.3, .1, .2, .1, .1, .02, .08, .1]

Możemy użyć następującego kodu do obliczenia rozbieżności KL pomiędzy dwoma rozkładami:

 from scipy. special import rel_entr

#calculate (P || Q)
sum(rel_entr(P, Q))

0.589885181619163

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ść:

 from scipy. special import rel_entr

#calculate (Q || P)
sum(rel_entr(Q, P))

0.497549319448034

Rozbieżność KL rozkładu Q od rozkładu P wynosi około 0,497 nat .

Uwaga : w niektórych wzorach 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.

Dodatkowe zasoby

Poniższe samouczki wyjaśniają, jak wykonywać inne typowe operacje w Pythonie:

Jak utworzyć macierz korelacji w Pythonie
Jak utworzyć macierz kowariancji w Pythonie

Dodaj komentarz

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