使用Python实现正态分布、正态分布采样


Posted in Python onNovember 20, 2019

多元正态分布(多元高斯分布)

直接从多元正态分布讲起。多元正态分布公式如下:

使用Python实现正态分布、正态分布采样

这就是多元正态分布的定义,均值好理解,就是高斯分布的概率分布值最大的位置,进行采样时也就是采样的中心点。而协方差矩阵在多维上形式较多。

协方差矩阵

一般来说,协方差矩阵有三种形式,分别称为球形、对角和全协方差。以二元为例:

使用Python实现正态分布、正态分布采样

为了方便展示不同协方差矩阵的效果,我们以二维为例。(书上截的图,凑活着看吧,是在不想画图了)

使用Python实现正态分布、正态分布采样

其实从这个图上可以很好的看出,协方差矩阵对正态分布的影响,也就很好明白了这三个协方差矩阵是哪里来的名字了。可以看出,球形协方差矩阵,会产生圆形(二维)或者球形(三维)的等高线,对角协方差矩阵和全协方差矩阵,会产生椭圆形的等高线。更一般地,在一个D维空间中,球形协方差矩阵,会产生一个D维球面等高线;对角协方差矩阵,会产生一个坐标轴对其的椭球型等高线;全协方差矩阵,会在任意位置产生一个坐标轴对其的椭球型等高线。

当协方差矩阵是球形的或者是对角的,单独的变量之间是独立的

协方差分解

时间不足,具体解释以后再补

下面是协方差分解的原理图

使用Python实现正态分布、正态分布采样

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

使用Python实现正态分布、正态分布采样

python实现

多元正态分布在python的numpy库中有很方便一个函数:

np.random.multivariate_normal(mean=mean, cov=conv, size=N)

这个函数中,mean代表均值,是在每个维度中的均值。cov代表协方差矩阵,就像上面讲的那种形式,协方差矩阵值的大小将决定采样范围的大小。size代表需要采样生成的点数,此时输出大小为(N*D)的坐标矩阵。

另外,其他参数包括:check_valid,这个参数用于决定当cov即协方差矩阵不是半正定矩阵时程序的处理方式,它一共有三个值:warn,raise以及ignore。当使用warn作为传入的参数时,如果cov不是半正定的程序会输出警告但仍旧会得到结果;当使用raise作为传入的参数时,如果cov不是半正定的程序会报错且不会计算出结果;当使用ignore时忽略这个问题即无论cov是否为半正定的都会计算出结果

tol:检查协方差矩阵奇异值时的公差,float类型。

下面是一个小demo

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,否则会报错 效果展示:

使用Python实现正态分布、正态分布采样

协方差值的大小对采样的影响:

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实现正态分布、正态分布采样

这里没有设定随机种子店,每次随机数会有所不同。

以上这篇使用Python实现正态分布、正态分布采样就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
关于Django显示时间你应该知道的一些问题
Dec 25 Python
Python使用re模块正则提取字符串中括号内的内容示例
Jun 01 Python
Python实现快速计算词频功能示例
Jun 25 Python
python操作excel文件并输出txt文件的实例
Jul 10 Python
django之跨表查询及添加记录的示例代码
Oct 16 Python
python根据url地址下载小文件的实例
Dec 18 Python
Python中出现IndentationError:unindent does not match any outer indentation level错误的解决方法
Apr 18 Python
Python常用库Numpy进行矩阵运算详解
Jul 21 Python
Python3.7安装PyQt5 运行配置Pycharm的详细教程
Oct 15 Python
python中remove函数的踩坑记录
Jan 04 Python
matplotlib绘制鼠标的十字光标的实现(内置方式)
Jan 06 Python
装上这 14 个插件后,PyCharm 真的是无敌的存在
Jan 11 Python
Python pandas自定义函数的使用方法示例
Nov 20 #Python
Python求正态分布曲线下面积实例
Nov 20 #Python
复化梯形求积分实例——用Python进行数值计算
Nov 20 #Python
Python实现数值积分方式
Nov 20 #Python
基于Python批量生成指定尺寸缩略图代码实例
Nov 20 #Python
python用quad、dblquad实现一维二维积分的实例详解
Nov 20 #Python
利用python实现AR教程
Nov 20 #Python
You might like
php iconv() : Detected an illegal character in input string
2010/12/05 PHP
PHP数组实例总结与说明
2011/08/23 PHP
基于PHP读取csv文件内容的详解
2013/06/18 PHP
smarty模板局部缓存方法使用示例
2014/06/17 PHP
php数组比较实现查找连续数的方法
2015/07/29 PHP
php 遍历目录,生成目录下每个文件的md5值并写入到结果文件中
2016/12/12 PHP
addRule在firefox下的兼容写法
2006/11/30 Javascript
用js实现的仿sohu博客更换页面风格(简单版)
2007/03/22 Javascript
jquery datepicker参数介绍和示例
2014/04/15 Javascript
javascript实现捕捉键盘上按下的键
2015/05/05 Javascript
百度地图api如何使用
2015/08/03 Javascript
JS调用某段SQL语句的方法
2016/10/20 Javascript
jQuery插件fullPage.js实现全屏滚动效果
2016/12/02 Javascript
js实现密码强度检验
2017/01/15 Javascript
微信小程序 实现动态显示和隐藏某个控件
2017/04/27 Javascript
JS实现上传图片实时预览功能
2017/05/22 Javascript
关于Js中new操作符的作用详解
2021/02/21 Javascript
[01:34]2014DOTA2 TI预选赛预选赛 选手比赛房大揭秘!
2014/05/20 DOTA
[43:43]完美世界DOTA2联赛PWL S2 LBZS vs Forest 第三场 11.29
2020/12/02 DOTA
Python3.2中的字符串函数学习总结
2015/04/23 Python
Python操作RabbitMQ服务器实现消息队列的路由功能
2016/06/29 Python
python3利用Socket实现通信的方法示例
2019/05/06 Python
numpy库与pandas库axis=0,axis= 1轴的用法详解
2019/05/27 Python
python中eval与int的区别浅析
2019/08/11 Python
基于Python中Remove函数的用法讨论
2020/12/11 Python
python中使用np.delete()的实例方法
2021/02/01 Python
详解HTML5中的元素与元素
2015/08/17 HTML / CSS
加拿大领先的优质厨具产品在线购物网站:Golda’s Kitchen
2017/11/17 全球购物
英国助听器购物网站:Hearing Direct
2018/08/21 全球购物
iHerb俄罗斯:维生素、补品和天然产品
2020/07/09 全球购物
新闻记者个人求职的自我评价
2013/11/28 职场文书
学生打架检讨书大全
2014/01/23 职场文书
消防安全责任书
2014/04/14 职场文书
小学推普周活动总结
2015/05/07 职场文书
spring IOC容器的Bean管理XML自动装配过程
2022/05/30 Java/Android
Linux磁盘管理方法介绍
2022/06/01 Servers