numpy.random.Generator.multivariate_normal
метод
- random.Generator.multivariate_normal(mean, cov, size=None, check_valid='warn', tol=1e-8, *, method='svd')
-
Генерация случайных выборок из многомерного нормального распределения.
Многомерное нормальное, или гауссово распределение, является обобщением одномерного нормального распределения на многомерный случай. Такое распределение определяется своим средним значением и матрицей ковариации. Эти параметры аналогичны среднему (среднему или «центру») и дисперсии (стандартному отклонению, или «ширине», в квадрате) одномерного нормального распределения.
- Параметры
-
- meanОдномерный массив_like длины N
-
Среднее многомерного распределения.
- covДвумерный массив_like формы (N, N)
-
Матрица ковариации распределения. Она должна быть симметричной и положительно определенной для корректной генерации выборок.
- sizeЦелое число или кортеж целых чисел, необязательно
-
Если задана форма, например,
(m,n,k), то генерируетсяm*n*kвыборок, упакованных вm-мерный массив размеромn-на-k. Поскольку каждая выборка имеетNразмерность, итоговая форма будет(m,n,k,N). Если форма не задана, возвращается одна выборка (N-мерная). - check_valid{ ‘warn’, ‘raise’, ‘ignore’ }, необязательно
-
Поведение при невыполнении условия положительной определенности матрицы ковариации.
- tolВещественное число, необязательно
-
Пороговое значение при проверке сингулярных значений в матрице ковариации. Матрица cov преобразуется к типу double перед проверкой.
- method{ ‘svd’, ‘eigh’, ‘cholesky’}, необязательно
-
Ввод 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–2022 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/1.21/reference/random/generated/numpy.random.Generator.multivariate_normal.html