tf.compat.v1.distributions.Normal
Нормальное распределение с параметрами положения loc и scale.
Наследуется от: Distribution
tf.compat.v1.distributions.Normal(
loc,
scale,
validate_args=False,
allow_nan_stats=True,
name='Normal'
)
Математические подробности
Функция плотности вероятности (pdf) имеет вид:
pdf(x; mu, sigma) = exp(-0.5 (x - mu)**2 / sigma**2) / Z Z = (2 pi sigma**2)**0.5
где loc = mu — среднее значение, scale = sigma — стандартное отклонение, а Z — нормировочная константа.
Нормальное распределение относится к семейству распределений положения-масштаба, то есть его можно построить следующим образом:
X ~ Normal(loc=0, scale=1) Y = loc + scale * X
Примеры
Примеры инициализации одного или нескольких распределений.
import tensorflow_probability as tfp tfd = tfp.distributions # Define a single scalar Normal distribution. dist = tfd.Normal(loc=0., scale=3.) # Evaluate the cdf at 1, returning a scalar. dist.cdf(1.) # Define a batch of two scalar valued Normals. # The first has mean 1 and standard deviation 11, the second 2 and 22. dist = tfd.Normal(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. dist.prob([0, 1.5]) # Get 3 samples, returning a 3 x 2 tensor. dist.sample([3])
Аргументы транслируются при возможности.
# Define a batch of two scalar valued Normals. # Both have mean 1, but different standard deviations. dist = tfd.Normal(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)
| Аргументы | |
|---|---|
loc | Тензор с числами с плавающей запятой; средние значения распределения (распределений). |
scale | Тензор с числами с плавающей запятой; стандартные отклонения распределения (распределений). Должен содержать только положительные значения. |
validate_args | Объект Python bool, по умолчанию False. Если True, параметры распределения проверяются на корректность, что может снизить производительность во время выполнения. Если False, некорректные входные данные могут незаметно привести к неверным результатам. |
allow_nan_stats | Объект Python bool, по умолчанию True. Если True, статистики (например, среднее значение, мода, дисперсия) используют значение «NaN», чтобы указать, что результат не определён. Если False, возникает исключение, когда одна или несколько статистических характеристик элементов пакета не определены. |
name | Имя Python str, добавляемое в начало имён Ops, создаваемых этим классом. |
| Возбуждает исключения | |
|---|---|
TypeError | если loc и scale имеют разные dtype. |
| Атрибуты | |
|---|---|
allow_nan_stats | Объект Python bool, описывающий поведение в случае неопределённой статистической характеристики. Статистические характеристики возвращают +/- бесконечность, когда это имеет смысл. Например, дисперсия распределения Коши равна бесконечности. Однако иногда статистическая характеристика не определена. Например, если плотность вероятности распределения не достигает максимума в пределах его носителя, мода не определена. Если среднее значение не определено, то по определению не определена и дисперсия. Например, среднее значение распределения Стьюдента с df = 1 не определено (нет однозначного способа сказать, равно ли оно + или - бесконечности), поэтому дисперсия = E[(X - mean)**2] также не определена. |
batch_shape | Форма одного образца из одного индекса события в виде TensorShape. Может быть определена частично или неизвестна. Размерности пакета являются индексами независимых, неодинаковых параметризаций этого распределения. |
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 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'
)
Среднее значение.
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 | int32 Tensor размерности 0 или 1. Форма создаваемых образцов. |
seed | Целочисленное начальное значение для генератора случайных чисел (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.
| Аргументы | |
|---|---|
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/Normal