欢迎访问宙启技术站
智能推送

使用scipy.stats.multivariate_normal进行多元正态分布概率密度函数估计

发布时间:2023-12-17 11:37:57

scipy.stats.multivariate_normal是一个用于多元正态分布的概率密度函数估计的函数。多元正态分布是指一个具有多个维度的随机变量的联合概率分布。使用scipy.stats.multivariate_normal可以对多元正态分布进行估计,计算给定点的概率密度。

下面我们通过一个例子来说明如何使用scipy.stats.multivariate_normal进行多元正态分布概率密度函数的估计。

import numpy as np
from scipy.stats import multivariate_normal

# 设定多元正态分布的参数
mean = [1, 2]  # 均值矩阵
cov = [[1, 0.5], [0.5, 2]]  # 协方差矩阵

# 生成样本数据
np.random.seed(0)
data = np.random.multivariate_normal(mean, cov, 1000)

# 构建多元正态分布概率密度函数对象
mvn = multivariate_normal(mean, cov)

# 计算给定点的概率密度
point = [1, 2]
density = mvn.pdf(point)
print("在点 {} 处的概率密度为 {}".format(point, density))

# 生成网格点数组
x, y = np.mgrid[-5:5:.01, -5:5:.01]
pos = np.dstack((x, y))

# 计算各网格点上的概率密度值
z = mvn.pdf(pos)

# 绘制概率密度等高线图
import matplotlib.pyplot as plt
plt.contourf(x, y, z, cmap='Blues')
plt.colorbar()
plt.title('Multivariate Normal Distribution PDF')
plt.xlabel('x')
plt.ylabel('y')
plt.show()

在这个例子中,我们首先设定了多元正态分布的参数,包括均值矩阵和协方差矩阵。然后使用np.random.multivariate_normal函数生成了随机样本数据。接下来,我们通过multivariate_normal类构建了多元正态分布的概率密度函数对象,可以通过pdf方法计算给定点的概率密度。在这个例子中,我们计算了给定点(1, 2)处的概率密度。

接着,我们生成了一个网格点数组,用来表示整个分布的取值范围。通过调用pdf方法,可以计算网格点上的概率密度值,并使用matplotlib.pyplot的contourf函数绘制概率密度等高线图。

通过这个例子,我们可以看到使用scipy.stats.multivariate_normal可以方便地进行多元正态分布的概率密度函数估计,并且通过绘图可以直观地展示分布的形状。这对于了解多元正态分布的特征以及进行概率计算和可视化都是非常有帮助的。