Spec-Zone.ru › TensorFlow 2.3

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) с параметрами concentration1 (также известный как «альфа») и concentration0 (также известный как «бета»).

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

Функция плотности вероятности (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 — это гамма-функция.

Параметры концентрации представляют среднее общее количество 1 или 0, т.е.,

concentration1 = alpha = mean * total_concentration
concentration0 = beta  = (1. - mean) * total_concentration

где mean в (0, 1) и total_concentration — это положительное действительное число, представляющее среднее значение total_count = concentration1 + concentration0.

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

Предупреждение: Образцы могут быть равны нулю из-за конечной точности. Это чаще происходит, когда некоторые из концентраций очень малы. Убедитесь, что вы округлили образцы до np.finfo(dtype).tiny перед вычислением плотности.

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

Аргументы
concentration1 Положительное число с плавающей точкой Tensor, обозначающее среднее количество успехов; также известный как «альфа». Подразумевает self.dtype и self.batch_shape, т.е., concentration1.shape = [N1, N2, ..., Nm] = self.batch_shape.
concentration0 Положительное число с плавающей точкой Tensor обозначающее среднее количество неудач; также известный как «бета». В противном случае имеет те же семантику, что и concentration1.
validate_args Python bool, по умолчанию False. Когда True параметры распределения проверяются на корректность, несмотря на возможную деградацию производительности выполнения. Когда False недопустимые входные данные могут незаметно привести к неправильным результатам.
allow_nan_stats Python bool, по умолчанию True. Когда True, статистики (например, среднее значение, мода, дисперсия) используют значение «NaN», чтобы указать, что результат не определен. Когда False, возникает исключение, если один или несколько элементов набора статистики не определены.
name Имя Python str префикс для операций, созданных этим классом.
Атрибуты
allow_nan_stats Python bool описывающий поведение, когда статистическая информация не определена.

Статистики возвращают +/- бесконечность, когда это имеет смысл. Например, дисперсия распределения Коши равна бесконечности. Однако иногда статистика не определена, например, если функция плотности распределения не достигает максимума в области определения распределения, мода не определена. Если среднее значение не определено, то по определению дисперсия также не определена. Например, среднее значение для распределения Стьюдента при 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 Описывает, как образцы из распределения перепараметризованы.

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

total_concentration Сумма параметров концентрации.
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]

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

Примечание: x должен иметь тип данных self.dtype и находиться в [0, 1]. Он должен иметь форму, совместимую с self.batch_shape().
Аргументы
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, добавляемая в качестве префикса к именам операций, созданных данной функцией.
Возвращаемые значения
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, добавляемая в качестве префикса к именам операций, созданных данной функцией.
Возвращаемые значения
is_scalar_batch bool скаляр Tensor.

is_scalar_event

Просмотр исходного кода

is_scalar_event(
    name='is_scalar_event'
)

Указывает, что event_shape == [].

Аргументы
name Строка Python, добавляемая в качестве префикса к именам операций, созданных данной функцией.
Возвращаемые значения
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, добавляемая в качестве префикса к именам операций, созданных данной функцией.
Возвращаемые значения
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 Строка Python, добавляемая в качестве префикса к именам операций, созданных данной функцией.
Возвращаемые значения
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 Строка Python, добавляемая в качестве префикса к именам операций, созданных данной функцией.
Возвращаемые значения
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, добавляемая в качестве префикса к именам операций, созданных данной функцией.
Возвращаемые значения
Tensor формы 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 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'
)

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

Дополнительная документация от 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:

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

© 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/Beta

Spec-Zone.ru

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