Spec-Zone.ru › TensorFlow 2.4

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

В настоящее время это одна из статических инстанций 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 тензор формы 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'.

END_OF_DOCUMENT_MARKER
Аргументы
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

Spec-Zone.ru

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