Spec-Zone.ru › TensorFlow 2.9

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

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

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

Spec-Zone.ru

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