Spec-Zone.ru › TensorFlow 1.15

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 Описывает, как выборки из распределения перепараметризуются.

В настоящее время это один из статических экземпляров distributions.FULLY_REPARAMETERIZED или distributions.NOT_REPARAMETERIZED.

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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API