使用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实现在目录中查找指定文件的方法
Nov 11 Python
在Python中使用全局日志时需要注意的问题
May 06 Python
浅析python中的分片与截断序列
Aug 09 Python
Python实现读取文件最后n行的方法
Feb 23 Python
Python基于numpy灵活定义神经网络结构的方法
Aug 19 Python
详解Python核心编程中的浅拷贝与深拷贝
Jan 07 Python
对Python 文件夹遍历和文件查找的实例讲解
Apr 26 Python
python集合是否可变总结
Jun 20 Python
Python实现基于SVM的分类器的方法
Jul 19 Python
Django中自定义模型管理器(Manager)及方法
Sep 23 Python
pytorch下大型数据集(大型图片)的导入方式
Jan 08 Python
Python 基于jwt实现认证机制流程解析
Jun 22 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日期时间函数的高级应用技巧
2009/05/16 PHP
php IP转换整形(ip2long)的详解
2013/06/06 PHP
codeigniter教程之多文件上传使用示例
2014/02/11 PHP
php使用正则表达式提取字符串中尖括号、小括号、中括号、大括号中的字符串
2020/04/05 PHP
PHP7.0版本备注
2015/07/23 PHP
thinkphp框架下实现登录、注册、找回密码功能
2016/04/06 PHP
php使用ftp远程上传文件类(完美解决主从文件同步问题的方法)
2016/09/23 PHP
PHP实现的字符串匹配算法示例【sunday算法】
2017/12/19 PHP
php使用array_chunk函数将一个数组分割成多个数组
2018/12/05 PHP
PHP实现单文件、多个单文件、多文件上传函数的封装示例
2019/09/02 PHP
php设计模式之模板模式实例分析【星际争霸游戏案例】
2020/03/24 PHP
JavaScript类和继承 constructor属性
2010/03/04 Javascript
下载网站打开页面后间隔多少时间才显示下载链接地址的代码
2010/04/25 Javascript
点击进行复制的JS代码实例
2013/08/23 Javascript
jQuery中的$.ajax()方法应用
2014/05/06 Javascript
jQuery中parents()和parent()的区别分析
2014/10/28 Javascript
jquery append 动态添加的元素事件on 不起作用的解决方案
2015/07/30 Javascript
初识angular框架后的所思所想
2016/02/19 Javascript
基于JavaScript实现弹出框效果
2016/02/19 Javascript
vue,angular,avalon这三种MVVM框架优缺点
2016/04/27 Javascript
代码详解Vuejs响应式原理
2017/12/20 Javascript
jquery实现吸顶导航效果
2020/01/08 jQuery
解决vue+elementui项目打包后样式变化问题
2020/08/03 Javascript
vue自定义指令限制输入框输入值的步骤与完整代码
2020/08/30 Javascript
[01:07:21]NAVI vs VG Supermajor 败者组 BO3 第二场 6.5
2018/06/06 DOTA
Python入门篇之正则表达式
2014/10/20 Python
python3调用R的示例代码
2018/02/23 Python
python3实现斐波那契数列(4种方法)
2019/07/15 Python
pycharm新建一个python工程步骤
2019/07/16 Python
Python requests HTTP验证登录实现流程
2020/11/05 Python
Python如何实现感知器的逻辑电路
2020/12/25 Python
德国汽车零件和汽车配件网上商店:kfzteile24
2018/11/14 全球购物
连锁经营管理专业大学生求职信
2013/10/30 职场文书
2015元旦主持词开场白和结束语
2014/12/14 职场文书
2016年大学迎新晚会工作总结
2015/10/15 职场文书
2016年小学“我们的节日·中秋节”活动总结
2016/04/05 职场文书