tf.contrib.distributions.MultivariateNormalFullCovariance
Многомерное нормальное распределение над R^k.
Наследуется от: MultivariateNormalTriL
tf.contrib.distributions.MultivariateNormalFullCovariance(
loc=None, covariance_matrix=None, validate_args=False, allow_nan_stats=True,
name='MultivariateNormalFullCovariance'
)
Распределение Мультивариате Нормаль определяется над R^k и параметризуется (пачкой) вектором длиной k loc (также известный как «mu») и (пачкой) k x k covariance_matrix матрицами, которые являются ковариацией. Это отличается от других многомерных нормалей, которые параметризованы матрицей, более похожей на стандартное отклонение.
Математические детали
Функция плотности вероятности (pdf) имеет вид, с @ как матричное умножение,
pdf(x; loc, covariance_matrix) = exp(-0.5 y) / Z, y = (x - loc)^T @ inv(covariance_matrix) @ (x - loc) Z = (2 pi)**(0.5 k) |det(covariance_matrix)|**(0.5).
где:
-
loc— вектор вR^k, -
covariance_matrix—R^{k x k}симметричная положительно определенная матрица, -
Zобозначает константу нормирования.
Дополнительные ведущие измерения (если таковые имеются) в loc и covariance_matrix позволяют использовать пакетные размеры.
Распределение MultivariateNormal является членом семейства местоположение-масштаб, т.е. его можно построить, например, как,
X ~ MultivariateNormal(loc=0, scale=1) # Identity scale, zero shift. scale = Cholesky(covariance_matrix) Y = scale @ X + loc
Примеры
import tensorflow_probability as tfp
tfd = tfp.distributions
# Initialize a single 3-variate Gaussian.
mu = [1., 2, 3]
cov = [[ 0.36, 0.12, 0.06],
[ 0.12, 0.29, -0.13],
[ 0.06, -0.13, 0.26]]
mvn = tfd.MultivariateNormalFullCovariance(
loc=mu,
covariance_matrix=cov)
mvn.mean().eval()
# ==> [1., 2, 3]
# Covariance agrees with covariance_matrix.
mvn.covariance().eval()
# ==> [[ 0.36, 0.12, 0.06],
# [ 0.12, 0.29, -0.13],
# [ 0.06, -0.13, 0.26]]
# Compute the pdf of an observation in `R^3` ; return a scalar.
mvn.prob([-1., 0, 1]).eval() # shape: []
# Initialize a 2-batch of 3-variate Gaussians.
mu = [[1., 2, 3],
[11, 22, 33]] # shape: [2, 3]
covariance_matrix = ... # shape: [2, 3, 3], symmetric, positive definite.
mvn = tfd.MultivariateNormalFullCovariance(
loc=mu,
covariance=covariance_matrix)
# Compute the pdf of two `R^3` observations; return a length-2 vector.
x = [[-0.9, 0, 0.1],
[-10, 0, 9]] # shape: [2, 3]
mvn.prob(x).eval() # shape: [2]
| Аргументы | |
|---|---|
loc | Числа с плавающей точкой Tensor. Если это установлено как None, loc неявно 0. При указании может иметь форму [B1, ..., Bb, k], где b >= 0 и k — размер события. |
covariance_matrix | Числа с плавающей точкой, симметричная положительно определенная Tensor той же dtype что и loc. Строго верхний треугольник covariance_matrix игнорируется, поэтому если covariance_matrix не является симметричной, ошибка не будет поднята (если validate_args is True). covariance_matrix имеет форму [B1, ..., Bb, k, k], где b >= 0 и k — размер события. |
validate_args | Python bool, по умолчанию False. При True параметры распределения проверяются на соответствие требованиям, несмотря на то, что это может ухудшить производительность во время выполнения. При False неверные входные данные могут в тишине приводить к неправильным результатам. |
allow_nan_stats | Python bool, по умолчанию True. При True, статистические данные (например, среднее, мода, дисперсия) используют значение «NaN», чтобы указать, что результат не определен. При False, если один или несколько пакетных членов статистики не определены, генерируется исключение. |
name | Python str имя, добавленное в префикс к Операциям, созданным этим классом. |
| Возможные ошибки | |
|---|---|
ValueError | если ни loc ни covariance_matrix не указаны. |
| Атрибуты | |
|---|---|
allow_nan_stats | Python bool описывающий поведение, когда статистика не определена. Статистики возвращают +/- бесконечность, когда это имеет смысл. Например, дисперсия распределения Коши равна бесконечности. Однако иногда статистика не определена, например, если функция плотности вероятности распределения не достигает максимума в области определения распределения, мода не определена. Если среднее не определено, то по определению дисперсия тоже не определена. Например, среднее для распределения Стьюдента при df = 1 не определено (нет ясного способа сказать, что это либо + либо - бесконечность), поэтому дисперсия = E[(X - среднее)**2] тоже не определена. |
batch_shape | Форма одного образца из одного индекса события в виде TensorShape. Может быть частично определена или неизвестна. Пакетные размеры являются индексами для независимых, неидентичных параметризаций этого распределения. |
bijector | Функция преобразования x => y. |
distribution | Базовое распределение, p(x). |
dtype | DType Tensor обработанные этим Distribution. |
event_shape | Форма одного образца из одной партии в виде TensorShape. Может быть частично определена или неизвестна. |
loc | loc Tensor в Y = scale @ X + loc. |
name | Префикс имени ко всем операциям, созданным этим Distribution. |
parameters | Словарь параметров, используемых для создания этого Distribution. |
reparameterization_type | Описывает, как образцы из распределения перепараметризованы. В настоящее время это одна из статических экземпляров |
scale | scale LinearOperator в Y = scale @ X + loc. |
validate_args | Python bool указывающий, что, возможно, дорогостоящие проверки включены. |
Методы
batch_shape_tensor
batch_shape_tensor(
name='batch_shape_tensor'
)
Форма одного образца из одного индекса события как 1-мерный 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, добавляемая в качестве префикса к именам операций, созданных этой функцией. |
| Возвращаемое значение | |
|---|---|
cross_entropy | self.dtype Tensor с формой [B1, ..., Bn], представляющей n различные вычисления перекрестной энтропии (Шеннона). |
entropy
entropy(
name='entropy'
)
Энтропия Шеннона в натах.
event_shape_tensor
event_shape_tensor(
name='event_shape_tensor'
)
Форма одного образца из одной партии в виде целочисленного массива 1-D 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.
| Аргументы | |
|---|---|
value | float или double Tensor. |
name | Строка Python, добавляемая в качестве префикса к именам операций, созданных этой функцией. |
| Возвращаемое значение | |
|---|---|
logcdf | Tensor формы sample_shape(x) + self.batch_shape со значениями типа self.dtype. |
log_prob
log_prob(
value, name='log_prob'
)
Логарифмическая функция плотности/массы вероятности.
Дополнительная документация из MultivariateNormalLinearOperator:
value — это пакетный вектор с совместимой формой, если value — это Tensor с формой, которую можно расширить до любой из:
self.batch_shape + self.event_shape
или
[M1, ..., Mm] + self.batch_shape + self.event_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'
)
Мода.
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'
)
Функция плотности/массы вероятностей.
Дополнительная документация из MultivariateNormalLinearOperator:
value является вектором-батчем с совместимой формой, если value является Tensor, чья форма может быть расширена до любой из:
self.batch_shape + self.event_shape
или
[M1, ..., Mm] + self.batch_shape + self.event_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 | Целое число 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(). |
© 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/MultivariateNormalFullCovariance