使用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 相关文章推荐
Python实现的生成自我描述脚本分享(很有意思的程序)
Jul 18 Python
apache部署python程序出现503错误的解决方法
Jul 24 Python
Python模拟三级菜单效果
Sep 11 Python
Python实现简单的文本相似度分析操作详解
Jun 16 Python
详解python中list的使用
Mar 15 Python
PyQt5 对图片进行缩放的实例
Jun 18 Python
python算法与数据结构之单链表的实现代码
Jun 27 Python
Django ORM实现按天获取数据去重求和例子
May 18 Python
深入浅析python 中的self和cls的区别
Jun 20 Python
Python ConfigParser模块的使用示例
Oct 12 Python
python 实现波浪滤镜特效
Dec 02 Python
Python集合set()使用的方法详解
Mar 18 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
Windows下PHP5和Apache的安装与配置
2006/09/05 PHP
yii2中LinkPager增加总页数和总记录数的实例
2017/08/28 PHP
PHP pthreads v3下的Volatile简介与使用方法示例
2020/02/21 PHP
jquery中的$(document).ready()与window.onload的区别
2009/11/18 Javascript
jquery自定义类似$.ajax()的方法实现代码
2013/08/13 Javascript
同域jQuery(跨)iframe操作DOM(示例代码)
2013/12/13 Javascript
jquery删除数据记录时的弹出提示效果
2014/05/06 Javascript
如何正确使用javascript 来进行我们的程序开发
2014/06/23 Javascript
js实现3D图片展示效果
2017/03/09 Javascript
Angular5.0 子组件通过service传递值给父组件的方法
2018/07/13 Javascript
jquery简单实现纵向的无缝滚动代码实例
2019/04/01 jQuery
基于JS实现web端录音与播放功能
2019/04/17 Javascript
通过实例解析jQ Ajax操作相关原理
2020/09/23 Javascript
python实现将元祖转换成数组的方法
2015/05/04 Python
Python中的一些陷阱与技巧小结
2015/07/10 Python
浅谈python中的占位符
2017/11/09 Python
python正则表达式去除两个特殊字符间的内容方法
2018/12/24 Python
利用python提取wav文件的mfcc方法
2019/01/09 Python
搞定这套Python爬虫面试题(面试会so easy)
2019/04/03 Python
Python中的类与类型示例详解
2019/07/10 Python
基于python实现的百度新歌榜、热歌榜下载器(附代码)
2019/08/05 Python
Python中正反斜杠(‘/’和‘\’)的意义与用法
2019/08/12 Python
python 类的继承 实例方法.静态方法.类方法的代码解析
2019/08/23 Python
ASP.NET Core中的配置详解
2021/02/05 Python
python pyg2plot的原理知识点总结
2021/02/28 Python
GUESS德国官网:美国牛仔服装品牌
2017/02/14 全球购物
AMAVII眼镜官网:时尚和设计师太阳镜
2019/05/05 全球购物
薪酬专员岗位职责
2014/02/18 职场文书
机电职业生涯规划书范文
2014/03/08 职场文书
学校个人对照检查材料
2014/08/26 职场文书
确保工程质量承诺书
2015/04/29 职场文书
导游词之无锡古运河
2019/11/14 职场文书
Web前端:CSS最强总结 附详细代码
2021/03/31 HTML / CSS
Python帮你解决手机qq微信内存占用太多问题
2022/02/15 Python
Golang流模式之grpc的四种数据流
2022/04/13 Golang
MySQL实现用逗号进行拼接、以逗号进行分割
2022/12/24 MySQL