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

Таким образом, мы бы сказали, что расхождение 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 нац .

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

Дополнительные ресурсы

В следующих руководствах объясняется, как выполнять другие распространенные операции в Python:

Как создать корреляционную матрицу в Python
Как создать ковариационную матрицу в Python

Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.