Python实现多元正态分布与采样详解
本文介绍多元正态分布(多元高斯分布)的定义及其在多维空间中的几何特征,重点解析球形、对角及全协方差矩阵对采样形状的影响。通过Python的numpy库演示具体采样方法,详细讲解mean、cov、size等参数含义及check_valid等高级选项,并提供完整代码示例展示不同协方差设置下的采样效果。
多元正态分布基础
多元正态分布,也称为多元高斯分布,是概率论与统计学中的重要概念。
我们从多元正态分布的基本定义出发,其概率密度函数公式如下所示:

上述公式即为多元正态分布的定义。其中,均值向量(mean)易于理解,它对应于概率分布峰值所在的位置,也是采样时的中心点。协方差矩阵在多维空间中具有多种表现形式。
协方差矩阵类型
协方差矩阵
通常情况下,协方差矩阵主要呈现三种形式,分别被称为球形(Spherical)、对角(Diagonal)和全协方差(Full)。以二元正态分布为例进行说明:

为了直观展示不同协方差矩阵的效果,我们采用二维案例进行分析。(注:此处引用自书籍插图,旨在辅助理解。)

从该图示可以清晰看出协方差矩阵对正态分布形态的影响,这也解释了三种矩阵名称的由来。球形协方差矩阵在二维空间中生成圆形等高线,在三维空间中生成球形等高线;对角协方差矩阵和全协方差矩阵则生成椭圆形等高线。更一般地,在D维空间中,球形协方差矩阵产生D维球面等高线;对角协方差矩阵产生坐标轴对齐的椭球型等高线;而全协方差矩阵则生成任意方向的椭球型等高线。
当协方差矩阵为球形或对角形式时,各变量之间相互独立。
协方差分解
由于篇幅限制,具体解释将在后续补充。
以下是协方差分解的原理示意图:

变量的线性变换原理(正态分布采样的理论基础)

Python实现与参数详解
Python代码实现
在Python的numpy库中,提供了便捷的函数来实现多元正态分布采样:
np.random.multivariate_normal(mean=mean, cov=conv, size=N)
该函数的参数含义如下:mean代表各维度的均值向量;cov代表协方差矩阵,其数值大小决定了采样范围的离散程度;size指定需要生成的采样点数量,输出结果为形状为(N*D)的坐标矩阵。
其他重要参数包括check_valid,用于指定当协方差矩阵非半正定时的处理策略。该参数有三个可选值:'warn'、'raise'和'ignore'。若设为'warn',当cov非半正定时程序会输出警告但仍返回结果;若设为'raise',程序将报错且不计算结果;若设为'ignore',则忽略检查,无论cov是否半正定均直接计算结果。
tol参数用于指定检查协方差矩阵奇异值时的公差,类型为float。
下面是一个简单的演示示例:
import numpy as np
import matplotlib.pyplot as plt
mean = np.array([2,1]) # 均值
conv = np.array([[0.5, 0.0], # 协方差矩阵
[0.0, 0.5]])
axis = np.random.multivariate_normal(mean=mean, cov=conv, size=200)
x, y = np.random.multivariate_normal(mean=mean, cov=conv, size=1000).T
# print(axis[:])
plt.plot(axis[:, 0], axis[:, 1], 'ro')
plt.show()
plt.plot(x, y, 'ro')
plt.show()
注意,在单独提取每个坐标轴的坐标数组时,必须在最后添加.T进行转置,否则程序会报错。效果展示如下:

协方差值大小对采样分布的影响:
mean = np.array([2,1]) # 均值
conv = np.array([[0.5, 0.0], # 协方差矩阵
[0.0, 0.5]])
conv2 = np.array([[10, 0.0], # 协方差矩阵
[0.0, 10]])
axis = np.random.multivariate_normal(mean=mean, cov=conv, size=200)
x, y = np.random.multivariate_normal(mean=mean, cov=conv2, size=200).T
# print(axis[:])
plt.plot(axis[:, 0], axis[:, 1], 'ro')
plt.show()
plt.plot(x, y, 'ro')
plt.show()
具体效果如下所示:

由于未设置随机种子,每次运行的随机数结果会有所不同。
以上关于使用Python实现正态分布及采样的内容即为全部分享,希望能为读者提供参考,并欢迎继续支持本站。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









