Spec-Zone.ru › TensorFlow 2.3

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 и др., 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 и др., 2018 (pdf)

Args
concentration Плавающая точка тензор, параметры концентрации распределения(й). Должно содержать только положительные значения.
rate Плавающая точка тензор, обратные параметры масштаба распределения(й). Должно содержать только положительные значения.
validate_args Python bool, по умолчанию False. Когда True параметры распределения проверяются на корректность, несмотря на возможную деградацию производительности во время выполнения. Когда False недействительные входные данные могут бесшумно привести к неверным выходным данным.
allow_nan_stats Python bool, по умолчанию True. Когда True, статистика (например, среднее значение, мода, дисперсия) использует значение «NaN», чтобы указать, что результат не определен. Когда False, генерируется исключение, если один или несколько элементов статистического набора неопределены.
name Python str имя, добавленное в качестве префикса к операциям, созданным этим классом.
Raises
TypeError если concentration и rate имеют разные типы данных.
Атрибуты
allow_nan_stats Python bool описывает поведение, когда статистическое значение не определено.

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

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

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

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

concentration Параметр концентрации.
dtype DType Tensors, обрабатываемые этим 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'
)

Форма одного образца из одного индекса события в виде 1-мерного Tensor.

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

Args
name имя для задания операции
Returns
batch_shape Tensor.

cdf

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

cdf(
    value, name='cdf'
)

Функция кумулятивного распределения.

Для случайной величины X, функция кумулятивного распределения cdf равна:

cdf(x) := P[X <= x]
Args
value float или double Tensor.
name Python str префикс к именам операций, созданных этой функцией.
Returns
cdf тензор Tensor формы sample_shape(x) + self.batch_shape с значениями типа self.dtype.

copy

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

copy(
    **override_parameters_kwargs
)

Создает глубокую копию распределения.

Примечание: распределение копии может продолжать зависеть от исходных аргументов инициализации.
Args
**override_parameters_kwargs Словарь/значение словаря аргументов инициализации для переопределения с новыми значениями.
Returns
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'.

Args
name Python str префикс к именам операций, созданных этой функцией.
Returns
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-мерного целочисленного 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 тензор с формой 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 тензор с формой 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 к именам операций, созданных этой функцией.
Возвращаемое значение
Тензор с формой 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 фигурам.

data-text="param_static_shapes" id="param_static_shapes" tabindex="0">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 и не определён полностью.

data-text="prob" id="prob" tabindex="0">prob

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

prob(
    value, name='prob'
)

Функция плотности/массы вероятности.

Аргументы
value float или double Tensor.
name Python str добавляемое к именам операций, созданных этой функцией.
Возвращает
prob Tensor формы sample_shape(x) + self.batch_shape со значениями типа self.dtype.

data-text="quantile" id="quantile" tabindex="0">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.

data-text="sample" id="sample" tabindex="0">sample

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

sample(
    sample_shape=(), seed=None, name='sample'
)

Генерирует выборки указанной формы.

Обратите внимание, что вызов sample() без аргументов сгенерирует одну выборку.

Аргументы
sample_shape 0D или 1D int32 Tensor. Форма генерируемых выборок.
seed Целое число Python для посева генератора псевдослучайных чисел
name имя для операции.
Возвращает
samples Tensor с добавленными перед измерениями sample_shape.

data-text="stddev" id="stddev" tabindex="0">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().

data-text="survival_function" id="survival_function" tabindex="0">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.

data-text="variance" id="variance" tabindex="0">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().

© 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/r2.3/api_docs/python/tf/compat/v1/distributions/Gamma

Spec-Zone.ru

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