Spec-Zone.ru › TensorFlow 1.15

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 Описывает, как образцы из распределения перепараметризованы.

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

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

Spec-Zone.ru

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