Як розрахувати розбіжність 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

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

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