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 = [-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]
| Аргументы | |
|---|---|
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 имя, добавляемое к операциям, созданным этим классом. |
| Атрибуты | |
|---|---|
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.
Размеры партии — это индексы независимых, нетождественных параметризаций этого распределения.
| Аргументы | |
|---|---|
name | имя для обозначения операции |
| Возвращает | |
|---|---|
batch_shape | Tensor. |
cdf
cdf(
value, name='cdf'
)
Функция кумулятивного распределения.
Для случайной величины X, функция кумулятивного распределения cdf имеет вид:
cdf(x) := P[X <= x]
| Аргументы | |
|---|---|
value | float или double Tensor. |
name | Python str префикс к именам операций, созданных этой функцией. |
| Возвращает | |
|---|---|
cdf | тензор формы 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(
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] представляющей различные вычисления перекрёстной энтропии (Шеннона). |
Энтропия
entropy(
name='entropy'
)
Энтропия Шеннона в натах.
Форма события тензора
event_shape_tensor(
name='event_shape_tensor'
)
Форма одного образца из одного набора как 1-мерный целочисленный Tensor.
| Аргументы | |
|---|---|
name | имя, которое нужно дать операции |
| Возвращаемое значение | |
|---|---|
event_shape | Tensor. |
Масштабный пакет
is_scalar_batch(
name='is_scalar_batch'
)
Указывает, что batch_shape == [].
| Аргументы | |
|---|---|
name | Python str добавленное к именам операций, созданных этой функцией. |
| Возвращаемое значение | |
|---|---|
is_scalar_batch | bool скаляр Tensor. |
Масштабное событие
is_scalar_event(
name='is_scalar_event'
)
Указывает, что event_shape == [].
| Аргументы | |
|---|---|
name | Python str добавленное к именам операций, созданных этой функцией. |
| Возвращаемое значение | |
|---|---|
is_scalar_event | bool скаляр Tensor. |
Расхождение Куллбека — Лейблера
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] представляющей различные вычисления расхождения Куллбека — Лейблера. |
Логарифмическая кумулятивная функция распределения
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(
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. |
Логарифмическая функция выживания
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(
name='mean'
)
Среднее значение.
Режим
mode(
name='mode'
)
Режим.
param_shapes
@classmethod
param_shapes(
sample_shape, name='DistributionParamShapes'
)
Формы параметров, учитывая желаемую форму вызова sample().
Это метод класса, который описывает, какие пары «ключ-значение» требуются для создания экземпляра данного Distribution, чтобы вызов sample() этого экземпляра возвращал определённую форму.
Подклассы должны переопределять метод класса _param_shapes.
| Аргументы | |
|---|---|
sample_shape | Tensor или список/кортеж Python. Желаемая форма вызова sample(). |
name | Имя для добавления к операциям. |
| Возвращаемое значение | |
|---|---|
Словарь, сопоставляющий имена параметров с формами Tensor . |
param_static_shapes
@classmethod
param_static_shapes(
sample_shape
)
param_shapes со статическими (т.е. TensorShape) формами.
Это метод класса, который описывает, какие пары «ключ-значение» требуются для создания экземпляра данного Distribution, чтобы вызов sample() этого экземпляра возвращал определённую форму. Предполагается, что форма выборки известна статически.
Подклассы должны переопределять метод класса _param_shapes для возвращения тензоров с постоянными значениями при подаче постоянных значений.
| Аргументы | |
|---|---|
sample_shape | TensorShape или список/кортеж Python. Желаемая форма вызова sample(). |
| Возвращаемое значение | |
|---|---|
Словарь, сопоставляющий имена параметров с 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 | 0-мерный или 1-мерный целочисленный тензор int32. Форма генерируемых выборок. |
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(). |
© 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/Multinomial