使用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 01 Python
用Python编写一个国际象棋AI程序
Nov 28 Python
Python简单实现阿拉伯数字和罗马数字的互相转换功能示例
Apr 17 Python
Python中 map()函数的用法详解
Jul 10 Python
钉钉群自定义机器人消息Python封装的实例
Feb 20 Python
python读写csv文件方法详细总结
Jul 05 Python
python GUI库图形界面开发之PyQt5窗口背景与不规则窗口实例
Feb 25 Python
scrapy爬虫:scrapy.FormRequest中formdata参数详解
Apr 30 Python
基于django micro搭建网站实现加水印功能
May 22 Python
浅谈keras2 predict和fit_generator的坑
Jun 17 Python
使用Python+Appuim 清理微信的方法
Jan 26 Python
python中的None与NULL用法说明
May 25 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图片处理之使用imagecopyresampled函数实现图片缩放例子
2014/11/19 PHP
PHP实现GIF图片验证码
2015/11/04 PHP
PHP+swoole实现简单多人在线聊天群发
2016/01/19 PHP
php获取指定数量随机字符串的方法
2017/02/06 PHP
php使用变量动态创建类的对象用法示例
2017/02/06 PHP
js实现类似新浪微博首页内容渐显效果的方法
2015/04/10 Javascript
jQuery实现折叠、展开的菜单组效果代码
2015/09/16 Javascript
jQuery之动画效果大全
2016/11/09 Javascript
简单实现IONIC购物车功能
2017/01/10 Javascript
jquery滚动条插件slimScroll使用方法
2017/02/09 Javascript
js仿QQ邮箱收件人选择与搜索功能
2017/02/10 Javascript
Vuex之理解Store的用法
2017/04/19 Javascript
15个顶级开源JavaScript框架和库
2018/10/10 Javascript
Vue的H5页面唤起支付宝支付功能
2019/04/18 Javascript
Vue实现指令式动态追加小球动画组件的步骤
2020/12/18 Vue.js
python获取指定路径下所有指定后缀文件的方法
2015/05/26 Python
Python实现删除当前目录下除当前脚本以外的文件和文件夹实例
2015/07/27 Python
python实现图书馆研习室自动预约功能
2018/04/27 Python
解决pandas使用read_csv()读取文件遇到的问题
2018/06/15 Python
Python WSGI的深入理解
2018/08/01 Python
python 简单照相机调用系统摄像头实现方法 pygame
2018/08/03 Python
对Python中实现两个数的值交换的集中方法详解
2019/01/11 Python
Python代码实现删除一个list里面重复元素的方法
2019/04/02 Python
我喜欢你 抖音表白程序python版
2019/04/07 Python
windows下Python安装、使用教程和Notepad++的使用教程
2019/10/06 Python
jupyter notebook 恢复误删单元格或者历史代码的实现
2020/04/17 Python
Python selenium使用autoIT上传附件过程详解
2020/05/26 Python
css3实现input输入框颜色渐变发光效果代码
2014/04/02 HTML / CSS
一款纯css3实现的鼠标悬停动画按钮
2014/12/29 HTML / CSS
很酷的HTML5电子书翻页动画特效
2016/02/25 HTML / CSS
幼儿园美术教学反思
2014/01/31 职场文书
民主生活会批评与自我批评总结
2014/10/17 职场文书
2015建军节87周年演讲稿
2015/03/19 职场文书
2015年党员个人工作总结
2015/05/13 职场文书
ObjectMapper 如何忽略字段大小写
2021/06/29 Java/Android
mysql5.7的安装及Navicate长久免费使用的实现过程
2021/11/17 MySQL