tf.contrib.distributions.VectorSinhArcsinhDiag
Преобразование (диагональное) SinhArcsinh распределения на R^k.
Наследуется от: TransformedDistribution
tf.contrib.distributions.VectorSinhArcsinhDiag(
loc=None, scale_diag=None, scale_identity_multiplier=None, skewness=None,
tailweight=None, distribution=None, validate_args=False, allow_nan_stats=True,
name='MultivariateNormalLinearOperator'
)
Это распределение моделирует случайный вектор Y = (Y1,...,Yk), используя преобразование SinhArcsinh (с регулируемым весом хвостов и скосом), изменение масштаба и сдвиг.
Преобразование SinhArcsinh нормального распределения подробно описано в распределениях Sinh-arcsinh. Здесь мы используем немного другую параметризацию, в терминах tailweight и skewness. Кроме того, мы допускаем распределения, отличные от нормального, и контроль над scale, а также параметром "сдвига" loc.
Математические подробности
Дано независимое и одинаково распределённое случайный вектор Z = (Z1,...,Zk), мы определяем преобразование VectorSinhArcsinhDiag от Z, Y, параметризованное (loc, scale, skewness, tailweight), через соотношение (при @ обозначает матричное умножение):
Y := loc + scale @ F(Z) * (2 / F_0(2)) F(Z) := Sinh( (Arcsinh(Z) + skewness) * tailweight ) F_0(Z) := Sinh( Arcsinh(Z) * tailweight )
Это распределение аналогично преобразованию масштаба-смещения L(Z) := loc + scale @ Z в следующих отношениях:
- Если
skewness = 0иtailweight = 1(значения по умолчанию), тоF(Z) = Z, а затемY = L(Z)точно. -
locиспользуется в обоих случаях для сдвига результата на постоянный множитель. - Умножение
scaleна2 / F_0(2)гарантирует, что еслиskewness = 0P[Y - loc <= 2 * scale] = P[L(Z) - loc <= 2 * scale]. Таким образом, можно сказать, что веса в хвостахYиL(Z)за пределамиloc + 2 * scaleодинаковые.
Это распределение отличается от loc + scale @ Z из-за изменения формы, выполняемого F:
- Положительный (отрицательный)
skewnessприводит к положительному (отрицательному) скосу.- Положительный скос означает, что мода
F(Z)"наклонена" вправо. - Положительный скос означает, что положительные значения
F(Z)становятся более вероятными, а отрицательные значения — менее вероятными.
- Положительный скос означает, что мода
- Большие (меньшие) значения
tailweightприводят к более толстым (тоньше) хвостам.- Более толстые хвосты означают, что более крупные значения
|F(Z)|становятся более вероятными. -
tailweight < 1приводит к распределению, которое "плоское" околоY = loc, и очень крутой спад в хвостах. -
tailweight > 1приводит к распределению, более пикообразному в моде с более тяжелыми хвостами.
- Более толстые хвосты означают, что более крупные значения
Чтобы увидеть аргумент о хвостах, обратите внимание, что для |Z| >> 1 и |Z| >> (|skewness| * tailweight)**tailweight, у нас есть Y approx 0.5 Z**tailweight e**(sign(Z) skewness * tailweight).
Чтобы увидеть аргумент относительно умножения scale на 2 / F_0(2),
P[(Y - loc) / scale <= 2] = P[F(Z) * (2 / F_0(2)) <= 2]
= P[F(Z) <= F_0(2)]
= P[Z <= 2] (if F = F_0).
| Аргументы | |
|---|---|
loc | Вещественное Tensor. Если это значение равно None, loc неявным образом 0. При указании может иметь размерность [B1, ..., Bb, k], где b >= 0 и k — размер события. |
scale_diag | Неравное нулю вещественное Tensor представляющее диагональную матрицу, добавляемую к scale. Может иметь размерность [B1, ..., Bb, k], b >= 0, и характеризует b-пачки k x k диагональных матриц, добавляемых к scale. Когда оба scale_identity_multiplier и scale_diag равны None, то scale является Identity. |
scale_identity_multiplier | Неравное нулю вещественное Tensor представляющее масштабную единичную матрицу, добавляемую к scale. Может иметь размерность [B1, ..., Bb], b >= 0, и характеризует b-пачки масштабных k x k единичных матриц, добавляемых к scale. Когда оба scale_identity_multiplier и scale_diag равны None, то scale является Identity. |
skewness | Параметр скоса. Вещественное число Tensor с размером, совместимым с event_shape. |
tailweight | Параметр веса хвоста. Вещественное число Tensor с размером, совместимым с event_shape. |
distribution | Экземпляр типа tf.Distribution. Распределение, из которого k независимые и одинаково распределенные образцы используются как вход в преобразование F. По умолчанию tfp.distributions.Normal(loc=0., scale=1.). Должно быть скалярно-паточным, скалярно-событийным распределением. Обычно distribution.reparameterization_type = FULLY_REPARAMETERIZED или это функция от не обучаемых параметров. ВНИМАНИЕ: если вы выполняете обратное распространение через образец VectorSinhArcsinhDiag, а distribution не является FULLY_REPARAMETERIZED, но является функцией обучаемых переменных, тогда градиент будет неверным! |
validate_args | Python bool, значение по умолчанию False. Когда True параметры распределения проверяются на корректность, несмотря на возможность ухудшения производительности во время выполнения. Если False, неверный ввод может безмолвно привести к некорректным результатам. |
allow_nan_stats | Python bool, значение по умолчанию True. Если True, статистика (например, среднее значение, мода, дисперсия) использует значение "NaN" для обозначения того, что результат не определен. Если False, генерируется исключение, если один или несколько членов пакета статистики не определены. |
name | Python str имя, добавляемое к операциям, созданным этим классом. |
| Возбуждает | |
|---|---|
ValueError | если введено не более scale_identity_multiplier. |
| Атрибуты | ||
|---|---|---|
allow_nan_stats | Python bool описывает поведение, когда статистическое значение не определено. Статистики возвращают +/- бесконечность, когда это имеет смысл. Например, дисперсия распределения Коши равна бесконечности. Однако иногда статистика не определена, например, если плотность распределения не достигает максимума в пределах области распределения, мода не определена. Если среднее значение не определено, то по определению дисперсия тоже не определена. Например, среднее значение для распределения Стьюдента при df = 1 не определено (нет ясного способа сказать, что это либо + или - бесконечность), поэтому дисперсия = E[(X - среднее)**2] тоже не определена. | |
batch_shape | Размер одного образца из одного индекса события в виде TensorShape. Может быть частично определен или неизвестен. Размеры пакета являются индексами в независимых, не идентичных параметризациях этого распределения. | |
bijector | Функция, преобразующая x => y. | |
distribution | Базовое распределение, p(x). | |
dtype | Обработка DType Tensors, обрабатываемая этим Distribution. | |
event_shape | Размер одного образца из одной группы в виде TensorShape. Может быть частично определен или неизвестен. | |
loc | loc в Y := loc + scale @ F(Z) * (2 / F(2)). </td> </tr><tr> <td>имя</td> <td> Name prepended to all ops created by thisРаспределение. </td> </tr><tr> <td>параметры</td> <td> Dictionary of parameters used to instantiate thisРаспределение. </td> </tr><tr> <td>репараметризация` | Описывает, как образцы из распределения перепараметризуются. В настоящее время это одна из статических инстанций |
scale | Параметр LinearOperator scale в Y := loc + scale @ F(Z) * (2 / F(2)). </td> </tr><tr> <td>скос</td> <td> Controls the skewness.Скос > 0means right skew. </td> </tr><tr> <td>вес_хвостов</td> <td> Controls the tail decay.вес_хвостов > 1means faster than Normal. </td> </tr><tr> <td>validate_args</td> <td> Pythonbool` указывающий, возможно, включены дорогостоящие проверки. | |
Методы
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 | тензор размера 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 строка для имён операций, созданных этой функцией. |
| Возвращаемое значение | |
|---|---|
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'
)
Логарифмическая функция плотности/массы вероятности.
| Аргументы | |
|---|---|
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 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 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 | 0-мерный или 1-мерный 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/VectorSinhArcsinhDiag