tf.distributions.StudentT
Распределение Стьюдента.
Наследуется от: Distribution
tf.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.
Образцы этого распределения переопределены (путь-последовательно дифференцируемы). Производные вычисляются с помощью подхода, описанного в статье
Michael Figurnov, Shakir Mohamed, Andriy Mnih. Implicit Reparameterization Gradients, 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])
| Аргументы | |
|---|---|
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 описывает поведение, когда статистическая величина не определена. Статистики возвращают +/- бесконечность, когда это имеет смысл. Например, дисперсия распределения Коши равна бесконечности. Однако иногда статистическая величина не определена, например, если pdf распределения не достигает максимума в области поддержки распределения, мода не определена. Если среднее значение не определено, то по определению дисперсия тоже не определена. Например, среднее значение для распределения Стьюдента при 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'
)
Форма одного образца из одного индекса события как одномерный 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[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-строк, добавляемый к именам операций, созданных этой функцией. |
| Возвращаемое значение | |
|---|---|
массив 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, добавляемая к именам операций, созданных этой функцией. |
| Возвращаемое значение | |
|---|---|
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 | 0-мерный или 1-мерный целочисленный тензор. Форма генерируемых образцов. |
seed | Целочисленное семя для генератора случайных чисел. |
name | Имя операции. |
| Возвращаемое значение | |
|---|---|
samples | тензор с добавленными измерениями sample_shape. |
stddev
stddev(
name='stddev'
)
Среднее квадратическое отклонение.
Среднее квадратическое отклонение определяется как,
stddev = E[(X - E[X])**2]**0.5
где X — случайная величина, связанная с этим распределением, E обозначает математическое ожидание, и stddev.shape = batch_shape + event_shape.
| Аргументы | |
|---|---|
name | Строка Python, добавляемая к именам операций, созданных этой функцией. |
| Возвращаемое значение | |
|---|---|
stddev | Вещественный тензор с формой, идентичной 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.
Дополнительная документация от StudentT:
Дисперсия для распределения Стьюдента равна
df / (df - 2), when df > 2 infinity, when 1 < df <= 2 NaN, when df <= 1
| Аргументы | |
|---|---|
name | Строка Python, добавляемая к именам операций, созданных этой функцией. |
| Возвращаемое значение | |
|---|---|
variance | Вещественный тензор с формой, идентичной 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/distributions/StudentT