Як обчислити розбіжність 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

Додати коментар

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *