энтропия#
- scipy.stats.энтропия(pk, qk=None, основание=None, ось=0, *, nan_policy='propagate', keepdims=False)[источник]#
Вычислить энтропию Шеннона/относительную энтропию заданного распределения(й).
Если только вероятности pk заданы, энтропия Шеннона вычисляется как
H = -sum(pk * log(pk)).Если qk не None, тогда вычислить относительную энтропию
D = sum(pk * log(pk / qk)). Эта величина также известна как дивергенция Кульбака-Лейблера.Эта процедура нормализует pk и qk если они не суммируются до 1.
- Параметры:
- pkarray_like
Определяет (дискретное) распределение. Вдоль каждого среза оси
pk, элементiэто (возможно, ненормализованная) вероятность событияi.- qkarray_like, необязательный
Последовательность, относительно которой вычисляется относительная энтропия. Должна быть в том же формате, что и pk.
- основаниеfloat, опционально
Логарифмическое основание для использования, по умолчанию
e(натуральный логарифм).- осьint или None, по умолчанию: 0
Если это целое число, ось входных данных, по которой вычисляется статистика. Статистика каждого среза по оси (например, строки) входных данных появится в соответствующем элементе вывода. Если
None, вход будет сведён в одномерный массив перед вычислением статистики.- nan_policy{‘propagate’, ‘omit’, ‘raise’}
Определяет, как обрабатывать входные значения NaN.
propagate: если NaN присутствует в срезе оси (например, строке), вдоль которой вычисляется статистика, соответствующая запись вывода будет NaN.omit: NaN будут пропущены при выполнении расчета. Если в срезе оси, вдоль которого вычисляется статистика, остается недостаточно данных, соответствующая запись вывода будет NaN.raise: если присутствует NaN, тоValueErrorбудет вызвано исключение.
- keepdimsbool, по умолчанию: False
Если установлено значение True, оси, которые были сокращены, остаются в результате как размерности с размером один. С этой опцией результат будет корректно транслироваться относительно входного массива.
- Возвращает:
- S{float, array_like}
Рассчитанная энтропия.
Примечания
Неформально, энтропия Шеннона количественно оценивает ожидаемую неопределённость, присущую возможным исходам дискретной случайной величины. Например, если сообщения, состоящие из последовательностей символов из множества, должны быть закодированы и переданы по бесшумному каналу, то энтропия Шеннона
H(pk)дает точную нижнюю границу для среднего количества единиц информации, необходимых на символ, если символы встречаются с частотами, определяемыми дискретным распределением pk [1]. Выбор основания определяет выбор единиц измерения; например,eдля nats,2для битов и т.д.Относительная энтропия,
D(pk|qk), количественно оценивает увеличение среднего количества единиц информации, необходимых на символ, если кодирование оптимизировано для распределения вероятностей qk вместо истинного распределения pk. Неформально, относительная энтропия количественно оценивает ожидаемый избыток неожиданности, испытываемый, если кто-то верит, что истинное распределение — это qk когда на самом деле pk.Связанная величина, перекрёстная энтропия
CE(pk, qk), удовлетворяет уравнениюCE(pk, qk) = H(pk) + D(pk|qk)и также может быть вычислена с помощью формулыCE = -sum(pk * log(qk)). Он даёт среднее количество единиц информации, необходимых на символ, если кодирование оптимизировано для распределения вероятностей qk когда истинное распределение pk. Не вычисляется напрямую с помощьюentropy, но его можно вычислить с помощью двух вызовов функции (см. Примеры).См. [2] для получения дополнительной информации.
Начиная с SciPy 1.9,
np.matrixвходные данные (не рекомендуется для нового кода) преобразуются вnp.ndarrayперед выполнением вычисления. В этом случае результатом будет скаляр илиnp.ndarrayподходящей формы вместо 2Dnp.matrix. Аналогично, хотя маскированные элементы маскированных массивов игнорируются, результатом будет скаляр илиnp.ndarrayвместо маскированного массива сmask=False.Ссылки
[1]Shannon, C.E. (1948), A Mathematical Theory of Communication. Bell System Technical Journal, 27: 379-423. https://doi.org/10.1002/j.1538-7305.1948.tb01338.x
[2]Томас М. Ковер и Джой А. Томас. 2006. Элементы теории информации (Серия Wiley по телекоммуникациям и обработке сигналов). Wiley-Interscience, США.
Примеры
Исход честной монеты является наиболее неопределенным:
>>> import numpy as np >>> from scipy.stats import entropy >>> base = 2 # work in units of bits >>> pk = np.array([1/2, 1/2]) # fair coin >>> H = entropy(pk, base=base) >>> H 1.0 >>> H == -np.sum(pk * np.log(pk)) / np.log(base) True
Результат подброшенной смещённой монеты менее неопределён:
>>> qk = np.array([9/10, 1/10]) # biased coin >>> entropy(qk, base=base) 0.46899559358928117
Относительная энтропия между честной и смещенной монетой рассчитывается как:
>>> D = entropy(pk, qk, base=base) >>> D 0.7369655941662062 >>> np.isclose(D, np.sum(pk * np.log(pk/qk)) / np.log(base), rtol=4e-16, atol=0) True
Перекрестная энтропия может быть рассчитана как сумма энтропии и относительной энтропии:
>>> CE = entropy(pk, base=base) + entropy(pk, qk, base=base) >>> CE 1.736965594166206 >>> CE == -np.sum(pk * np.log(qk)) / np.log(base) True