tf.compat.v1.distributions.Distribution
Базовый класс для распределений вероятностей.
tf.compat.v1.distributions.Distribution(
dtype,
reparameterization_type,
validate_args,
allow_nan_stats,
parameters=None,
graph_parents=None,
name=None
)
Distribution является базовым классом для построения и организации свойств (например, среднее значение, дисперсия) случайных величин (например, Бернулли, Гаусса).
Наследование
Подклассы должны реализовать функцию с ведущим подчеркиванием с тем же именем. Подпись аргументов должна быть идентичной, за исключением отсутствия name="...". Например, чтобы включить log_prob(value, name="log_prob"), подкласс должен реализовать _log_prob(value).
Подклассы могут добавлять информацию в общедоступную документацию, предоставив строки документации для своих специализаций методов. Например:
@util.AppendDocstring("Some other details.")
def _log_prob(self, value):
...
добавит строку «Дополнительные детали.» к строке документации функции log_prob. Это реализовано как простой декоратор, чтобы избежать жалоб линтера Python о пропущенных разделах Args/Returns/Raises в частичных строках документации.
Трансляция, пакетная обработка и формы
Все распределения поддерживают пакеты независимых распределений этого типа. Форма пакета определяется путем трансляции параметров.
Форма аргументов для __init__, cdf, log_cdf, prob и log_prob отражает эту трансляцию, как и возвращаемое значение sample и sample_n.
sample_n_shape = [n] + batch_shape + event_shape, где sample_n_shape — форма Tensor, возвращаемая sample_n, n — количество выборок, batch_shape определяет, сколько независимых распределений, а event_shape определяет форму выборок из каждого из этих независимых распределений. Выборки независимы вдоль измерений batch_shape, но не обязательно вдоль измерений event_shape (в зависимости от особенностей базового распределения).
Используя распределение Uniform в качестве примера:
minval = 3.0
maxval = [[4.0, 6.0],
[10.0, 12.0]]
# Broadcasting:
# This instance represents 4 Uniform distributions. Each has a lower bound at
# 3.0 as the `minval` parameter was broadcasted to match `maxval`'s shape.
u = Uniform(minval, maxval)
# `event_shape` is `TensorShape([])`.
event_shape = u.event_shape
# `event_shape_t` is a `Tensor` which will evaluate to [].
event_shape_t = u.event_shape_tensor()
# Sampling returns a sample per distribution. `samples` has shape
# [5, 2, 2], which is [n] + batch_shape + event_shape, where n=5,
# batch_shape=[2, 2], and event_shape=[].
samples = u.sample_n(5)
# The broadcasting holds across methods. Here we use `cdf` as an example. The
# same holds for `log_cdf` and the likelihood functions.
# `cum_prob` has shape [2, 2] as the `value` argument was broadcasted to the
# shape of the `Uniform` instance.
cum_prob_broadcast = u.cdf(4.0)
# `cum_prob`'s shape is [2, 2], one per distribution. No broadcasting
# occurred.
cum_prob_per_dist = u.cdf([[4.0, 5.0],
[6.0, 7.0]])
# INVALID as the `value` argument is not broadcastable to the distribution's
# shape.
cum_prob_invalid = u.cdf([4.0, 5.0, 6.0])
Формы
Существует три важных понятия, связанных с формами распределений TensorFlow:
- Форма события описывает форму одного случайного отбора из распределения; она может зависеть от измерений. Для скалярных распределений форма события равна
[]. Для 5-мерного MultivariateNormal форма события равна[5]. - Форма пакета описывает независимые, но не одинаково распределенные выборки, известные как «коллекция» или «группа» распределений.
- Форма выборки описывает независимые, одинаково распределенные выборки пакетов из семейства распределений.
Форма события и форма пакета являются свойствами объекта Distribution, а форма выборки связана с конкретным вызовом sample или log_prob.
Подробные примеры использования форм распределений TensorFlow см. в этом руководстве
Значения параметров, приводящие к неопределённым статистическим данным или распределениям.
У некоторых распределений нет хорошо определённых статистических данных для всех значений параметров инициализации. Например, бета-распределение параметризуется положительными действительными числами concentration1 и concentration0, и не имеет чётко определённой моды, если concentration1 < 1 или concentration0 < 1.
Пользователь может выбрать либо поднятие исключения, либо возвращение NaN.
a = tf.exp(tf.matmul(logits, weights_a)) b = tf.exp(tf.matmul(logits, weights_b)) # Will raise exception if ANY batch member has a < 1 or b < 1. dist = distributions.beta(a, b, allow_nan_stats=False) mode = dist.mode().eval() # Will return NaN for batch members with either a < 1 or b < 1. dist = distributions.beta(a, b, allow_nan_stats=True) # Default behavior mode = dist.mode().eval()
Во всех случаях, исключение возникает, если переданы некорректные параметры, например:
# Will raise an exception if any Op is run. negative_a = -1.0 * a # beta distribution by definition has a > 0. dist = distributions.beta(negative_a, b, allow_nan_stats=True) dist.mean().eval()
| Аргументы | |
|---|---|
dtype | Тип событийных выборок. None подразумевает отсутствие проверки типа. |
reparameterization_type | Экземпляр ReparameterizationType. Если distributions.FULLY_REPARAMETERIZED, это Distribution может быть перепараметризован в терминах некоторого стандартного распределения с функцией, чья якобиан является постоянной для области определения стандартного распределения. Если distributions.NOT_REPARAMETERIZED, то такая перепараметризация недоступна. |
validate_args | Python-bool, по умолчанию False. Когда True параметры распределения проверяются на корректность, несмотря на возможные ухудшение производительности во время выполнения. Когда False некорректные входные данные могут молча привести к неверным результатам. |
allow_nan_stats | Python-bool, по умолчанию True. Когда True, статистики (например, среднее значение, мода, дисперсия) используют значение «NaN» для указания того, что результат неопределён. Когда False, возникает исключение, если один или несколько элементов пакетных статистических данных неопределены. |
parameters | Python-dict параметров, используемых для создания этого Distribution. |
graph_parents | Python-list предварительных условий графа для этого Distribution. |
name | Python-str имя, добавленное в начало операций, созданных этим классом. По умолчанию: имя подкласса. |
| Исключения | |
|---|---|
ValueError | если любой член graph_parents является None или не является Tensor. |
| Атрибуты | |
|---|---|
allow_nan_stats | Python-bool, описывающий поведение при неопределённом статистическом показателе. Статистические данные возвращают +/- бесконечность, когда это имеет смысл. Например, дисперсия распределения Коши равна бесконечности. Однако иногда статистический показатель неопределён, например, если плотность вероятности распределения не достигает максимума внутри области определения распределения, мода неопределённа. Если среднее значение неопределённо, то по определению дисперсия также неопределённа. Например, среднее значение для распределения Стьюдента для df = 1 неопределённо (нет ясного способа сказать, что оно либо + или - бесконечность), поэтому дисперсия = E[(X - среднее)**2] также неопределённа. |
batch_shape | Форма одной выборки из одного индекса события как TensorShape. Может быть частично определена или неизвестна. Размерности пакета являются индексами в независимые, но не одинаково распределённые параметризации данного распределения. |
dtype | DType Tensor, обрабатываемых этим Distribution. |
event_shape | Форма одной выборки из одного пакета как TensorShape. Может быть частично определена или неизвестна. |
name | Имя, добавленное в начало всех операций, созданных этим Distribution. |
parameters | Словарь параметров, используемых для создания этого Distribution. |
reparameterization_type | Описание того, как выборки из распределения перепараметризуются. В настоящее время это один из статических экземпляров |
validate_args | Python-bool, указывающий, что, возможно, дорогостоящие проверки включены. |
Методы
batch_shape_tensor
batch_shape_tensor(
name='batch_shape_tensor'
)
Форма одной выборки из одного индекса события как одномерный Tensor.
Размерности пакета являются индексами в независимые, но не одинаково распределённые параметризации данного распределения.
| Аргументы | |
|---|---|
name | имя для операции |
| Возвращаемое значение | |
|---|---|
batch_shape | Tensor. |
cdf
cdf(
value, name='cdf'
)
Функция кумулятивного распределения.
Для случайной переменной X, функция кумулятивного распределения cdf:
cdf(x) := P[X <= x]
| Аргументы | |
|---|---|
value | float или double Tensor. |
name | Строка Python, добавляемая к именам операций, созданных этой функцией. |
| Возвращаемое значение | |
|---|---|
cdf | тензор формы sample_shape(x) + self.batch_shape с значениями типа self.dtype. |
copy
copy(
**override_parameters_kwargs
)
Создаёт глубокую копию распределения.
Примечание: распределение копии может по-прежнему зависеть от исходных аргументов инициализации.
| Аргументы | |
|---|---|
**override_parameters_kwargs | Словарь со строковыми/числовыми ключами и значениями, которые нужно переопределить с новыми. |
| Возвращаемое значение | |
|---|---|
distribution | Новый экземпляр type(self), инициализированный на основе объединения self.parameters и override_parameters_kwargs, т.е. dict(self.parameters, **override_parameters_kwargs). |
covariance
covariance(
name='covariance'
)
Ковариация.
Ковариация (возможно) определена только для распределений с нескалярными событиями.
Например, для векторного распределения длины k, она вычисляется как:
Cov[i, j] = Covariance(X_i, X_j) = E[(X_i - E[X_i]) (X_j - E[X_j])]
где Cov — (пакет) матрица k x k, 0 <= (i, j) < k, а E обозначает математическое ожидание.
В альтернативе, для не векторных, многомерных распределений (например, матричных, Вишарта), Covariance вернёт (пакет) матриц при некотором векторизации событий, т.е.:
Cov[i, j] = Covariance(Vec(X)_i, Vec(X)_j) = [as above]
где Cov — (пакет) матриц k' x k', 0 <= (i, j) < k' = reduce_prod(event_shape), а Vec — некая функция, сопоставляющая индексы размерностей событий этого распределения индексам длины-k' вектора.
| Аргументы | |
|---|---|
name | Строка Python, добавляемая к именам операций, созданных этой функцией. |
| Возвращаемое значение | |
|---|---|
covariance | Числовой тензор с плавающей точкой, имеющий форму [B1, ..., Bn, k', k'], где первые n измерения являются координатой пакета, а k' = reduce_prod(self.event_shape). |
cross_entropy
cross_entropy(
other, name='cross_entropy'
)
Вычисляет (Шеннона) кросс-энтропию.
Обозначим это распределение (self) как P, а распределение other как Q. Предполагая, что P, Q абсолютно непрерывны друг относительно друга и допускают плотности p(x) dr(x) и q(x) dr(x), (Шеннона) кросс-энтропия определяется как:
H[P, Q] = E_p[-log q(X)] = -int_F p(x) log q(x) dr(x)
где F обозначает область определения случайной переменной X ~ P.
| Аргументы | |
|---|---|
other | экземпляр tfp.distributions.Distribution. |
name | Строка Python, добавляемая к именам операций, созданных этой функцией. |
| Возвращаемое значение | |
|---|---|
cross_entropy | Числовой тензор с формой [B1, ..., Bn], представляющий собой различные вычисления (Шеннона) кросс-энтропии. |
entropy
entropy(
name='entropy'
)
Энтропия Шеннона в натах.
event_shape_tensor
event_shape_tensor(
name='event_shape_tensor'
)
Форма одного образца из одного набора в виде 1-мерного целочисленного Tensor.
| Аргументы | |
|---|---|
name | имя для операции |
| Возвращаемое значение | |
|---|---|
event_shape | Tensor. |
is_scalar_batch
is_scalar_batch(
name='is_scalar_batch'
)
Указывает, что batch_shape == [].
| Аргументы | |
|---|---|
name | Строка Python, добавляемая к именам операций, созданных этой функцией. |
| Возвращаемое значение | |
|---|---|
is_scalar_batch | Логический скаляр Tensor. |
is_scalar_event
is_scalar_event(
name='is_scalar_event'
)
Указывает, что event_shape == [].
| Аргументы | |
|---|---|
name | Строка Python, добавляемая к именам операций, созданных этой функцией. |
| Возвращаемое значение | |
|---|---|
is_scalar_event | Логический скаляр Tensor. |
kl_divergence
kl_divergence(
other, name='kl_divergence'
)
Вычисляет расстояние Кульбака-Лейблера.
Обозначим это распределение (self) как p, а распределение other как q. Предполагая, что p, q абсолютно непрерывны относительно опорного распределения r, расстояние Кульбака-Лейблера определяется как:
KL[p, q] = E_p[log(p(X)/q(X))]
= -int_F p(x) log q(x) dr(x) + int_F p(x) log p(x) dr(x)
= H[p, q] - H[p]
где F обозначает область определения случайной переменной X ~ p, H[., .] обозначает (Шеннона) кросс-энтропию, а H[.] обозначает (Шеннона) энтропию.
| Аргументы | |
|---|---|
other | экземпляр tfp.distributions.Distribution. |
name | Строка Python, добавляемая к именам операций, созданных этой функцией. |
| Возвращаемое значение | |
|---|---|
kl_divergence | Числовой тензор с формой [B1, ..., Bn], представляющий собой различные вычисления расхождения Кульбака-Лейблера. |
log_cdf
log_cdf(
value, name='log_cdf'
)
Логарифмическая функция кумулятивного распределения.
Для случайной переменной X, функция кумулятивного распределения cdf:
log_cdf(x) := Log[ P[X <= x] ]
Часто для log_cdf(x) можно использовать численное приближение, которое даёт более точный результат, чем просто взятие логарифма от cdf, когда x << -1.
| Аргументы | |
|---|---|
value | float или double Tensor. |
name | Python str, добавляемое в имена операций, созданных этой функцией. |
| Возвращаемое значение | |
|---|---|
logcdf | Tensor формы sample_shape(x) + self.batch_shape со значениями типа self.dtype. |
log_prob
log_prob(
value, name='log_prob'
)
Функция логарифмической плотности/вероятности.
| Аргументы | |
|---|---|
value | float или double Tensor. |
name | Python str, добавляемое в имена операций, созданных этой функцией. |
| Возвращаемое значение | |
|---|---|
log_prob | Tensor формы sample_shape(x) + self.batch_shape со значениями типа self.dtype. |
log_survival_function
log_survival_function(
value, name='log_survival_function'
)
Функция логарифма функции выживаемости.
Для случайной величины X функция выживаемости определяется следующим образом:
log_survival_function(x) = Log[ P[X > x] ]
= Log[ 1 - P[X <= x] ]
= Log[ 1 - cdf(x) ]
Обычно для логарифмической функции выживаемости можно использовать различные численные приближения, которые более точны, чем 1 - cdf(x), когда x >> 1.
| Аргументы | |
|---|---|
value | float или double Tensor. |
name | Python str, добавляемое в имена операций, созданных этой функцией. |
| Возвращаемое значение | |
|---|---|
Tensor формы sample_shape(x) + self.batch_shape со значениями типа self.dtype. |
mean
mean(
name='mean'
)
Математическое ожидание.
mode
mode(
name='mode'
)
Мода.
param_shapes
@classmethod
param_shapes(
sample_shape, name='DistributionParamShapes'
)
Формы параметров, заданных желаемой формой вызова sample().
Это метод класса, описывающий необходимые ключевые/значения аргументы для создания данного Distribution, чтобы для вызова sample() этого экземпляра возвращалась определённая форма.
Подклассы должны переопределять метод класса _param_shapes.
| Аргументы | |
|---|---|
sample_shape | Tensor или список/кортеж Python. Желаемая форма вызова sample(). |
name | Имя для добавления к операциям. |
| Возвращаемое значение | |
|---|---|
Словарь имени параметра к формам Tensor. |
param_static_shapes
@classmethod
param_static_shapes(
sample_shape
)
param_shapes со статическими (т.е. TensorShape) формами.
Это метод класса, описывающий необходимые ключевые/значения аргументы для создания данного Distribution, чтобы для вызова sample() этого экземпляра возвращалась определённая форма. Предполагается, что форма выборки известна статически.
Подклассы должны переопределять метод класса _param_shapes, чтобы возвращать тензоры с постоянными значениями при подаче постоянных значений.
| Аргументы | |
|---|---|
sample_shape | TensorShape или список/кортеж Python. Желаемая форма вызова sample(). |
| Возвращаемое значение | |
|---|---|
Словарь имени параметра к статическим формам TensorShape. |
| Исключения | |
|---|---|
ValueError | если sample_shape является TensorShape и не полностью определён. |
prob
prob(
value, name='prob'
)
Функция плотности/массы вероятности.
| Аргументы | |
|---|---|
value | float или double Tensor. |
name | Python str, добавляемое в имена операций, созданных этой функцией. |
| Возвращаемое значение | |
|---|---|
prob | Tensor формы sample_shape(x) + self.batch_shape со значениями типа self.dtype. |
quantile
quantile(
value, name='quantile'
)
Функция квантиля. Также известна как "обратная функция распределения" или "функция точки процентиля".
Для случайной величины X и p in [0, 1], quantile:
quantile(p) := x such that P[X <= x] == p
| Аргументы | |
|---|---|
value | float или double Tensor. |
name | Python str, добавляемое в имена операций, созданных этой функцией. |
| Возвращаемое значение | |
|---|---|
quantile | Tensor формы sample_shape(x) + self.batch_shape со значениями типа self.dtype. |
sample
sample(
sample_shape=(), seed=None, name='sample'
)
Генерирует выборки заданной формы.
Обратите внимание, что вызов sample() без аргументов сгенерирует одну выборку.
| Аргументы | |
|---|---|
sample_shape | 0D или 1D int32 Tensor. Форма генерируемых выборок. |
seed | Целое число Python seed для генератора псевдослучайных чисел. |
name | Имя, которое нужно дать операции. |
| Возвращаемое значение | |
|---|---|
samples | Tensor с добавленными измерениями sample_shape. |
stddev
stddev(
name='stddev'
)
Среднее квадратическое отклонение.
Среднее квадратическое отклонение определяется как,
stddev = E[(X - E[X])**2]**0.5
где X — случайная величина, связанная с этим распределением, E обозначает математическое ожидание, а stddev.shape = batch_shape + event_shape.
| Аргументы | |
|---|---|
name | Python str, добавляемое в имена операций, созданных этой функцией. |
| Возвращаемое значение | |
|---|---|
stddev | Число с плавающей запятой Tensor с формой, идентичной batch_shape + event_shape, то есть такой же формой, как и self.mean(). |
survival_function
survival_function(
value, name='survival_function'
)
Функция выживаемости.
Для случайной величины X функция выживаемости определяется следующим образом:
survival_function(x) = P[X > x]
= 1 - P[X <= x]
= 1 - cdf(x).
| Аргументы | |
|---|---|
value | float или double Tensor. |
name | Строка Python, добавляемая в префикс имен операций, созданных этой функцией. |
| Возвращаемое значение | |
|---|---|
Tensor с формой sample_shape(x) + self.batch_shape и значениями типа self.dtype. |
variance
variance(
name='variance'
)
Дисперсия.
Дисперсия определяется как,
Var = E[(X - E[X])**2]
где X — случайная величина, связанная с этим распределением, E обозначает математическое ожидание, а Var.shape = batch_shape + event_shape.
| Аргументы | |
|---|---|
name | Строка Python, добавляемая в префикс имен операций, созданных этой функцией. |
| Возвращаемое значение | |
|---|---|
variance | Число с плавающей запятой Tensor с формой, идентичной batch_shape + event_shape, то есть такой же формой, как и self.mean(). |
© 2022 The TensorFlow Authors. All rights reserved.
Licensed under the Creative Commons Attribution License 4.0.
Code samples licensed under the Apache 2.0 License.
https://www.tensorflow.org/api_docs/python/tf/compat/v1/distributions/Distribution