Spec-Zone.ru › TensorFlow

tf.compat.v1.distributions.DirichletMultinomial

Составное распределение Дирихле — мультиномиальное.

Наследуется от: Distribution

tf.compat.v1.distributions.DirichletMultinomial(
    total_count,
    concentration,
    validate_args=False,
    allow_nan_stats=True,
    name='DirichletMultinomial'
)

Распределение Дирихле — мультиномиальное параметризуется вектором (или набором векторов) длины K concentration (K > 1) и числом испытаний total_count, то есть количеством испытаний для одной выборки из DirichletMultinomial. Оно определено на векторе (или наборе векторов) длины K counts, таком что tf.reduce_sum(counts, -1) = total_count. Распределение Дирихле — мультиномиальное совпадает с бета-биномиальным распределением при K = 2.

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

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

Функция вероятностной массы (pmf) имеет вид:

pmf(n; alpha, N) = Beta(alpha + n) / (prod_j n_j!) / Z
Z = Beta(alpha) / N!

где:

  • concentration = alpha = [alpha_0, ..., alpha_{K-1}], alpha_j > 0,
  • total_count = N, N — положительное целое число,
  • N! — факториал N, и
  • Beta(x) = prod_j Gamma(x_j) / Gamma(sum_j x_j) — многомерная бета-функция, а
  • Gamma — гамма-функция.

Распределение Дирихле — мультиномиальное является составным распределением, то есть его выборки генерируются следующим образом.

  1. Выберите вероятности классов: probs = [p_0,...,p_{K-1}] ~ Dir(concentration)
  2. Получите целые числа: counts = [n_0,...,n_{K-1}] ~ Multinomial(total_count, probs)

Последнее измерение concentration задаёт параметры одного распределения Дирихле — мультиномиального. При вызове функций распределения (например, dist.prob(counts)), concentration, total_count и counts приводятся к одинаковой форме. Последнее измерение counts соответствует отдельным распределениям Дирихле — мультиномиальным.

Параметры распределения автоматически приводятся к совместимой форме во всех функциях; подробности см. в примерах.

Возможные проблемы

Число классов, 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.

Примеры

alpha = [1., 2., 3.]
n = 2.
dist = DirichletMultinomial(n, alpha)

Создаёт распределение с 3 классами, причём вероятность выбора 3-го класса максимальна. Функции распределения можно вычислять для заданных количеств.

# counts same shape as alpha.
counts = [0., 0., 2.]
dist.prob(counts)  # Shape []

# alpha will be broadcast to [[1., 2., 3.], [1., 2., 3.]] to match counts.
counts = [[1., 1., 0.], [1., 0., 1.]]
dist.prob(counts)  # Shape [2]

# alpha will be broadcast to shape [5, 7, 3] to match counts.
counts = [[...]]  # Shape [5, 7, 3]
dist.prob(counts)  # Shape [5, 7]

Создаёт набор из 2 распределений с 3 классами.

alpha = [[1., 2., 3.], [4., 5., 6.]]  # Shape [2, 3]
n = [3., 3.]
dist = DirichletMultinomial(n, alpha)

# counts will be broadcast to [[2., 1., 0.], [2., 1., 0.]] to match alpha.
counts = [2., 1., 0.]
dist.prob(counts)  # Shape [2]
Аргументы
total_count Тензор неотрицательных чисел с плавающей точкой, тип данных которого совпадает с типом concentration. Форма должна допускать приведение к [N1,..., Nm] с m >= 0. Задаёт набор из N1 x ... x Nm различных мультиномиальных распределений Дирихле. Его компоненты должны быть равны целым значениям.
concentration Положительный тензор с плавающей точкой, тип данных которого совпадает с типом n; его форма должна допускать приведение к [N1,..., Nm, K] m >= 0. Задаёт набор из N1 x ... x Nm различных мультиномиальных распределений Дирихле с K классами.
validate_args Объект Python bool, значение по умолчанию — False. Если True, параметры распределения проверяются на корректность, что может снизить производительность. Если False, некорректные входные данные могут незаметно привести к неверным результатам.
allow_nan_stats Объект Python bool, значение по умолчанию — True. Если True, для обозначения неопределённого результата статистические характеристики (например, среднее, мода, дисперсия) принимают значение «NaN». Если False, возникает исключение, когда одна или несколько статистических характеристик элементов пакета не определены.
name Имя Python str, добавляемое в начало Ops, создаваемых этим классом.
Атрибуты
allow_nan_stats Объект Python bool, описывающий поведение при неопределённом статистическом показателе.

Статистические показатели принимают значения +/- бесконечность, если это имеет смысл. Например, дисперсия распределения Коши равна бесконечности. Однако иногда показатель не определён: например, если плотность вероятности распределения не достигает максимума в пределах его носителя, мода не определена. Если не определено среднее, по определению не определена и дисперсия. Например, среднее распределения Стьюдента с df = 1 не определено (нельзя однозначно сказать, равно ли оно + или - бесконечности), поэтому дисперсия = E[(X - mean)**2] также не определена.

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

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

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

concentration Параметр концентрации; ожидаемое априорное количество для данной координаты.
dtype DType величин типа Tensor, обрабатываемых этим Distribution.
event_shape Форма одной выборки из одного пакета в виде TensorShape.

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

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

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

total_concentration Сумма последней размерности параметра концентрации.
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'.

Дополнительная документация из DirichletMultinomial:

Ковариация для каждого элемента пакета определяется следующим образом:

Var(X_j) = n * alpha_j / alpha_0 * (1 - alpha_j / alpha_0) *
(n + alpha_0) / (1 + alpha_0)

где concentration = alpha и total_concentration = alpha_0 = sum_j alpha_j.

Ковариация между элементами пакета определяется следующим образом:

Cov(X_i, X_j) = -n * alpha_i * alpha_j / alpha_0 ** 2 *
(n + alpha_0) / (1 + alpha_0)
Аргументы
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'
)

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

Дополнительная документация из DirichletMultinomial:

Для каждого пакета количеств 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.concentration и 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'
)

Функция плотности/массы вероятности.

Дополнительная документация из DirichletMultinomial:

Для каждого набора количеств, 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.concentration и self.total_count при широковещательной передаче.
Аргументы
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 0D- или 1D-int32 Tensor. Форма генерируемых выборок.
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/DirichletMultinomial

Spec-Zone.ru

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