numpy.random.RandomState.multivariate_normal
метод
- random.RandomState.multivariate_normal(mean, cov, size=None, check_valid='warn', tol=1e-8)
-
Генерация случайных выборок из многомерного нормального распределения.
Многомерное нормальное, многомерное или гауссово распределение является обобщением одномерного нормального распределения на более высокие размерности. Такое распределение задаётся своим средним значением и ковариационной матрицей. Эти параметры аналогичны среднему значению (среднему или «центру») и дисперсии (стандартному отклонению или «ширине», возведённому в квадрат) одномерного нормального распределения.
Примечание
Новый код должен использовать метод
multivariate_normalэкземпляраGenerator; пожалуйста, обратитесь к Быстрый старт.- Параметры:
-
- meanОдномерный массив, длиной N
-
Среднее значение N-мерного распределения.
- covДвумерный массив, формы (N, N)
-
Ковариационная матрица распределения. Она должна быть симметричной и положительно полуопределённой для корректной генерации выборок.
- sizeЦелое число или кортеж целых чисел, необязательно
-
При задании формы, например,
(m,n,k), генерируютсяm*n*kвыборок и упаковываются в массивm×n×k. Поскольку каждая выборкаN-мерная, выходная форма равна(m,n,k,N). Если форма не задана, возвращается одна (N-мерная) выборка. - check_valid{ ‘warn’, ‘raise’, ‘ignore’ }, необязательно
-
Поведение при не положительно полуопределённой ковариационной матрице.
- tolfloat, необязательно
-
Пороговое значение при проверке сингулярных значений в ковариационной матрице. cov приводится к типу double перед проверкой.
- Возвращаемые значения:
-
- outndarray
-
Сгенерированные выборки, формы size, если она была задана. В противном случае форма равна
(N,).Другими словами, каждое значение
out[i,j,...,:]представляет собой N-мерное значение, взятое из распределения.
См. также
random.Generator.multivariate_normal-
который следует использовать в новом коде.
Примечания
Среднее значение — это координата в 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.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]] >>> x = np.random.multivariate_normal(mean, cov, (3, 3)) >>> x.shape (3, 3, 2)
Здесь мы генерируем 800 выборок из двумерного нормального распределения со средним значением [0, 0] и ковариационной матрицей [[6, -3], [-3, 3.5]]. Ожидаемые дисперсии первых и вторых компонент выборки составляют соответственно 6 и 3,5, а ожидаемый коэффициент корреляции равен -3/sqrt(6*3.5) ≈ -0.65465.
>>> cov = np.array([[6, -3], [-3, 3.5]]) >>> pts = np.random.multivariate_normal([0, 0], cov, size=800)
Проверим, что среднее значение, ковариация и коэффициент корреляции выборки близки к ожидаемым значениям:
>>> pts.mean(axis=0) array([ 0.0326911 , -0.01280782]) # may vary >>> np.cov(pts.T) array([[ 5.96202397, -2.85602287], [-2.85602287, 3.47613949]]) # may vary >>> np.corrcoef(pts.T)[0, 1] -0.6273591314603949 # may varyМы можем визуализировать эти данные с помощью диаграммы рассеяния. Ориентация облака точек иллюстрирует отрицательную корреляцию компонентов этой выборки.
>>> import matplotlib.pyplot as plt >>> plt.plot(pts[:, 0], pts[:, 1], '.', alpha=0.5) >>> plt.axis('equal') >>> plt.grid() >>> plt.show()
© 2005–2024 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/2.0/reference/random/generated/numpy.random.RandomState.multivariate_normal.html