Как рассчитать дивергенцию kl в r (с примером)


В статистике расхождение Кульбака-Лейблера (КЛ) представляет собой метрику расстояния, которая количественно определяет разницу между двумя распределениями вероятностей.

Если у нас есть два распределения вероятностей, 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 , что является сокращением от естественной единицы информации .

Таким образом, мы бы сказали, что дивергенция KL составляет 0,589 нат .

Также обратите внимание, что дивергенция 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 нат .

Также обратите внимание, что в некоторых формулах для расчета расхождения KL используется логарифм по основанию 2. В данном случае речь идет о дивергенции в битах , а не в нацах.

Чтобы вычислить расхождение 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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *