Spec-Zone.ru › TensorFlow 2.4

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 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)

Args
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 имя, добавленное в префикс к операциям, созданным этим классом.
Raises
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 Описание того, как образцы из распределения перепараметризуются.

В настоящее время это один из статических экземпляров distributions.FULLY_REPARAMETERIZED или distributions.NOT_REPARAMETERIZED.

scale Коэффициенты масштабирования этих распределений Стьюдента.
validate_args Python bool, указывающий, что возможно включены дорогостоящие проверки.

Методы

batch_shape_tensor

Просмотреть исходный код

batch_shape_tensor(
    name='batch_shape_tensor'
)

Форма одного образца из одного индекса события как одномерный Tensor.

Размерность набора — это индексы в независимых, нетождественных параметризациях этого распределения.

Args
name имя, которое нужно дать операции
Returns
batch_shape Tensor.

cdf

Просмотреть исходный код

cdf(
    value, name='cdf'
)

Функция кумулятивного распределения.

Для случайной величины X, функция кумулятивного распределения cdf имеет вид:

cdf(x) := P[X <= x]
Args
value float или double Tensor.
name Python str вставляемый в префикс имен операций, созданных этой функцией.
Returns
cdf тензор с формой Tensor со значениями типа self.dtype.

copy

Просмотреть исходный код

copy(
    **override_parameters_kwargs
)

Создает глубокую копию распределения.

Примечание: скопированное распределение может по-прежнему зависеть от исходных аргументов инициализации.
Args
**override_parameters_kwargs Строка/словарь значений аргументов инициализации, которые нужно переопределить новыми значениями.
Returns
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'.

Args
name Python str вставляемый в префикс имен операций, созданных этой функцией.
Returns
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 Массив 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 Префикс для имён операций.
Возвращаемое значение
Словарь имён параметров и их соответствующих форм.

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 для инициализации генератора псевдослучайных чисел (RNG)
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().

© 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/r2.4/api_docs/python/tf/compat/v1/distributions/StudentT

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API