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- гамма-функция.
Распределение Стьюдента является членом семейства параметрического семейства, то есть его можно построить как:
X ~ StudentT(df, loc=0, scale=1) Y = loc + scale * X
Обратите внимание, что scale имеет семантику, более похожую на стандартное отклонение, чем на дисперсию. Однако на самом деле это не стандартное отклонение; стандартное отклонение распределения Стьюдента равно scale sqrt(df / (df - 2)), когда df > 2.
Образцы этого распределения перепараметризованы (путь-дифференцируемые). Производные вычисляются с помощью подхода, описанного в (Figurnov и др., 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 и др., 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 - среднее)**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 | тензор формы 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 обозначает математическое ожидание.
В качестве альтернативы, для невекторных многомерных распределений (например, матричных, Wishart) 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], представляющее различные вычисления (шанноновской) кросс-энтропии. |
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[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], представляющее различные вычисления расстояния Кульбака-Лейблера. |
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.
| Args | |
|---|---|
value | float или double Tensor. |
name | Префикс Python str для имён операций, созданных этой функцией. |
| Returns | |
|---|---|
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.
| Args | |
|---|---|
sample_shape | Tensor или список/кортеж Python. Желаемая форма вызова sample(). |
name | Имя для добавления в качестве префикса к операциям. |
| Returns | |
|---|---|
Словарь, где ключом является имя параметра, а значением — формы Tensor. |
param_static_shapes
@classmethod
param_static_shapes(
sample_shape
)
param_shapes со статическими (т.е. TensorShape) формами.
Это метод класса, описывающий необходимые ключевые параметры/значения для создания экземпляра данного Distribution, чтобы при вызове метода sample() этого экземпляра возвращалась определенная форма. Предполагается, что форма выборки известна статически.
Подклассы должны переопределять метод класса _param_shapes, чтобы возвращать тензоры с постоянными значениями при подаче постоянных значений.
| Args | |
|---|---|
sample_shape | TensorShape или список/кортеж Python. Желаемая форма вызова sample(). |
| Returns | |
|---|---|
Словарь, где ключом является имя параметра, а значением — статические формы TensorShape. |
| Raises | |
|---|---|
ValueError | если sample_shape является TensorShape и не определена полностью. |
prob
prob(
value, name='prob'
)
Функция плотности вероятности/массы.
| Args | |
|---|---|
value | float или double Tensor. |
name | Префикс Python str для имён операций, созданных этой функцией. |
| Returns | |
|---|---|
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
| Args | |
|---|---|
value | float или double Tensor. |
name | Префикс Python str для имён операций, созданных этой функцией. |
| Returns | |
|---|---|
quantile | Tensor формы sample_shape(x) + self.batch_shape со значениями типа self.dtype. |
sample
sample(
sample_shape=(), seed=None, name='sample'
)
Генерирует выборки заданной формы.
Обратите внимание, что вызов sample() без аргументов сгенерирует одну выборку.
| Args | |
|---|---|
sample_shape | 0-мерная или 1-мерная int32 Tensor. Форма генерируемых выборок. |
seed | Целочисленное значение для генерации псевдослучайных чисел. |
name | Имя, которое нужно добавить в качестве префикса к операции. |
| Returns | |
|---|---|
samples | Tensor с добавленными размерностями sample_shape. |
stddev
stddev(
name='stddev'
)
Среднеквадратическое отклонение.
Среднеквадратическое отклонение определяется как
stddev = E[(X - E[X])**2]**0.5
где X — случайная величина, связанная с этим распределением, E обозначает математическое ожидание, и stddev.shape = batch_shape + event_shape.
| Args | |
|---|---|
name | Префикс Python str для имён операций, созданных этой функцией. |
| Returns | |
|---|---|
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).
| Args | |
|---|---|
value | float или double Tensor. |
name | Префикс Python str для имён операций, созданных этой функцией. |
| Returns | |
|---|---|
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