使用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持久性管理pickle模块详细介绍
Feb 18 Python
python字符串的常用操作方法小结
May 21 Python
Python实现的多线程同步与互斥锁功能示例
Nov 30 Python
Python 3.6 读取并操作文件内容的实例
Apr 23 Python
Python实现在某个数组中查找一个值的算法示例
Jun 27 Python
Python3中bytes类型转换为str类型
Sep 27 Python
Python如何爬取微信公众号文章和评论(基于 Fiddler 抓包分析)
Jun 28 Python
Django文件存储 自己定制存储系统解析
Aug 02 Python
Pycharm 2020最新永久激活码(附最新激活码和插件)
Sep 17 Python
Python模块/包/库安装的六种方法及区别
Feb 24 Python
如何在向量化NumPy数组上进行移动窗口
May 18 Python
解析目标检测之IoU
Jun 26 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模板引擎SMARTY
2006/10/09 PHP
PHP实现的英文名字全拼随机排号脚本
2014/07/04 PHP
PHP常用数组函数介绍
2014/07/28 PHP
PHP获取指定时间段之间的 年,月,天,时,分,秒
2016/06/05 PHP
面向对象的javascript(笔记)
2009/10/06 Javascript
parseInt parseFloat js字符串转换数字
2010/08/01 Javascript
jQuery UI Dialog控件中的表单无法正常提交的解决方法
2010/12/19 Javascript
javascript 学习笔记(六)浏览器类型及版本信息检测代码
2011/04/08 Javascript
jquery插件jquery.LightBox.js实现点击放大图片并左右点击切换效果(附demo源码下载)
2016/02/25 Javascript
一步一步封装自己的HtmlHelper组件BootstrapHelper(二)
2016/09/14 Javascript
如何在Angular.JS中接收并下载PDF
2016/11/26 Javascript
jquery 一键复制到剪切板的实例
2017/09/20 jQuery
js闭包学习心得总结
2018/04/17 Javascript
使用webpack构建应用的方法步骤
2019/03/04 Javascript
微信小程序实现多选框功能的实例代码
2020/06/24 Javascript
js+canvas绘制图形验证码
2020/09/21 Javascript
[43:18]NB vs Infamous 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.22
2019/09/05 DOTA
[29:16]完美世界DOTA2联赛决赛日 Inki vs LBZS 第三场 11.08
2020/11/10 DOTA
python函数中return后的语句一定不会执行吗?
2017/07/06 Python
Python决策树之基于信息增益的特征选择示例
2018/06/25 Python
基于python实现学生管理系统
2018/10/17 Python
django迁移数据库错误问题解决
2019/07/29 Python
通过Python编写一个简单登录功能过程解析
2019/09/04 Python
python返回数组的索引实例
2019/11/28 Python
Pytorch使用MNIST数据集实现CGAN和生成指定的数字方式
2020/01/10 Python
Django-silk性能测试工具安装及使用解析
2020/11/28 Python
python wsgiref源码解析
2021/02/06 Python
Html5实现单张、多张图片上传功能
2019/04/28 HTML / CSS
Linux操作面试题
2012/05/16 面试题
应届行政管理专业个人自我评价
2013/12/28 职场文书
开业庆典答谢词
2014/01/18 职场文书
投资协议书范本
2014/04/21 职场文书
建筑工地文明标语
2014/10/09 职场文书
2015年幼儿园德育工作总结
2015/05/25 职场文书
Vue.js 带下拉选项的输入框(Textbox with Dropdown)组件
2021/04/17 Vue.js
Python3.10的一些新特性原理分析
2021/09/15 Python