【NumPy】np.random.multivariate_normal() 函数:生成多元正态分布随机样本

np.random.multivariate_normal 是 NumPy 中生成多元正态分布随机样本的函数。它允许我们指定多个维度(变量)的均值和协方差矩阵,从而生成符合这些参数的随机样本。这个函数常用于模拟多维数据,特别是需要考虑变量间相关性的场景,比如机器学习中的数据生成。

函数语法

np.random.multivariate_normal(mean, cov, size=None, check_valid='warn', tol=1e-8)

参数说明

  1. mean:一个 1 维数组,表示每个维度的均值。

    • 这是一个向量,长度为要生成的多元正态分布的维度数。每个元素代表对应维度的均值。
  2. cov:协方差矩阵(2 维数组),表示变量之间的相关性。

    • 这是一个对称的矩阵,形状为 ( n × n ) (n \times n) (n×n),其中 n n n 是维度数。矩阵中的对角线元素是各个维度的方差,非对角线元素是维度之间的协方差。
  3. size:生成样本的数量(默认为 None)。

    • 如果指定为 None,返回单个样本;如果指定为整数,则生成 size 个样本。
  4. check_valid:用于检查协方差矩阵的参数,默认值为 'warn'

    • 'warn':当协方差矩阵无效时,会发出警告。
    • 'raise':当协方差矩阵无效时,会抛出错误。
    • 'ignore':忽略无效性检查。
  5. tol:用于判断协方差矩阵有效性的阈值。

返回值

返回一个遵循给定均值和协方差的随机样本。如果 size 参数为 None,返回形状为 (n,) 的 1 维数组;如果指定 size 为整数 m,返回形状为 (m, n) 的二维数组。

示例 1:生成二维正态分布的样本

假设我们希望生成两个维度的正态分布样本,均值分别为 [ 0 , 2 ] [0, 2] [0,2],协方差矩阵为:
cov = [ 1 0.8 0.8 1 ] \text{cov} = \begin{bmatrix} 1 & 0.8 \\ 0.8 & 1 \end{bmatrix} cov=[10.80.81]

这表示两个变量之间的相关性很强,协方差为 0.8。

import numpy as np
import matplotlib.pyplot as plt

# 均值向量和协方差矩阵
mean = [0, 2]
cov = [[1, 0.8], [0.8, 1]]

# 生成 500 个样本
data = np.random.multivariate_normal(mean, cov, size=500)

# 绘制生成的样本点
plt.scatter(data[:, 0], data[:, 1], alpha=0.5)
plt.title('Samples from Multivariate Normal Distribution')
plt.xlabel('X1')
plt.ylabel('X2')
plt.show()

示例 2:生成三维正态分布的样本

如果我们需要生成三维的正态分布,可以使用类似的方法,设定三维的均值和 3x3 的协方差矩阵。

mean = [1, 2, 3]
cov = [[1, 0.5, 0.2], [0.5, 1, 0.3], [0.2, 0.3, 1]]

# 生成 1000 个样本
data = np.random.multivariate_normal(mean, cov, size=1000)

# 查看生成的前几个样本
print(data[:5])

示例 3:检查协方差矩阵的有效性

协方差矩阵必须是正定的,这意味着它的特征值必须大于 0。如果协方差矩阵无效(比如不是对称的或者不是正定的),函数可能会发出警告或错误信息。

mean = [0, 2]
invalid_cov = [[1, 2], [3, 1]]  # 非对称协方差矩阵

# 使用无效协方差矩阵,会得到警告或错误
data = np.random.multivariate_normal(mean, invalid_cov, size=100)

你可以通过 check_valid 参数控制这种情况如何处理:

data = np.random.multivariate_normal(mean, invalid_cov, size=100, check_valid='raise')

生成数据的几何解释

在二维情况下,np.random.multivariate_normal 生成的数据分布在一个椭圆形的区域。均值决定了椭圆的中心位置,协方差矩阵决定了椭圆的形状和方向:

  • 方差:协方差矩阵的对角线元素是每个维度的方差,控制了椭圆在该维度方向的扩展程度。方差越大,椭圆在该维度方向上越“宽”。
  • 协方差:非对角线元素是协方差,控制了不同维度之间的关联性。协方差越大,两个维度的相互关系越强,椭圆的形状越倾斜。

总结

np.random.multivariate_normal 是一个强大的工具,用于生成符合指定均值和协方差的多元正态分布样本。它在模拟多维数据集、生成具有相关性的样本时特别有用,在机器学习和统计建模中经常用来生成测试数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

彬彬侠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值