Як обчислити розбіжність kl у python (з прикладом)
У статистиці розбіжність Кульбака–Лейблера (KL) — це метрика відстані, яка кількісно визначає різницю між двома розподілами ймовірностей.
Якщо у нас є два розподіли ймовірностей, P і Q, ми зазвичай записуємо розбіжність KL, використовуючи позначення KL(P || Q), що означає «розбіжність P від Q».
Розраховуємо його за такою формулою:
KL(P || Q) = ΣP(x) ln (P(x) / Q(x))
Якщо розбіжність KL між двома розподілами дорівнює нулю, це означає, що розподіли ідентичні.
Ми можемо використовувати функцію scipy.special.rel_entr() для обчислення розбіжності KL між двома розподілами ймовірностей у Python.
У наступному прикладі показано, як використовувати цю функцію на практиці.
Приклад: обчислення розбіжності KL у Python
Припустімо, що ми маємо такі два розподіли ймовірностей у Python:
Примітка . Важливо, щоб сума ймовірностей кожного розподілу дорівнювала одиниці.
#define two probability distributions
P = [.05, .1, .2, .05, .15, .25, .08, .12]
Q = [.3, .1, .2, .1, .1, .02, .08, .1]
Ми можемо використати такий код, щоб обчислити розбіжність KL між двома розподілами:
from scipy. special import rel_entr
#calculate (P || Q)
sum(rel_entr(P, Q))
0.589885181619163
Розбіжність KL розподілу P від розподілу Q становить приблизно 0,589 .
Зверніть увагу, що одиниці, які використовуються в цьому обчисленні, відомі як nats , що є скороченням від natural unit of information .
Отже, ми б сказали, що розбіжність KL становить 0,589 nats .
Також зауважте, що дивергенція KL не є симетричною метрикою. Це означає, що якщо ми обчислимо розбіжність KL розподілу Q від розподілу P, ми, ймовірно, отримаємо інше значення:
from scipy. special import rel_entr
#calculate (Q || P)
sum(rel_entr(Q, P))
0.497549319448034
Розбіжність KL розподілу Q від розподілу P становить приблизно 0,497 nats .
Примітка . Деякі формули використовують логарифм за основою 2 для обчислення розбіжності KL. У цьому випадку ми говоримо про розбіжності в термінах бітів , а не нат.
Додаткові ресурси
У наступних посібниках пояснюється, як виконувати інші типові операції в Python:
Як створити кореляційну матрицю в Python
Як створити коваріаційну матрицю в Python