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
Параметры распределения автоматически транслируются во всех функциях; см. примеры для получения подробностей.
Образцы этого распределения перепараметризованы (путь-последовательная дифференцируемость). Производные вычисляются с использованием подхода, описанного в (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 | Описывает, как образцы из распределения перепараметризуются. В настоящее время это один из статических экземпляров |
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