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