tf.compat.v1.distributions.Beta
Распределение Бета.
Наследуется от: Distribution
tf.compat.v1.distributions.Beta(
concentration1=None,
concentration0=None,
validate_args=False,
allow_nan_stats=True,
name='Beta'
)
Распределение Бета определено на интервале [0, 1] с параметрами α (aka "alpha") и β (aka "beta").
Математические подробности
Функция плотности вероятности (pdf) равна,
pdf(x; alpha, beta) = x**(alpha - 1) (1 - x)**(beta - 1) / Z Z = Gamma(alpha) Gamma(beta) / Gamma(alpha + beta)
где:
-
concentration1 = alpha, -
concentration0 = beta, -
Z— константа нормирования, и, -
Gamma— гамма-функция.
Параметры концентрации представляют среднее общее количество успехов или неудач, т.е.,
concentration1 = alpha = mean * total_concentration concentration0 = beta = (1. - mean) * total_concentration
где α в [0, 1] и β — положительное действительное число, представляющее среднее значение успехов.
Параметры распределения автоматически транслируются во всех функциях; подробности см. в примерах.
Образцы этого распределения перепараметризованы (пути дифференцируемы). Производные вычисляются с помощью метода, описанного в (Figurnov et al., 2018).
Примеры
import tensorflow_probability as tfp
tfd = tfp.distributions
# Create a batch of three Beta distributions.
alpha = [1, 2, 3]
beta = [1, 2, 3]
dist = tfd.Beta(alpha, beta)
dist.sample([4, 5]) # Shape [4, 5, 3]
# `x` has three batch entries, each with two samples.
x = [[.1, .4, .5],
[.2, .3, .5]]
# Calculate the probability of each pair of samples under the corresponding
# distribution in `dist`.
dist.prob(x) # Shape [2, 3]
# Create batch_shape=[2, 3] via parameter broadcast: alpha = [[1.], [2]] # Shape [2, 1] beta = [3., 4, 5] # Shape [3] dist = tfd.Beta(alpha, beta) # alpha broadcast as: [[1., 1, 1,], # [2, 2, 2]] # beta broadcast as: [[3., 4, 5], # [3, 4, 5]] # batch_Shape [2, 3] dist.sample([4, 5]) # Shape [4, 5, 2, 3] x = [.2, .3, .5] # x will be broadcast as [[.2, .3, .5], # [.2, .3, .5]], # thus matching batch_shape [2, 3]. dist.prob(x) # Shape [2, 3]
Вычисление градиентов образцов по параметрам:
alpha = tf.constant(1.0) beta = tf.constant(2.0) dist = tfd.Beta(alpha, beta) 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, [alpha, beta])
| Ссылки | |
|---|---|
| Неявные градиенты перепараметризации: Figurnov et al., 2018 (pdf) |
| Аргументы | |
|---|---|
concentration1 | Положительное число с плавающей запятой, указывающее среднее количество успехов; также "alpha". Подразумевает self.dtype и self.batch_shape, т.е., concentration1.shape = [N1, N2, ..., Nm] = self.batch_shape. |
concentration0 | Положительное число с плавающей запятой, указывающее среднее количество неудач; также "beta". В противном случае имеет аналогичную семантику, что и concentration1. |
validate_args | Python-объект, по умолчанию False. Когда True, параметры распределения проверяются на корректность, несмотря на возможное ухудшение производительности во время выполнения. Когда False, некорректные входные данные могут молча отображать некорректные результаты. |
allow_nan_stats | Python-объект, по умолчанию True. Когда True, статистические данные (например, среднее, мода, дисперсия) используют значение "NaN" для обозначения того, что результат не определен. Когда False, возникает исключение, если один или несколько статистических элементов партии не определены. |
name | Python-строка с именем, добавленное в префикс к операциям, созданным этим классом. |
| Атрибуты | |
|---|---|
allow_nan_stats | Python-объект, описывающий поведение при неопределенности статистических данных. Статистики возвращают +/- бесконечность, когда это имеет смысл. Например, дисперсия распределения Коши — бесконечность. Однако иногда статистика не определена, например, если функция плотности распределения не достигает максимума в области определения распределения, мода не определена. Если среднее не определено, то по определению и дисперсия не определена. Например, среднее значение для распределения Стьюдента при df = 1 не определено (нет ясного способа сказать, что оно либо + или - бесконечность), поэтому дисперсия = E[(X - среднее)**2] также не определена. |
batch_shape | Форма одного образца из одного индекса события в виде TensorShape. Может быть частично определена или неизвестна. Размерность партии — индексы для независимых, не одинаковых параметризаций данного распределения. |
concentration0 | Параметр концентрации, связанный с исходом 0. |
concentration1 | Параметр концентрации, связанный с исходом 1. |
dtype | DType Tensor, обрабатываемые этим Distribution. |
event_shape | Форма одного образца из одной партии в виде TensorShape. Может быть частично определена или неизвестна. |
name | Префикс имени для всех операций, созданных этим Distribution. |
parameters | Словарь параметров, используемых для создания этого Distribution. |
reparameterization_type | Описание того, как образцы из распределения перепараметризованы. В настоящее время это один из статических экземпляров |
total_concentration | Сумма параметров концентрации. |
validate_args | Python-объект, указывающий на то, что, возможно, дорогостоящие проверки включены. |
Методы
batch_shape_tensor
batch_shape_tensor(
name='batch_shape_tensor'
)
Форма одного образца из одного индекса события в виде одномерного Tensor.
Размерность партии — индексы для независимых, не одинаковых параметризаций данного распределения.
| Аргументы | |
|---|---|
name | имя для операции |
| Возвращаемое значение | |
|---|---|
batch_shape | Tensor. |
cdf
cdf(
value, name='cdf'
)
Функция кумулятивного распределения.
Для случайной величины X функция кумулятивного распределения F(x) равна:
cdf(x) := P[X <= x]
Дополнительная документация от Beta:
Примечание:xдолжен иметь тип данныхself.dtypeи быть в[0, 1].. Он должен иметь форму, совместимую сself.batch_shape().
| Аргументы | |
|---|---|
value | float или double Tensor. |
name | Python-строка, добавленная в префикс к именам операций, созданных этой функцией. |
| Возвращаемое значение | |
|---|---|
cdf | тензор формы 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 | Префикс для имён операций, созданных этой функцией. |
| Возвращаемое значение | |
|---|---|
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 | Префикс для имён операций, созданных этой функцией. |
| Возвращаемое значение | |
|---|---|
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 | Префикс для имён операций, созданных этой функцией. |
| Возвращаемое значение | |
|---|---|
is_scalar_batch | Скалярное bool значение типа Tensor. |
is_scalar_event
is_scalar_event(
name='is_scalar_event'
)
Указывает, что event_shape == [].
| Аргументы | |
|---|---|
name | Префикс для имён операций, созданных этой функцией. |
| Возвращаемое значение | |
|---|---|
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 | Префикс для имён операций, созданных этой функцией. |
| Возвращаемое значение | |
|---|---|
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.
Дополнительная документация из Beta:
Примечание:xдолжна иметь типself.dtypeи быть в[0, 1].. Она должна иметь форму, совместимую сself.batch_shape().
| Аргументы | |
|---|---|
value | float или double Tensor. |
name | Префикс для имён операций, созданных этой функцией. |
| Возвращаемое значение | |
|---|---|
logcdf | Массив Tensor с формой sample_shape(x) + self.batch_shape и значениями типа self.dtype. |
log_prob
log_prob(
value, name='log_prob'
)
Логарифм плотности/массы вероятности.
Дополнительная документация из Beta:
Примечание:xдолжна иметь типself.dtypeи быть в[0, 1].. Она должна иметь форму, совместимую сself.batch_shape().
| Аргументы | |
|---|---|
value | float или double Tensor. |
name | Префикс для имён операций, созданных этой функцией. |
| Возвращаемое значение | |
|---|---|
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, добавляемая к именам операций, созданных этой функцией. |
| Возвращаемое значение | |
|---|---|
Тензор формы sample_shape(x) + self.batch_shape со значениями типа self.dtype. |
mean
mean(
name='mean'
)
Среднее значение.
mode
mode(
name='mode'
)
Мода.
Дополнительная документация из Beta:
Примечание: Мода не определена, когдаconcentration1 <= 1илиconcentration0 <= 1. Еслиself.allow_nan_stats—True, для неопределённых мод используетсяNaN. Еслиself.allow_nan_stats—False, при неопределённых модах генерируется исключение.
param_shapes
@classmethod
param_shapes(
sample_shape, name='DistributionParamShapes'
)
Формы параметров, учитывая желаемую форму вызова sample().
Это метод класса, описывающий ключевые/значения аргументы для создания экземпляра данного распределения Distribution, так чтобы вызов sample() возвращал конкретную форму.
Подклассы должны переопределять метод класса _param_shapes.
| Аргументы | |
|---|---|
sample_shape | форма вызова sample() или список/кортеж Python. |
name | имя для добавления к операциям. |
| Возвращаемое значение | |
|---|---|
словарь имени параметра к формам Tensor. |
param_static_shapes
@classmethod
param_static_shapes(
sample_shape
)
TensorShape формы в методе param_shapes.
Это метод класса, описывающий ключевые/значения аргументы для создания экземпляра данного распределения Distribution, так чтобы вызов sample() возвращал конкретную форму. Предполагает, что форма выборки известна статически.
Подклассы должны переопределить метод класса _param_shapes, чтобы возвращать тензоры с постоянными значениями при подаче постоянных значений.
| Аргументы | |
|---|---|
sample_shape | форма вызова sample() или список/кортеж Python. |
| Возвращаемое значение | |
|---|---|
словарь имени параметра к формам TensorShape. |
| Исключения | |
|---|---|
ValueError | если sample_shape — TensorShape и не полностью определён. |
prob
prob(
value, name='prob'
)
Функция плотности/массы вероятности.
Дополнительная документация из Beta:
Примечание:xдолжен иметь тип данныхself.dtypeи быть в[0, 1].. Он должен иметь форму, совместимую сself.batch_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(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 форма int32 Tensor. |
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, добавляемая к именам операций, созданных этой функцией. |
| Возвращаемое значение | |
|---|---|
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, добавляемая в качестве префикса к именам операций, созданных этой функцией. |
| Возвращаемое значение | |
|---|---|
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/Beta