tf.contrib.distributions.Mixture
Смешанное распределение.
Наследуется от: Distribution
tf.contrib.distributions.Mixture(
cat, components, validate_args=False, allow_nan_stats=True,
use_static_graph=False, name='Mixture'
)
Объект Mixture реализует пакетные смешанные распределения. Модель смеси определяется распределением Categorical (смесью) и списком Python объектов Distribution.
Поддерживаемые методы включают log_prob, prob, mean, sample, и entropy_lower_bound.
Примеры
# Create a mixture of two Gaussians:
import tensorflow_probability as tfp
tfd = tfp.distributions
mix = 0.3
bimix_gauss = tfd.Mixture(
cat=tfd.Categorical(probs=[mix, 1.-mix]),
components=[
tfd.Normal(loc=-1., scale=0.1),
tfd.Normal(loc=+1., scale=0.5),
])
# Plot the PDF.
import matplotlib.pyplot as plt
x = tf.linspace(-2., 3., int(1e4)).eval()
plt.plot(x, bimix_gauss.prob(x).eval());
| Аргументы | |
|---|---|
cat | Экземпляр распределения Categorical, представляющий вероятности distributions. |
components | Список или кортеж экземпляров Distribution. Каждый экземпляр должен иметь одинаковый тип, быть определён на одной области определения и иметь соответствующие event_shape и batch_shape. |
validate_args | Python bool, по умолчанию False. Если True, вызовите исключение времени выполнения, если ранг пакетной или событийной части не соответствует cat или любому из распределений. Это проверяется только если ранги не могут быть определены статически во время построения графика. |
allow_nan_stats | Булево значение, по умолчанию True. Если False, вызовите исключение, если статистика (например, среднее значение/мода и т.д.) не определена для любого элемента пакетной обработки. Если True, элементы пакетной обработки с допустимыми параметрами, приводящими к неопределённой статистике, вернут NaN для этой статистики. |
use_static_graph | Вызовы sample не будут полагаться на динамический индексирование тензоров, что позволит оптимизировать некоторые статические компиляции графов, но при этом будет происходить выборка всех базовых распределений в смеси. (Возможно, полезно при работе с TPUs). Значение по умолчанию: False (т.е., использовать динамический индексирование). |
name | Название данного распределения (необязательно). |
| Исключения | |
|---|---|
TypeError | Если cat не является Categorical, или components не является списком или кортежем, или элементы components не являются экземплярами Distribution, или не имеют соответствующих dtype. |
ValueError | Если components является пустым списком или кортежем, или его элементы не имеют статически известного ранга событий. Если cat.num_classes не может быть выведен во время создания графика, или постоянное значение cat.num_classes не равно len(components), или все components и cat не имеют соответствующих статических форм пакетов, или все компоненты не имеют соответствующих статических форм событий. |
| Атрибуты | |
|---|---|
allow_nan_stats | Python bool описывающий поведение при неопределённой статистике. Статистики возвращают +/- бесконечность, когда это имеет смысл. Например, дисперсия распределения Коши равна бесконечности. Однако иногда статистика не определена, например, если плотность распределения не достигает максимума в области определения распределения, мода не определена. Если среднее значение не определено, то по определению дисперсия также не определена. Например, среднее значение для распределения Стьюдента для df = 1 не определено (нет ясного способа сказать, что это либо + или - бесконечность), поэтому дисперсия = E[(X - среднее значение)**2] также не определена. |
batch_shape | Форма одного образца из одного индекса события в виде TensorShape. Может быть частично определена или неизвестна. Размеры пакета являются индексами в независимых, нетождественных параметризациях этого распределения. |
cat | |
components | |
dtype | Распределение DType элементов, обрабатываемых этим Distribution. |
event_shape | Форма одного образца из одного пакета в виде TensorShape. Может быть частично определена или неизвестна. |
name | Имя, добавляемое в префикс ко всем операциям, созданным этим Distribution. |
num_components | |
parameters | Словарь параметров, используемых для инициализации этого Distribution. |
reparameterization_type | Описывает, как образцы из распределения перепараметризуются. В настоящее время это один из статических экземпляров |
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]
| Аргументы | |
|---|---|
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'
)
Энтропия Шеннона в натах.
entropy_lower_bound
entropy_lower_bound(
name='entropy_lower_bound'
)
Нижняя граница энтропии этой смешанной модели.
Нижеприведённая граница не всегда очень жёсткая, и её полезность зависит от вероятностей смешивания и используемых компонентов.
Нижняя граница полезна для ELBO, когда Mixture является вариационным распределением:
\( \log p(x) >= ELBO = \int q(z) \log p(x, z) dz + H[q] \)
где \( p \) — базовое распределение, \( q \) — вариационное, а \( H[q] \) — энтропия \( q \). Если существует нижняя граница \( G[q] \) такая, что \( H[q] \geq G[q] \), то её можно использовать вместо \( H[q] \).
Для смеси распределений \( q(Z) = \sum_i c_i q_i(Z) \) с \( \sum_i c_i = 1 \), из-за вогнутости \( f(x) = -x \log x \), простая нижняя граница имеет вид:
\( \begin{align} H[q] & = - \int q(z) \log q(z) dz \\\ & = - \int (\sum_i c_i q_i(z)) \log(\sum_i c_i q_i(z)) dz \\\ & \geq - \sum_i c_i \int q_i(z) \log q_i(z) dz \\\ & = \sum_i c_i H[q_i] \end{align} \)
Это значение, которое мы вычисляем ниже для \( G[q] \).
| Аргументы | |
|---|---|
name | Имя для данной операции (необязательно). |
| Возвращаемое значение | |
|---|---|
| Нижняя граница энтропии смешанного распределения. |
event_shape_tensor
event_shape_tensor(
name='event_shape_tensor'
)
Форма единственной выборки из единственной группы в виде 1-мерного целочисленного массива int32 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[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 | Tensor с формой 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 | 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'
)
Мода.
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'
)
Функция плотности/массы вероятности.
| Аргументы | |
|---|---|
value | float или double Tensor. |
name | Строка Python, добавляемая к именам операций, созданных этой функцией. |
| Возвращаемое значение | |
|---|---|
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, добавляемая к именам операций, созданных этой функцией. |
| Возвращаемое значение | |
|---|---|
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 | Целое число Python в качестве начального значения для генератора псевдослучайных чисел (RNG). |
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, добавляемая к именам операций, созданных этой функцией. |
| Возвращаемое значение | |
|---|---|
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, добавляемая к именам операций, созданных этой функцией. |
| Возвращаемое значение | |
|---|---|
Тензор 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(). |
© 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/r1.15/api_docs/python/tf/contrib/distributions/Mixture