Spec-Zone.ru › NumPy 1.20

numpy.random.Generator.multivariate_normal

метод

random.Generator.multivariate_normal(mean, cov, size=None, check_valid='warn', tol=1e-8, *, method='svd')

Генерация случайных выборок из многомерного нормального распределения.

Многомерное нормальное, или гауссово, распределение является обобщением одномерного нормального распределения на многомерный случай. Такое распределение задается средним значением и ковариационной матрицей. Эти параметры аналогичны среднему (среднее значение или «центр») и дисперсии (стандартное отклонение или «ширина» в квадрате) одномерного нормального распределения.

Параметры
mean1-D array_like, of length N

Среднее значение N-мерного распределения.

cov2-D array_like, of shape (N, N)

Ковариационная матрица распределения. Она должна быть симметричной и положительно определенной для корректной генерации выборок.

sizeint or tuple of ints, optional

Указав, например, форму (m,n,k), генерируются m*n*k выборок, упакованных в структуру размером m × n × k. Так как каждая выборка имеет размер N, размер выходного массива составляет (m,n,k,N). Если форма не указана, возвращается одна (N-мерная) выборка.

check_valid{ ‘warn’, ‘raise’, ‘ignore’ }, optional

Поведение при работе с ковариационной матрицей, которая не является положительно определенной.

tolfloat, optional

Допуск при проверке собственных значений в ковариационной матрице. cov приводится к типу double перед проверкой.

method{ ‘svd’, ‘eigh’, ‘cholesky’}, optional

Входной параметр cov используется для вычисления матрицы A, такой что A @ A.T = cov. Данный параметр используется для выбора метода вычисления матрицы A. По умолчанию используется метод ‘svd’, который самый медленный, в то время как ‘cholesky’ — самый быстрый, но менее надёжный, чем самый медленный метод. Метод eigh использует разложение по собственным значениям для вычисления A и быстрее, чем svd, но медленнее, чем cholesky.

Доступно с версии 1.18.0.

Возвращаемое значение
outndarray

Сгенерированные выборки, имеющие форму size, если она была задана. В противном случае, форма составляет (N,).

Другими словами, каждый элемент out[i,j,...,:] представляет собой N-мерное значение, сгенерированное из распределения.

Примечания

Среднее значение представляет собой координату в N-мерном пространстве, которая отражает расположение, где выборки наиболее вероятны. Это аналогично пику кривой Гаусса для одномерного или унивариатного нормального распределения.

Ковариация указывает на уровень совместного изменения двух переменных. Из многомерного нормального распределения мы извлекаем N-мерные выборки X = [x_1, x_2, ... x_N]. Элемент ковариационной матрицы C_{ij} представляет собой ковариацию x_i и x_j. Элемент C_{ii} — дисперсия x_i (т.е. ее «разброс»).

Вместо указания полной ковариационной матрицы можно использовать популярные приближения:

  • Сферическая ковариация (cov — кратная единичной матрице)
  • Диагональная ковариация (cov имеет неотрицательные элементы только на диагонали)

Данное геометрическое свойство можно увидеть в двух измерениях, нарисовав точки сгенерированных данных:

>>> mean = [0, 0]
>>> cov = [[1, 0], [0, 100]]  # diagonal covariance

Диагональная ковариация означает, что точки ориентированы вдоль осей x или y:

>>> import matplotlib.pyplot as plt
>>> x, y = np.random.default_rng().multivariate_normal(mean, cov, 5000).T
>>> plt.plot(x, y, 'x')
>>> plt.axis('equal')
>>> plt.show()

Обратите внимание, что ковариационная матрица должна быть положительно полуопределённой (т.е. неотрицательно определённой). В противном случае поведение этого метода не определено, и обратная совместимость не гарантируется.

Ссылки

1

Papoulis, A., “Probability, Random Variables, and Stochastic Processes,” 3rd ed., New York: McGraw-Hill, 1991.

2

Duda, R. O., Hart, P. E., and Stork, D. G., “Pattern Classification,” 2nd ed., New York: Wiley, 2001.

Примеры

>>> mean = (1, 2)
>>> cov = [[1, 0], [0, 1]]
>>> rng = np.random.default_rng()
>>> x = rng.multivariate_normal(mean, cov, (3, 3))
>>> x.shape
(3, 3, 2)

Можно использовать другой метод, отличный от стандартного, для факторизации cov: >>> y = rng.multivariate_normal(mean, cov, (3, 3), method=’cholesky’) >>> y.shape (3, 3, 2)

Вероятно, следующее утверждение справедливо, учитывая, что 0.6 примерно вдвое превышает стандартное отклонение:

>>> list((x[0,0,:] - mean) < 0.6)
[True, True] # random

© 2005–2021 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/1.20/reference/random/generated/numpy.random.Generator.multivariate_normal.html

Spec-Zone.ru

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