Як розрахувати розбіжність kl в r (з прикладом)
У статистиці розбіжність Кульбака–Лейблера (KL) — це метрика відстані, яка кількісно визначає різницю між двома розподілами ймовірностей.
Якщо у нас є два розподіли ймовірностей, P і Q, ми зазвичай записуємо розбіжність KL, використовуючи позначення KL(P || Q), що означає «розбіжність P від Q».
Розраховуємо його за такою формулою:
KL(P || Q) = ΣP(x) ln (P(x) / Q(x))
Якщо розбіжність KL між двома розподілами дорівнює нулю, це означає, що розподіли ідентичні.
Найпростіший спосіб обчислити розбіжність KL між двома розподілами ймовірностей у R – це використовувати функцію KL() із пакету philentropy .
У наступному прикладі показано, як використовувати цю функцію на практиці.
Приклад: обчислення розбіжності KL в R
Припустимо, ми маємо наступні два розподіли ймовірностей в 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)
Примітка . Важливо, щоб сума ймовірностей кожного розподілу дорівнювала одиниці.
Ми можемо використати такий код, щоб обчислити розбіжність KL між двома розподілами:
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
Розбіжність KL розподілу P від розподілу Q становить приблизно 0,589 .
Зверніть увагу, що одиниці, які використовуються в цьому обчисленні, відомі як nats , що є скороченням від natural unit of information .
Отже, ми б сказали, що розбіжність KL становить 0,589 nats .
Також зауважте, що дивергенція KL не є симетричною метрикою. Це означає, що якщо ми обчислимо розбіжність KL розподілу Q від розподілу P, ми, ймовірно, отримаємо інше значення:
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
Розбіжність KL розподілу Q від розподілу P становить приблизно 0,497 nats .
Також зауважте, що деякі формули використовують log base-2 для обчислення розбіжності KL. У цьому випадку ми говоримо про розбіжності в термінах бітів , а не нат.
Щоб обчислити розбіжність KL у бітах, ви можете використовувати log2 в одиничному аргументі:
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
Розбіжність KL розподілу P від розподілу Q становить приблизно 0,7178 біта .
Додаткові ресурси
У наступних посібниках пояснюється, як виконувати інші типові завдання в R:
Як створити нормальний розподіл у R
Як побудувати графік нормального розподілу в R