tf.contrib.distributions.WishartFull
Матричное распределение Вишарта на положительно определённых матрицах.
tf.contrib.distributions.WishartFull(
df, scale, cholesky_input_output_matrices=False, validate_args=False,
allow_nan_stats=True, name='WishartFull'
)
Это распределение определяется скалярной степенью свободы df и симметричной, положительно определённой матрицей масштаба.
Вычисление плотности, определителя и генерации случайных величин — это все O(k^3) операции, где (k, k) — форма области значений.
Математические подробности
Функция плотности вероятности (pdf) равна,
pdf(X; df, scale) = det(X)**(0.5 (df-k-1)) exp(-0.5 tr[inv(scale) X]) / Z Z = 2**(0.5 df k) |det(scale)|**(0.5 df) Gamma_k(0.5 df)
где:
-
df >= kобозначает степень свободы, -
scale— это симметричная, положительно определённаяk x kматрица, -
Z— нормирующая константа, и, -
Gamma_k— многомерная гамма-функция.
Примеры
import tensorflow_probability as tfp
tfd = tfp.distributions
# Initialize a single 3x3 Wishart with Full factored scale matrix and 5
# degrees-of-freedom.(*)
df = 5
scale = ... # Shape is [3, 3]; positive definite.
dist = tfd.WishartFull(df=df, scale=scale)
# Evaluate this on an observation in R^3, returning a scalar.
x = ... # A 3x3 positive definite matrix.
dist.prob(x) # Shape is [], a scalar.
# Evaluate this on a two observations, each in R^{3x3}, returning a length two
# Tensor.
x = [x0, x1] # Shape is [2, 3, 3].
dist.prob(x) # Shape is [2].
# Initialize two 3x3 Wisharts with Full factored scale matrices.
df = [5, 4]
scale = ... # Shape is [2, 3, 3].
dist = tfd.WishartFull(df=df, scale=scale)
# Evaluate this on four observations.
x = [[x0, x1], [x2, x3]] # Shape is [2, 2, 3, 3]; xi is positive definite.
dist.prob(x) # Shape is [2, 2].
# (*) - To efficiently create a trainable covariance matrix, see the example
# in tfd.matrix_diag_transform.
| Аргументы | |
|---|---|
df | float или double Tensor. Степень свободы, должна быть больше или равна размерности матрицы масштаба. |
scale | float или double Tensor. Симметричная положительно определённая матрица масштаба распределения. |
cholesky_input_output_matrices | Python bool. Любая функция, вход или выход которой — матрица, предполагает, что вход — это факторизация Холецкого, и возвращает матрицу, факторизованную Холецким. Пример log_prob вход принимает факторизацию Холецкого, и sample_n возвращает факторизацию Холецкого, когда cholesky_input_output_matrices=True. |
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. Может быть частично определена или неизвестна. Размерности набора данных — это индексы в независимых, не идентичных параметризациях этого распределения. |
cholesky_input_output_matrices | Булево значение, указывающее, является ли вход/выход матрицей, факторизованной Холецким. |
df | Степень свободы распределения Вишарта. |
dimension | Размерность основного векторного пространства. p в R^(p*p). |
dtype | DType Tensor обрабатываемые этим Distribution. |
event_shape | Форма одной выборки из одного набора как TensorShape. Может быть частично определена или неизвестна. |
name | Префикс имени для всех операций, созданных этим Distribution. |
parameters | Словарь параметров, используемых для создания этого Distribution. |
reparameterization_type | Описывает, как перепараметризуются образцы из распределения. В настоящее время это одна из статических инстанций |
scale_operator | Матрица масштаба распределения Вишарта как линейный оператор. |
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, добавляемая в качестве префикса к именам операций, созданных этой функцией. |
| Возвращаемое значение | |
|---|---|
cross_entropy | self.dtype Tensor с формой [B1, ..., Bn], представляющая n различные вычисления кросс-энтропии (энтропии Шеннона). |
entropy
entropy(
name='entropy'
)
Энтропия Шеннона в натах.
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, добавляемая в качестве префикса к именам операций, созданных этой функцией. |
| Возвращаемое значение | |
|---|---|
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 определяется как:
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 | тензор с формой sample_shape(x) + self.batch_shape и значениями типа self.dtype. |
log_normalization
log_normalization(
name='log_normalization'
)
Вычисляет логарифмическую нормирующую константу, log(Z).
log_prob
log_prob(
value, name='log_prob'
)
Логарифмическая функция плотности/массы вероятности.
| Аргументы | |
|---|---|
value | float или double Tensor. |
name | Строка Python, добавляемая в качестве префикса к именам операций, созданных этой функцией. |
| Возвращаемое значение | |
|---|---|
log_prob | тензор с формой 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, добавляемая в качестве префикса к именам операций, созданных этой функцией. |
| Возвращаемое значение | |
|---|---|
тензор с формой sample_shape(x) + self.batch_shape и значениями типа self.dtype. |
mean
mean(
name='mean'
)
Математическое ожидание.
mean_log_det
mean_log_det(
name='mean_log_det'
)
Вычисляет E[log(det(X))] для данного распределения Вишарта.
mode
mode(
name='mode'
)
Мода.
param_shapes
@classmethod
param_shapes(
sample_shape, name='DistributionParamShapes'
)
Формы параметров при заданной форме вызова sample().
Это метод класса, описывающий необходимые ключевые аргументы для создания данного Distribution, чтобы получить определённую форму при вызове sample().
Подклассы должны переопределять метод класса _param_shapes.
| Аргументы | |
|---|---|
sample_shape | Форма вызова sample(). |
name | имя для добавления префикса к операциям. |
| Возвращаемое значение | |
|---|---|
| Словарь с именами параметров и их формами. |
param_static_shapes
@classmethod
param_static_shapes(
sample_shape
)
param_shapes со статическими (т.е. TensorShape) формами.
Это метод класса, который описывает, какие пары «ключ-значение» требуются для создания экземпляра заданного Distribution, чтобы при вызове sample() для этого экземпляра возвращалась определённая форма. Предполагается, что форма выборки известна статически.
Подклассы должны переопределять метод класса _param_shapes для возврата тензоров с постоянными значениями, когда подаются постоянные значения.
| Аргументы | |
|---|---|
sample_shape | TensorShape или список/кортеж Python. Желаемая форма вызова sample(). |
| Возвращаемое значение | |
|---|---|
Словарь, отображающий имя параметра на TensorShape. |
| Исключения | |
|---|---|
ValueError | если sample_shape является TensorShape и не определен полностью. |
prob
prob(
value, name='prob'
)
Функция плотности/массы вероятности.
| Аргументы | |
|---|---|
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(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 | Целочисленное семя Python для генератора псевдослучайных чисел. |
name | имя операции. |
| Возвращаемое значение | |
|---|---|
samples | тензор с добавленными в начало измерениями sample_shape. |
scale
scale()
Матрица масштаба распределения Вишарта.
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/r1.15/api_docs/python/tf/contrib/distributions/WishartFull