Spec-Zone.ru › TensorFlow 1.15

tf.distributions.StudentT

Распределение Стьюдента.

Наследуется от: Distribution

Просмотр псевдонимов

Основные псевдонимы

`tf.contrib.distributions.StudentT`

Псевдонимы для миграции

См. Руководство по миграции для получения более подробной информации.

tf.compat.v1.distributions.StudentT

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 Описывает, как образцы из распределения переопределены.

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

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

Spec-Zone.ru

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