Spec-Zone.ru › TensorFlow

tf.compat.v1.distributions.Gamma

Распределение гамма.

Наследует от: Distribution

tf.compat.v1.distributions.Gamma(
    concentration,
    rate,
    validate_args=False,
    allow_nan_stats=True,
    name='Gamma'
)

Распределение гамма определено на положительных вещественных числах с использованием параметров concentration (также «альфа») и rate (также «бета»).

Математические подробности

Функция плотности вероятности (pdf):

pdf(x; alpha, beta, x > 0) = x**(alpha - 1) exp(-x beta) / Z
Z = Gamma(alpha) beta**(-alpha)

где:

  • concentration = alpha, alpha > 0,
  • rate = beta, beta > 0,
  • Z — нормирующая константа, а
  • Gamma — это гамма-функция.

Функция распределения (cdf):

cdf(x; alpha, beta, x > 0) = GammaInc(alpha, beta x) / Gamma(alpha)

где GammaInc — это нижняя неполная гамма-функция.

Интуитивное представление о параметрах можно получить из их связи со средним и стандартным отклонением:

concentration = alpha = (mean / stddev)**2
rate = beta = mean / stddev**2 = concentration / mean

Параметры распределения автоматически транслируются во всех функциях; подробности см. в примерах.

Предупреждение: Выборки из этого распределения всегда неотрицательны. Однако выборки, меньшие np.finfo(dtype).tiny, округляются до этого значения, поэтому оно встречается чаще, чем должно. Это должно быть заметно только тогда, когда concentration очень мало или rate очень велико. См. примечание в строке документации tf.random.gamma.

Для выборок из этого распределения используется репараметризация (производные по траектории). Производные вычисляются с использованием подхода, описанного в работе Figurnov et al. (2018).

Примеры

import tensorflow_probability as tfp
tfd = tfp.distributions

dist = tfd.Gamma(concentration=3.0, rate=2.0)
dist2 = tfd.Gamma(concentration=[3.0, 4.0], rate=[2.0, 3.0])

Вычисление градиентов выборок по параметрам:

concentration = tf.constant(3.0)
rate = tf.constant(2.0)
dist = tfd.Gamma(concentration, rate)
samples = dist.sample(5)  # Shape [5]
loss = tf.reduce_mean(tf.square(samples))  # Arbitrary loss function
# Unbiased stochastic gradients of the loss function
grads = tf.gradients(loss, [concentration, rate])
Ссылки
Градиенты неявной репараметризации: Figurnov et al., 2018 (pdf)
Аргументы
concentration Тензор с плавающей запятой, параметры концентрации распределения (распределений). Должен содержать только положительные значения.
rate Тензор с плавающей запятой, параметры обратного масштаба распределения (распределений). Должен содержать только положительные значения.
validate_args Python bool, по умолчанию False. Если True, параметры распределения проверяются на допустимость, что может снизить производительность во время выполнения. Если False, недопустимые входные данные могут незаметно приводить к неверным результатам.
allow_nan_stats Python bool, по умолчанию True. Если True, статистики (например, среднее, мода, дисперсия) используют значение «NaN», указывающее, что результат не определён. Если False, возникает исключение, когда один или несколько элементов пакета статистики не определены.
name Имя Python str, добавляемое в начало имён операций, создаваемых этим классом.
Вызывает исключения
TypeError если concentration и rate имеют разные типы данных.
Атрибуты
allow_nan_stats Python bool, описывающий поведение в случае, когда статистика не определена.

Статистики возвращают +/- бесконечность, когда это имеет смысл. Например, дисперсия распределения Коши равна бесконечности. Однако иногда статистика не определена: например, если плотность вероятности распределения не достигает максимума в пределах его носителя, мода не определена. Если среднее не определено, то по определению не определена и дисперсия. Например, среднее распределения Стьюдента с df = 1 не определено (нет однозначного способа сказать, равно ли оно + или - бесконечности), поэтому дисперсия = E[(X - mean)**2] также не определена.

batch_shape Форма одной выборки для одного индекса события в виде TensorShape.

Может быть определена частично или неизвестна.

Размерности пакета — это индексы независимых, неидентичных параметризаций этого распределения.

concentration Параметр концентрации.
dtype DType объектов Tensor, обрабатываемых этим Distribution.
event_shape Форма одной выборки для одного пакета в виде TensorShape.

Может быть определена частично или неизвестна.

name Имя, добавляемое в начало имён всех операций, создаваемых этим Distribution.
parameters Словарь параметров, использованных для создания этого Distribution.
rate Параметр интенсивности.
reparameterization_type Описывает способ репараметризации выборок из распределения.

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

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'
)

Форма одной выборки для одного пакета в виде одномерного 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 определяется следующим образом:

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'
)

Логарифм функции плотности/вероятности.

Аргументы
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'
)

Мода.

Дополнительная документация из Gamma:

Мода гамма-распределения равна (shape - 1) / rate, если shape > 1, и NaN в противном случае. Если self.allow_nan_stats равен False, будет вызвано исключение вместо возврата NaN.

param_shapes

Посмотреть исходный код

@classmethod
param_shapes(
    sample_shape, name='DistributionParamShapes'
)

Формы параметров, необходимые для получения заданной формы вызова sample().

Это метод класса, описывающий, какие аргументы «ключ/значение» необходимы для создания указанного Distribution, чтобы вызов sample() этого экземпляра возвращал заданную форму.

Подклассы должны переопределять метод класса _param_shapes.

Аргументы
sample_shape Tensor или список/кортеж Python. Желаемая форма вызова sample().
name имя, добавляемое в начало имён операций.
Возвращает
dict имени параметра в Tensor формы.

param_static_shapes

Посмотреть исходный код

@classmethod
param_static_shapes(
    sample_shape
)

param_shapes со статическими (то есть TensorShape) формами.

Это метод класса, описывающий, какие аргументы «ключ/значение» необходимы для создания указанного Distribution, чтобы вызов sample() этого экземпляра возвращал заданную форму. Предполагается, что форма выборки известна статически.

Подклассы должны переопределять метод класса _param_shapes, чтобы возвращать тензоры с постоянными значениями при передаче постоянных значений.

Аргументы
sample_shape TensorShape или список/кортеж Python. Желаемая форма вызова sample().
Возвращает
dict имени параметра в 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
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 str, добавляемый в начало имён операций, создаваемых этой функцией.
Возвращаемое значение
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 str, добавляемый в начало имён операций, создаваемых этой функцией.
Возвращаемое значение
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/Gamma

Spec-Zone.ru

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