Spec-Zone.ru › TensorFlow 2.4

tf.compat.v1.distributions.Categorical

Распределение категорий.

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

tf.compat.v1.distributions.Categorical(
    logits=None, probs=None, dtype=tf.dtypes.int32, validate_args=False,
    allow_nan_stats=True, name='Categorical'
)

Распределение «Categorical» параметризуется либо вероятностями, либо логарифмами вероятностей набора из K классов. Оно определено над целыми числами {0, 1, ..., K}.

Распределение «Categorical» тесно связано с распределениями OneHotCategorical и Multinomial. Распределение «Categorical» можно представить как генерирующее выборки в соответствии с argmax{ OneHotCategorical(probs) } , что само по себе идентично argmax{ Multinomial(probs, total_count=1) }.

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

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

pmf(k; pi) = prod_j pi_j**[k == j]

Особенности

Количество классов, K, не должно превышать:

  • наибольшего целого числа, представимого в self.dtype, т.е. 2**(mantissa_bits+1) (IEEE 754),
  • максимального индекса 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 классами, где 2-й класс наиболее вероятен.

dist = Categorical(probs=[0.1, 0.5, 0.4])
n = 1e4
empirical_prob = tf.cast(
    tf.histogram_fixed_width(
      dist.sample(int(n)),
      [0., 2],
      nbins=3),
    dtype=tf.float32) / n
# ==> array([ 0.1005,  0.5037,  0.3958], dtype=float32)

Создаёт распределение с 3 классами, где 2-й класс наиболее вероятен. Параметризуется с помощью логарифмов шансов, а не вероятностей.

dist = Categorical(logits=np.log([0.1, 0.5, 0.4])
n = 1e4
empirical_prob = tf.cast(
    tf.histogram_fixed_width(
      dist.sample(int(n)),
      [0., 2],
      nbins=3),
    dtype=tf.float32) / n
# ==> array([0.1045,  0.5047, 0.3908], dtype=float32)

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

# counts is a scalar.
p = [0.1, 0.4, 0.5]
dist = Categorical(probs=p)
dist.prob(0)  # Shape []

# p will be broadcast to [[0.1, 0.4, 0.5], [0.1, 0.4, 0.5]] to match counts.
counts = [1, 0]
dist.prob(counts)  # Shape [2]

# p will be broadcast to shape [3, 5, 7, 3] to match counts.
counts = [[...]] # Shape [5, 7, 3]
dist.prob(counts)  # Shape [5, 7, 3]
Аргументы
logits N-мерный Tensor, N >= 1, представляющий логарифмы вероятностей набора категориальных распределений. Первые N - 1 измерения индексируют пакет независимых распределений, а последнее измерение представляет вектор логарифмов шансов для каждого класса. Только один из logits или probs должен быть передан.
probs N-мерный Tensor, N >= 1, представляющий вероятности набора категориальных распределений. Первые N - 1 измерения индексируют пакет независимых распределений, а последнее измерение представляет вектор вероятностей для каждого класса. Только один из logits или probs должен быть передан.
dtype Тип событийных выборок (по умолчанию: int32).
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 из Tensors, обрабатываемых этим Distribution.
event_shape Форма одной выборки из одного набора в виде TensorShape.

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

event_size Скалярный int32 тензор: количество классов.
logits Вектор логарифмов шансов координат.
name Имя, добавляемое ко всем операциям, созданным этим Distribution.
parameters Словарь параметров, используемых для создания этого Distribution.
probs Вектор вероятностей координат.
reparameterization_type Описывает, как выборки из распределения повторно параметризуются.

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

validate_args Python bool указывает, включены ли, возможно, дорогостоящие проверки.

Методы

batch_shape_tensor

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

batch_shape_tensor(
    name='batch_shape_tensor'
)

Форма одной выборки из одного индекса события в виде 1-мерного 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 Префикс для имён операций, созданных этой функцией.
Возвращаемые значения
cross_entropy self.dtype Tensor с формой [B1, ..., Bn], представляющей собой n различные вычисления кросс-энтропии (по Шеннону).

entropy

Просмотр исходного кода

entropy(
    name='entropy'
)

Энтропия Шеннона в натах.

event_shape_tensor

Просмотр исходного кода

event_shape_tensor(
    name='event_shape_tensor'
)

Форма одного элемента из одной группы выборок в виде 1-мерного целочисленного массива Tensor.

Аргументы
name Имя для данной операции
Возвращаемые значения
event_shape Tensor.

is_scalar_batch

Просмотр исходного кода

is_scalar_batch(
    name='is_scalar_batch'
)

Указывает, что batch_shape == [].

Аргументы
name Префикс для имён операций, созданных этой функцией.
Возвращаемые значения
is_scalar_batch bool скаляр Tensor.

is_scalar_event

Просмотр исходного кода

is_scalar_event(
    name='is_scalar_event'
)

Указывает, что event_shape == [].

Аргументы
name Префикс для имён операций, созданных этой функцией.
Возвращаемые значения
is_scalar_event bool скаляр Tensor.

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 Префикс для имён операций, созданных этой функцией.
Возвращаемые значения
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 Префикс для имён операций, созданных этой функцией.
Возвращаемые значения
logcdf массив Tensor с формой sample_shape(x) + self.batch_shape и значениями типа self.dtype.

log_prob

Просмотр исходного кода

log_prob(
    value, name='log_prob'
)

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

Аргументы
value float или double Tensor.
name Префикс для имён операций, созданных этой функцией.
Возвращаемые значения
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 Префикс для имён операций, созданных этой функцией.
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 ) формами.

END_OF_DOCUMENT_MARKER

Это метод класса, описывающий необходимые аргументы ключ/значение для создания экземпляра данного 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 0-мерный или 1-мерный 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().

© 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/Categorical

Spec-Zone.ru

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