tf.compat.v1.distributions.StudentT
Распределение Стьюдента.
Наследует: Distribution
tf.compat.v1.distributions.StudentT(
df,
loc,
scale,
validate_args=False,
allow_nan_stats=True,
name='StudentT'
)
Это распределение имеет параметры: число степеней свободы df, положение loc и scale.
Математические сведения
Функция плотности вероятности (pdf) имеет вид:
pdf(x; df, mu, sigma) = (1 + y**2 / df)**(-0.5 (df + 1)) / Z where, y = (x - mu) / sigma Z = abs(sigma) sqrt(df pi) Gamma(0.5 df) / Gamma(0.5 (df + 1))
где:
-
loc = mu, -
scale = sigmaи -
Z— нормировочная константа, а -
Gamma— гамма-функция.
Распределение StudentT относится к семейству распределений «положение — масштаб», то есть его можно построить следующим образом:
X ~ StudentT(df, loc=0, scale=1) Y = loc + scale * X
Обратите внимание, что scale по смыслу больше напоминает стандартное отклонение, чем дисперсию. Однако фактически это не стандартное отклонение; стандартное отклонение распределения Стьюдента равно scale sqrt(df / (df - 2)), если df > 2.
Выборки из этого распределения перепараметризованы (дифференцируемы по траектории). Производные вычисляются с использованием метода, описанного в (Figurnov et al., 2018).
Примеры
Примеры инициализации одного распределения или пакета распределений.
import tensorflow_probability as tfp tfd = tfp.distributions # Define a single scalar Student t distribution. single_dist = tfd.StudentT(df=3) # Evaluate the pdf at 1, returning a scalar Tensor. single_dist.prob(1.) # Define a batch of two scalar valued Student t's. # The first has degrees of freedom 2, mean 1, and scale 11. # The second 3, 2 and 22. multi_dist = tfd.StudentT(df=[2, 3], loc=[1, 2.], scale=[11, 22.]) # Evaluate the pdf of the first distribution on 0, and the second on 1.5, # returning a length two tensor. multi_dist.prob([0, 1.5]) # Get 3 samples, returning a 3 x 2 tensor. multi_dist.sample(3)
Аргументы транслируются, если это возможно.
# Define a batch of two Student's t distributions. # Both have df 2 and mean 1, but different scales. dist = tfd.StudentT(df=2, loc=1, scale=[11, 22.]) # Evaluate the pdf of both distributions on the same point, 3.0, # returning a length 2 tensor. dist.prob(3.0)
Вычисление градиентов выборок по параметрам:
df = tf.constant(2.0) loc = tf.constant(2.0) scale = tf.constant(11.0) dist = tfd.StudentT(df=df, loc=loc, scale=scale) samples = dist.sample(5) # Shape [5] loss = tf.reduce_mean(tf.square(samples)) # Arbitrary loss function # Unbiased stochastic gradients of the loss function grads = tf.gradients(loss, [df, loc, scale])
| Литература | |
|---|---|
| Неявные градиенты перепараметризации: Figurnov et al., 2018 (PDF) |
| Аргументы | |
|---|---|
df | Число с плавающей запятой Tensor. Степени свободы распределения (распределений). df должно содержать только положительные значения. |
loc | Число с плавающей запятой Tensor. Среднее (средние) распределения (распределений). |
scale | Число с плавающей запятой Tensor. Масштабирующий множитель (множители) распределения (распределений). Обратите внимание, что scale технически не является стандартным отклонением этого распределения, но по смыслу больше напоминает стандартное отклонение, чем дисперсию. |
validate_args | Python bool, значение по умолчанию — False. Если True, параметры распределения проверяются на допустимость, что может снизить производительность во время выполнения. Если False, некорректные входные данные могут привести к неверным результатам без предупреждения. |
allow_nan_stats | Python bool, значение по умолчанию — True. Если True, для статистических характеристик (например, среднего, моды, дисперсии) используется значение «NaN», указывающее, что результат не определён. Если False, возникает исключение, если один или несколько элементов пакета статистической характеристики не определены. |
name | Имя Python str, добавляемое в начало имён операций, создаваемых этим классом. |
| Вызывает исключения | |
|---|---|
TypeError | если loc и scale имеют разные типы данных. |
| Атрибуты | |
|---|---|
allow_nan_stats | Python bool, описывающий поведение, если статистическая характеристика не определена. Статистические характеристики возвращают +/- бесконечность, если это имеет смысл. Например, дисперсия распределения Коши равна бесконечности. Однако иногда статистическая характеристика не определена. Например, если плотность распределения не достигает максимума в пределах носителя распределения, мода не определена. Если среднее не определено, то по определению не определена и дисперсия. Например, среднее распределения Стьюдента при df = 1 не определено (нет однозначного способа сказать, что оно равно + или - бесконечности), поэтому дисперсия = E[(X - mean)**2] также не определена. |
batch_shape | Форма одной выборки для одного индекса события в виде TensorShape. Может быть определена частично или неизвестна. Размерности пакета являются индексами независимых, неидентичных параметризаций этого распределения. |
df | Степени свободы этих распределений Стьюдента. |
dtype | DType Tensor, обрабатываемых этим Distribution. |
event_shape | Форма одной выборки из одного пакета в виде TensorShape. Может быть определена частично или неизвестна. |
loc | Положения этих распределений Стьюдента. |
name | Имя, добавляемое в начало имён всех операций, создаваемых этим Distribution. |
parameters | Словарь параметров, использованных для создания этого экземпляра Distribution. |
reparameterization_type | Описывает способ перепараметризации выборок из распределения. В настоящее время это один из статических экземпляров |
scale | Масштабирующие множители этих распределений Стьюдента. |
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 str, добавляемый в начало имён операций, создаваемых этой функцией. |
| Возвращает | |
|---|---|
cross_entropy | self.dtype Tensor формы [B1, ..., Bn], представляющий n различных вычислений взаимной энтропии (Шеннона). |
entropy
entropy(
name='entropy'
)
Энтропия Шеннона в натах.
event_shape_tensor
event_shape_tensor(
name='event_shape_tensor'
)
Форма одной выборки из одного пакета в виде одномерного 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 определяется следующим образом:
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'
)
Среднее.
Дополнительная документация из StudentT:
Среднее распределения Стьюдента равно loc, если df > 1; в противном случае оно равно NaN. Если self.allow_nan_stats=True, будет вызвано исключение вместо возврата NaN.
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 | 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.
Дополнительная документация из StudentT:
Дисперсия распределения Стьюдента равна
df / (df - 2), when df > 2 infinity, when 1 < df <= 2 NaN, when df <= 1
| Аргументы | |
|---|---|
name | Объект Python str, добавляемый в начало имён операций, созданных этой функцией. |
| Возвращаемое значение | |
|---|---|
variance | Число с плавающей точкой Tensor, форма которого совпадает с формой batch_shape + event_shape, то есть с формой self.mean(). |
© 2022 The TensorFlow Authors. All rights reserved.
Licensed under the Creative Commons Attribution License 4.0.
Code samples licensed under the Apache 2.0 License.
https://www.tensorflow.org/api_docs/python/tf/compat/v1/distributions/StudentT