使用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编程中的文件读写及相关的文件对象方法讲解
Jan 19 Python
Python ftp上传文件
Feb 13 Python
PyQt5 在label显示的图片中绘制矩形的方法
Jun 17 Python
Python+AutoIt实现界面工具开发过程详解
Aug 07 Python
详解Python中的format格式化函数的使用方法
Nov 20 Python
python迭代器常见用法实例分析
Nov 22 Python
Selenium使用Chrome模拟手机浏览器方法解析
Apr 10 Python
Python中无限循环需要什么条件
May 27 Python
通过代码实例解析Pytest运行流程
Aug 20 Python
2020版Python学习路线图(附学习资料)
Sep 15 Python
怎么用Python识别手势数字
Jun 07 Python
Python 数据结构之十大经典排序算法一文通关
Oct 16 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
一个简单的MySQL数据浏览器
2006/10/09 PHP
PHP实现C#山寨ArrayList的方法
2015/07/16 PHP
PHP rmdir()函数的用法总结
2019/07/02 PHP
用JS判断IE版本的代码 超管用!
2011/08/09 Javascript
jQuery弹出(alert)select选择的值
2013/04/21 Javascript
jQuery中odd选择器的定义和用法
2014/12/23 Javascript
常用的JavaScript WEB操作方法分享
2015/02/28 Javascript
jQuery超酷平面式时钟效果代码分享
2020/03/30 Javascript
关于JSON与JSONP简单总结
2016/08/16 Javascript
JavaScript实现图片拖曳效果
2017/09/08 Javascript
vue自定义全局组件(自定义插件)的用法
2018/01/30 Javascript
用Node提供静态文件服务的方法
2018/07/06 Javascript
vue axios基于常见业务场景的二次封装的实现
2018/09/21 Javascript
利用Promise自定义一个GET请求的函数示例代码
2019/03/20 Javascript
vue实现吸顶、锚点和滚动高亮按钮效果
2019/10/21 Javascript
JS前端面试必备——基本排序算法原理与实现方法详解【插入/选择/归并/冒泡/快速排序】
2020/02/24 Javascript
vscode中Vue别名路径提示的实现
2020/07/31 Javascript
浅谈JavaScript节流和防抖函数
2020/08/25 Javascript
Python使用MYSQLDB实现从数据库中导出XML文件的方法
2015/05/11 Python
python列表操作之extend和append的区别实例分析
2015/07/28 Python
Google开源的Python格式化工具YAPF的安装和使用教程
2016/05/31 Python
python使用pil进行图像处理(等比例压缩、裁剪)实例代码
2017/12/11 Python
Python数据结构与算法之字典树实现方法示例
2017/12/13 Python
python3实现跳一跳点击跳跃
2018/01/08 Python
Python列表推导式与生成器表达式用法示例
2018/02/08 Python
Python实现的根据文件名查找数据文件功能示例
2018/05/02 Python
Python迭代器模块itertools使用原理解析
2019/12/11 Python
英国领先的葡萄酒专家:Majestic Wine
2017/05/30 全球购物
Jacadi Paris美国官方网站:法国童装品牌
2017/10/15 全球购物
一套Delphi的笔试题二
2013/05/11 面试题
计算机应用毕业生自荐信
2013/10/23 职场文书
电子商务专业自我鉴定
2013/12/18 职场文书
三万活动总结
2014/04/28 职场文书
校园元旦活动总结
2014/07/09 职场文书
2014年九一八事变演讲稿
2014/09/14 职场文书
承德避暑山庄导游词
2015/02/03 职场文书