numpy.random使用文档

这篇博客探讨了二维正态分布中相关系数对分布形态的影响。通过numpy库的multivariate_normal函数生成不同相关系数的样本数据,并利用matplotlib进行可视化展示。随着相关系数增加,变量间的线性关系增强,分布变得更加扁平。此外,还展示了从多元高斯分布中独立投影到一维后的高斯特性。
摘要由CSDN通过智能技术生成

正态分布

二维正态分布

官方使用文档
https://numpy.org/doc/stable/reference/random/generated/numpy.random.RandomState.multivariate_normal.html

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

mean = (1, 2)
cov = [[1, 0], [0, 1]]
x = np.random.multivariate_normal(mean, cov, (3, 3))

第一个参数为均值向量,第二个参数为协方差矩阵。协方差矩阵参数与相关系数的关系如下。
ρ x y = C o v ( X , Y ) σ X σ Y \rho_{xy} = \dfrac{Cov(X,Y)}{\sigma_X \sigma_Y} ρxy=σXσYCov(X,Y)
下面展示不同的相关系数对生成的分布造成怎样的影响,

import numpy as np
from numpy.random import multivariate_normal
import matplotlib.pyplot as plt

def generate_data(mu1, mu2, stv1, stv2, rho, num):
	cov = np.array([[stv1**2, rho*stv1*stv2],[rho*stv1*stv2, stv2**2]])
	mu = np.array([mu1, mu2])
	X = multivariate_normal(mu, cov, size=num)
	plt.scatter(X[:,0], X[:,1], alpha=0.5, label=r'$\rho$={:.2f}'.format(rho))

for rho in [0, 0.23, 0.45, 0.68, 0.90]:
	generate_data(0,0,1,1,rho,200)
plt.legend()
plt.show()

生成结果如下图:相关系数越接近1,变量之间的线性关系越明显,也就是椭球更扁平。
在这里插入图片描述

另外,根据多元高斯的性质,如果构成多元高斯分布,任意多个变量子集都构成高斯分布:如果独立投影到X轴和Y轴,会发现二者都服从高斯分布。

import numpy as np
from numpy.random import multivariate_normal
import matplotlib.pyplot as plt

def show_1d_gauss(mu1, mu2, stv1, stv2, rho, num, ax):
	cov = np.array([[stv1**2, rho*stv1*stv2],[rho*stv1*stv2, stv2**2]])
	mu = np.array([mu1, mu2])
	X = multivariate_normal(mu, cov, size=num)
	X1 = X[:, 0]
	X2 = X[:, 1]
	ax.scatter(X1, X2, alpha=0.5)
	ax.scatter(X1, np.zeros_like(X1), alpha=0.2)
	ax.scatter(np.zeros_like(X2), X2, alpha=0.2)
	ax.set_title(r'$\rho$={:.2f}'.format(rho))

fig, axes = plt.subplots(2, 3)
rholist = [0, 0.23, 0.45, 0.68, 0.90, 1]

for i, rho in enumerate(rholist):
	show_1d_gauss(0,0,1,1,rho,200, axes.flatten()[i])

plt.show()

结果如图所示在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

ProfSnail

谢谢老哥嗷

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

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

打赏作者

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

抵扣说明:

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

余额充值