tf.contrib.distributions.VectorExponentialDiag
Векторизация распределения Экспoненциального на R^k.
tf.contrib.distributions.VectorExponentialDiag(
loc=None, scale_diag=None, scale_identity_multiplier=None, validate_args=False,
allow_nan_stats=True, name='VectorExponentialDiag'
)
Векторно-экспоненциальное распределение определено на подмножестве R^k, и параметризовано (пакетным) вектором длины k loc и (пакетной) k x k scale матрицей: covariance = scale @ scale.T, где @ обозначает матричное умножение.
Математические подробности
Функция плотности вероятности (pdf) определена на образе матрицы scale + loc, применённой к положительной полуплоскости: Supp = {loc + scale @ x : x in R^k, x_1 > 0, ..., x_k > 0}. На этом множестве,
pdf(y; loc, scale) = exp(-||x||_1) / Z, for y in Supp x = inv(scale) @ (y - loc), Z = |det(scale)|,
где:
-
loc— вектор вR^k, -
scale— линейный оператор вR^{k x k},cov = scale @ scale.T, -
Z— обозначает константу нормирования, и, -
||x||_1обозначаетl1нормуx,sum_i |x_i|.
Распределение VectorExponential является членом семейства сдвига и масштабирования, т.е. его можно сконструировать как,
X = (X_1, ..., X_k), each X_i ~ Exponential(rate=1) Y = (Y_1, ...,Y_k) = scale @ X + loc
О VectorExponential и Vector распределениях в TensorFlow.
VectorExponential — это распределение, не являющееся стандартным, но обладающее полезными свойствами.
Матричные Y_1, ..., Y_k — это не случайные величины распределения Экспoненциального, так как сумма случайных величин Экспoненциального распределения не является Экспoненциальным распределением.
Вместо этого, Y — это вектор, чьи компоненты являются линейными комбинациями случайных величин Экспoненциального распределения. Таким образом, Y находится в векторном пространстве, порожденном vectors распределениями Экспoненциального распределения. Это позволяет пользователю задать среднее значение и ковариацию (задавая loc и scale соответственно), сохраняя некоторые свойства распределения Экспoненциального распределения. В частности, хвосты Y_i будут (с точностью до полиномиальных множителей) экспоненциально убывать.
Для подтверждения последнего утверждения следует заметить, что функция плотности вероятности Y_i является сверткой функций плотности вероятности k независимых случайных величин Экспoненциального распределения. Затем можно показать индукцией, что распределения с экспоненциально (с точностью до полиномиальных множителей) убывающими хвостами замкнуты относительно свертки.
Примеры
import tensorflow_probability as tfp
tfd = tfp.distributions
# Initialize a single 2-variate VectorExponential, supported on
# {(x, y) in R^2 : x > 0, y > 0}.
# The first component has pdf exp{-x}, the second 0.5 exp{-x / 2}
vex = tfd.VectorExponentialDiag(scale_diag=[1., 2.])
# Compute the pdf of an`R^2` observation; return a scalar.
vex.prob([3., 4.]).eval() # shape: []
# Initialize a 2-batch of 3-variate Vector Exponential's.
loc = [[1., 2, 3],
[1., 0, 0]] # shape: [2, 3]
scale_diag = [[1., 2, 3],
[0.5, 1, 1.5]] # shape: [2, 3]
vex = tfd.VectorExponentialDiag(loc, scale_diag)
# Compute the pdf of two `R^3` observations; return a length-2 vector.
x = [[1.9, 2.2, 3.1],
[10., 1.0, 9.0]] # shape: [2, 3]
vex.prob(x).eval() # shape: [2]
| Аргументы | |
|---|---|
loc | Вещественные числа с плавающей точкой. Если это установлено в значение None, то loc неявно является 0. При указании может иметь форму [B1, ..., Bb, k], где b >= 0 и k — это размерность события. |
scale_diag | Неравные нулю вещественные числа с плавающей точкой, представляющие диагональную матрицу, добавляемую к scale. Может иметь форму [B1, ..., Bb, k], b >= 0, и характеризует b-пакеты k x k диагональных матриц, добавляемых к scale. Когда scale_identity_multiplier и scale_diag являются None, то scale — это Identity. |
scale_identity_multiplier | Неравные нулю вещественные числа с плавающей точкой, представляющие масштабированную единичную матрицу, добавляемую к scale. Может иметь форму [B1, ..., Bb], b >= 0, и характеризует b-пакеты масштабированных k x k единичных матриц, добавляемых к scale. Когда scale_identity_multiplier и scale_diag являются None, то scale — это Identity. |
validate_args | Python bool, по умолчанию False. Когда True параметры распределения проверяются на валидность, несмотря на возможное ухудшение производительности выполнения. Когда False, некорректные входные данные могут молчаливо приводить к неверным результатам. |
allow_nan_stats | Python bool, по умолчанию True. Когда True, статистические данные (например, среднее, мода, дисперсия) используют значение "NaN" для обозначения того, что результат не определен. Когда False, возникает исключение, если один или несколько элементов пакета статистики не определены. |
name | Python str имя, добавляемое к операциям, созданным этим классом. |
| Исключения | |
|---|---|
ValueError | если указан только scale_identity_multiplier из параметров. |
| Атрибуты | |
|---|---|
allow_nan_stats | Python bool, описывающий поведение, когда статистическая величина не определена. Статистики возвращают +/- бесконечность, когда это имеет смысл. Например, дисперсия распределения Коши равна бесконечности. Однако иногда статистика не определена, например, если функция плотности вероятности распределения не достигает максимума в области определения распределения, мода не определена. Если среднее значение не определено, то по определению дисперсия тоже не определена. Например, среднее значение для распределения Стьюдента для df = 1 не определено (нет явного способа сказать, что оно равно либо + или - бесконечности), поэтому дисперсия = E[(X - среднее)**2] также не определена. |
batch_shape | Форма одного выборки из одного индекса события в виде TensorShape. Может быть частично определена или неизвестна. Размерности пакета являются индексами в независимые, но не одинаковые параметризации этого распределения. |
bijector | Функция, преобразующая x => y. |
distribution | Базовое распределение, p(x). |
dtype | DType Tensors, обрабатываемые этим Distribution. |
event_shape | Форма одной выборки из одного пакета в виде TensorShape. Может быть частично определена или неизвестна. |
loc | loc Tensor в Y = scale @ X + loc. |
name | Имя, добавляемое ко всем операциям, созданным этим Distribution. |
parameters | Словарь параметров, используемых для создания этого Distribution. |
reparameterization_type | Описывает, как выборки из распределения перепараметризуются. В настоящее время это один из статических экземпляров |
scale | scale LinearOperator в Y = scale @ X + loc. |
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 str имя, добавляемое к именам операций, созданных этой функцией. |
| Возвращаемые значения | |
|---|---|
cdf | Tensor формы 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 str для имён операций, созданных этой функцией. |
| Возвращаемое значение | |
|---|---|
covariance | Вещественное значение Tensor с формой [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 str для имён операций, созданных этой функцией. |
| Возвращаемое значение | |
|---|---|
cross_entropy | Вещественное значение self.dtype Tensor с формой [B1, ..., Bn], представляющее n различные вычисления (Шаннон) кросс-энтропии. |
entropy
entropy(
name='entropy'
)
Энтропия Шеннона в натах.
event_shape_tensor
event_shape_tensor(
name='event_shape_tensor'
)
Форма одного образца из одной группы в виде 1-мерного целочисленного значения int32 Tensor.
| Аргументы | |
|---|---|
name | Имя для операции |
| Возвращаемое значение | |
|---|---|
event_shape | Tensor. |
is_scalar_batch
is_scalar_batch(
name='is_scalar_batch'
)
Указывает, что batch_shape == [].
| Аргументы | |
|---|---|
name | Префикс Python str для имён операций, созданных этой функцией. |
| Возвращаемое значение | |
|---|---|
is_scalar_batch | bool скаляр Tensor. |
is_scalar_event
is_scalar_event(
name='is_scalar_event'
)
Указывает, что event_shape == [].
| Аргументы | |
|---|---|
name | Префикс Python str для имён операций, созданных этой функцией. |
| Возвращаемое значение | |
|---|---|
is_scalar_event | bool скаляр 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 str для имён операций, созданных этой функцией. |
| Возвращаемое значение | |
|---|---|
kl_divergence | Вещественное значение self.dtype Tensor с формой [B1, ..., Bn], представляющее n различные вычисления расхождения Кульбака—Лейблера. |
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'
)
Логарифмическая функция плотности/массы вероятности.
Дополнительная документация от VectorExponentialLinearOperator:
value — это вектор группы с совместимой формой, если value — это Tensor, форма которого может быть расширена до одной из:
self.batch_shape + self.event_shape
или
[M1, ..., Mm] + self.batch_shape + self.event_shape
| Аргументы | |
|---|---|
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 | имя для добавления к операциям. |
| Возвращаемое значение | |
|---|---|
| Словарь параметр:форма параметров. |
param_static_shapes
@classmethod
param_static_shapes(
sample_shape
)
param_shapes со статическими (т.е. TensorShape) формами.
Это метод класса, который описывает, какие аргументы ключ/значение требуются для создания данного Distribution, чтобы получить определённую форму для вызова sample() этим экземпляром. Предполагается, что форма выборки статически известна.
Подклассы должны переопределить метод класса _param_shapes, чтобы возвращать тензоры с постоянными значениями при подаче постоянных значений.
| Аргументы | |
|---|---|
sample_shape | TensorShape или список/кортеж Python. Желаемая форма вызова sample(). |
| Возвращаемое значение | |
|---|---|
| Словарь параметр:форма параметра. |
| Исключения | |
|---|---|
ValueError | если sample_shape является TensorShape и не определён полностью. |
prob
prob(
value, name='prob'
)
Функция плотности/массы вероятности.
Дополнительная документация от VectorExponentialLinearOperator.
value — это пакетный вектор с совместимой формой, если value — это Tensor форма которого может быть расширена до одной из:
self.batch_shape + self.event_shape
или
[M1, ..., Mm] + self.batch_shape + self.event_shape
| Аргументы | |
|---|---|
value | float или double Tensor. |
name | Префикс Python для имён операций, созданных этой функцией. |
| Возвращаемое значение | |
|---|---|
prob | тензор формы 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 для имён операций, созданных этой функцией. |
| Возвращаемое значение | |
|---|---|
quantile | тензор формы sample_shape(x) + self.batch_shape со значениями типа self.dtype. |
sample
sample(
sample_shape=(), seed=None, name='sample'
)
Генерация выборок заданной формы.
Обратите внимание, что вызов sample() без аргументов сгенерирует одну выборку.
| Аргументы | |
|---|---|
sample_shape | 0D или 1D тензор. Форма генерируемых выборок. |
seed | Целое число Python для семени генератора случайных чисел. |
name | Имя для операции. |
| Возвращаемое значение | |
|---|---|
samples | тензор с добавленными измерениями sample_shape. |
stddev
stddev(
name='stddev'
)
Среднее квадратическое отклонение.
Среднее квадратическое отклонение определяется как,
stddev = E[(X - E[X])**2]**0.5
где X — случайная величина, связанная с этим распределением, E — математическое ожидание, а stddev.shape = batch_shape + event_shape.
| Аргументы | |
|---|---|
name | Префикс Python для имён операций, созданных этой функцией. |
| Возвращаемое значение | |
|---|---|
stddev | Вещественный тензор с формой, совпадающей с 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 для имён операций, созданных этой функцией. |
| Возвращаемое значение | |
|---|---|
Тензор формы 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 | Вещественный тензор с формой, совпадающей с batch_shape + event_shape, т.е. такой же формой, как и у self.mean(). |
© 2020 The TensorFlow Authors. All rights reserved.
Licensed under the Creative Commons Attribution License 3.0.
Code samples licensed under the Apache 2.0 License.
https://www.tensorflow.org/versions/r1.15/api_docs/python/tf/contrib/distributions/VectorExponentialDiag