Spec-Zone.ru › TensorFlow

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 числа испытаний, то есть числа испытаний для каждого извлечения из мультиномиального распределения. Оно определено на векторе counts длины K (для пакета), таком, что tf.reduce_sum(counts, -1) = total_count. При K = 2 мультиномиальное распределение совпадает с биномиальным распределением.

Математические подробности

Мультиномиальное распределение задаёт распределение числа элементов в K классах, то есть вектора counts = n = [n_0, ..., n_{K-1}] неотрицательных целых чисел длины K.

Функция вероятностной массы (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 - mean)**2] также не определена.

batch_shape Форма одной выборки для одного индекса события в виде TensorShape.

Может быть определена частично или неизвестна.

Размерности пакета являются индексами независимых параметризаций этого распределения, которые могут различаться.

dtype Distribution, обрабатываемых этим объектом Tensor, имеет форму DType.
event_shape Форма одной выборки для одного пакета в виде TensorShape.

Может быть определена частично или неизвестна.

logits Вектор логитов для каждой координаты.
name Имя, добавляемое в начало имён всех операций, создаваемых этим объектом Distribution.
parameters Словарь параметров, использованных для создания этого объекта Distribution.
probs Вероятность извлечения объекта 1 в этой координате.
reparameterization_type Описывает способ репараметризации выборок из распределения.

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

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

Логарифм функции плотности/вероятностной массы.

Дополнительная документация из 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

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

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 Целочисленное начальное значение для генератора случайных чисел на языке Python
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/Multinomial

Spec-Zone.ru

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