Spec-Zone.ru › TensorFlow

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 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 Положительное число с плавающей запятой 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 - mean)**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 str, добавляемое в начало имён операций, создаваемых этой функцией.
Возвращает
cross_entropy self.dtype Tensor формы [B1, ..., Bn], представляющий n различных вычислений перекрёстной энтропии (Шеннона).

entropy

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

entropy(
    name='entropy'
)

Энтропия Шеннона в натах.

event_shape_tensor

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

event_shape_tensor(
    name='event_shape_tensor'
)

Форма одной выборки для одного пакета в виде одномерного Tensor int32.

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

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

Примечание: x должна иметь тип данных self.dtype и принадлежать [0, 1].. Её форма должна быть совместима с self.batch_shape().
Аргументы
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'
)

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

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

Примечание: x должна иметь тип данных self.dtype и принадлежать [0, 1].. Её форма должна быть совместима с self.batch_shape().
Аргументы
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'
)

Мода.

Дополнительная документация из 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 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 Целочисленное начальное значение для генератора случайных чисел (RNG) в 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/Beta

Spec-Zone.ru

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