tf.compat.v1.distributions.Multinomial
Многочленное распределение.
Наследуется от: Distribution
tf.compat.v1.distributions.Multinomial(
total_count,
logits=None,
probs=None,
validate_args=False,
allow_nan_stats=True,
name='Multinomial'
)
Это многочленное распределение параметризуется probs, (пакет) вектором длины K prob (вероятности) (K > 1) таким образом, что tf.reduce_sum(probs, -1) = 1, и числом испытаний total_count, т. е. числом испытаний на один выбор из многочленного распределения. Оно определено над (пакетом) вектором длины K counts таким образом, что tf.reduce_sum(counts, -1) = total_count. Многочленное распределение идентично биномиальному распределению, когда K = 2.
Математические подробности
Многочленное распределение — это распределение по K классам подсчёта, т. е. вектор длины K из неотрицательных целых counts = n = [n_0, ..., n_{K-1}].
Функция массы вероятности (pmf) равна,
pmf(n; pi, N) = prod_j (pi_j)**n_j / Z Z = (prod_j n_j!) / N!
где:
-
probs = pi = [pi_0, ..., pi_{K-1}],pi_j > 0,sum_j pi_j = 1, -
total_count = N,N— положительное целое число, -
Z— константа нормировки, и, -
N!обозначаетNфакториал.
Параметры распределения автоматически передаются по широковещательной сети во всех функциях; подробности см. в примерах.
Возможные ошибки
Число классов, K, не должно превышать:
- наибольшего целого числа, представимого
self.dtype, т. е.2**(mantissa_bits+1)(IEE754), - максимального
Tensorиндекса, т. е.2**31-1.
Другими словами,
K <= min(2**31-1, {
tf.float16: 2**11,
tf.float32: 2**24,
tf.float64: 2**53 }[param.dtype])
Примечание: Это условие проверяется только при self.validate_args = True.
Примеры
Создайте распределение по 3 классам, где вероятность выпадения 3-го класса наиболее высока, используя logits.
logits = [-50., -43, 0] dist = Multinomial(total_count=4., logits=logits)
Создайте распределение по 3 классам, где вероятность выпадения 3-го класса наиболее высока.
p = [.2, .3, .5] dist = Multinomial(total_count=4., probs=p)
Функции распределения могут быть оценены по подсчётам.
# counts same shape as p. counts = [1., 0, 3] dist.prob(counts) # Shape [] # p will be broadcast to [[.2, .3, .5], [.2, .3, .5]] to match counts. counts = [[1., 2, 1], [2, 2, 0]] dist.prob(counts) # Shape [2] # p will be broadcast to shape [5, 7, 3] to match counts. counts = [[...]] # Shape [5, 7, 3] dist.prob(counts) # Shape [5, 7]
Создайте распределение по 2 пакетам из 3 классов.
p = [[.1, .2, .7], [.3, .3, .4]] # Shape [2, 3] dist = Multinomial(total_count=[4., 5], probs=p) counts = [[2., 1, 1], [3, 1, 1]] dist.prob(counts) # Shape [2] dist.sample(5) # Shape [5, 2, 3]
| Args | |
|---|---|
total_count | Неотрицательный плавающей точкой тензор с формой, совместимой с [N1,..., Nm] с m >= 0. Определяет это как пакет N1 x ... x Nm различных многочленных распределений. Его компоненты должны быть равны целочисленным значениям. |
logits | Тензор с плавающей точкой, представляющий ненормализованные логарифмы вероятностей положительного события с формой, совместимой с [N1,..., Nm, K] m >= 0, и тем же типом данных, что и total_count. Определяет это как пакет N1 x ... x Nm различных многочленных распределений по K классам. Только один из logits или probs должен быть передан. |
probs | Положительный тензор с плавающей точкой с формой, совместимой с [N1,..., Nm, K] m >= 0 и тем же типом данных, что и total_count. Определяет это как пакет N1 x ... x Nm различных многочленных распределений по K классам. Компоненты probs в последней части его формы должны суммироваться до 1. Только один из logits или probs должен быть передан. |
validate_args | Python bool, по умолчанию False. Когда параметры распределения True проверяются на корректность, несмотря на возможную ухудшение производительности выполнения. Когда False некорректные входные данные могут молча привести к неправильным результатам. |
allow_nan_stats | Python bool, по умолчанию True. Когда True, статистика (например, среднее значение, мода, дисперсия) используют значение "NaN", чтобы указать, что результат не определен. Когда False, возникает исключение, если один или несколько элементов пакета статистики не определены. |
name | Python str имя, добавляемое к операциям, созданным этим классом. |
| Attributes | |
|---|---|
allow_nan_stats | Python bool описывающий поведение при неопределении статистической величины. Статистические величины возвращают +/- бесконечность, когда это имеет смысл. Например, дисперсия распределения Коши равна бесконечности. Однако иногда статистическая величина не определена, например, если плотность распределения не достигает максимума в пределах области определения распределения, мода не определена. Если среднее значение не определено, то по определению дисперсия тоже не определена. Например, среднее значение для распределения Стьюдента для df = 1 не определено (нет явного способа сказать, что оно либо +∞, либо -∞), поэтому дисперсия = E[(X - среднее значение)**2] тоже не определена. |
batch_shape | Форма одного примера из одного индекса события в виде TensorShape. Может быть частично определена или неизвестна. Размеры пакета — индексы независимых, но не идентичных параметризаций этого распределения. |
dtype | DType Tensor обрабатываемых этим Distribution. |
event_shape | Форма одного примера из одного пакета в виде TensorShape. Может быть частично определена или неизвестна. |
logits | Вектор логарифмов вероятностей по координатам. |
name | Имя, добавляемое ко всем операциям, созданным этим Distribution. |
parameters | Словарь параметров, используемых для создания этого Distribution. |
probs | Вероятность получения 1 в данной координате. |
reparameterization_type | Описывает, как перепараметризуются образцы из распределения. В настоящее время это одна из статических инстанций |
total_count | Число испытаний, используемых для построения выборки. |
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 | тензор формы sample_shape(x) + self.batch_shape со значениями типа 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]END_OF_DOCUMENT_MARKER
где 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). |
data-text="cross_entropy" id="cross_entropy">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 различные вычисления перекрёстной энтропии (Шеннона). |
data-text="entropy" id="entropy">entropy
entropy(
name='entropy'
)
Энтропия Шеннона в натах.
data-text="event_shape_tensor" id="event_shape_tensor">event_shape_tensor
event_shape_tensor(
name='event_shape_tensor'
)
Форма одного образца из одной группы как 1-мерный целочисленный вектор int32 Tensor.
| Аргументы | |
|---|---|
name | имя для операции |
| Возвращаемое значение | |
|---|---|
event_shape | Tensor. |
data-text="is_scalar_batch" id="is_scalar_batch">is_scalar_batch
is_scalar_batch(
name='is_scalar_batch'
)
Указывает, что batch_shape == [].
| Аргументы | |
|---|---|
name | Префикс Python str добавляемый к именам операций, созданных этой функцией. |
| Возвращаемое значение | |
|---|---|
is_scalar_batch | Скалярное значение bool Tensor. |
data-text="is_scalar_event" id="is_scalar_event">is_scalar_event
is_scalar_event(
name='is_scalar_event'
)
Указывает, что event_shape == [].
| Аргументы | |
|---|---|
name | Префикс Python str добавляемый к именам операций, созданных этой функцией. |
| Возвращаемое значение | |
|---|---|
is_scalar_event | Скалярное значение bool Tensor. |
data-text="kl_divergence" id="kl_divergence">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 str добавляемый к именам операций, созданных этой функцией. |
| Возвращаемое значение | |
|---|---|
kl_divergence | self.dtype Tensor со формой [B1, ..., Bn] представляющей n различные вычисления расстояния Кульбака—Лейблера. |
data-text="log_cdf" id="log_cdf">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. |
data-text="log_prob" id="log_prob">log_prob
log_prob(
value, name='log_prob'
)
Логарифмическая плотность/массовая функция.
Дополнительная документация от Multinomial:
Для каждого пакета счетов, value = [n_0, ... ,n_{k-1}], P[value] — это вероятность того, что после выборки self.total_count выборок из этого многомерного распределения, количество выборок, попавших в класс j равно n_j. Поскольку это определение является обмениваемым, различные последовательности имеют одинаковое количество, поэтому вероятность включает в себя комбинаторный коэффициент.
Примечание:valueдолжен быть неотрицательным тензором типаself.dtype, без дробных составляющих, и таким, чтоtf.reduce_sum(value, -1) = self.total_count. Его форма должна быть согласуема с формамиself.probsиself.total_count.
| Аргументы | |
|---|---|
value | float или double Tensor. |
name | Префикс Python str добавляемый к именам операций, созданных этой функцией. |
| Возвращаемое значение | |
|---|---|
log_prob | тензор Tensor со формой sample_shape(x) + self.batch_shape со значениями типа self.dtype. |
data-text="log_survival_function" id="log_survival_function">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-строка, добавляемая к именам операций, созданных этой функцией. |
| Возвращаемое значение | |
|---|---|
prob | тензор формы 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-строка, добавляемая к именам операций, созданных этой функцией. |
| Возвращаемое значение | |
|---|---|
quantile | тензор формы 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 для начального значения генератора псевдослучайных чисел (ПСПЧ) |
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.
| Аргументы | |
|---|---|
name | Python-строка, добавляемая к именам операций, созданных этой функцией. |
| Возвращаемое значение | |
|---|---|
variance | вещественный тензор с формой, идентичной 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/versions/r2.9/api_docs/python/tf/compat/v1/distributions/Multinomial