使用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 11 Python
Python实现字典依据value排序
Feb 24 Python
Python中常用信号signal类型实例
Jan 25 Python
Python使用matplotlib绘制多个图形单独显示的方法示例
Mar 14 Python
Python中循环引用(import)失败的解决方法
Apr 22 Python
Python2和Python3的共存和切换使用
Apr 12 Python
python函数的万能参数传参详解
Jul 26 Python
Python中 CSV格式清洗与转换的实例代码
Aug 29 Python
python实现的config文件读写功能示例
Sep 24 Python
新建文件时Pycharm中自动设置头部模板信息的方法
Apr 17 Python
Python 防止死锁的方法
Jul 29 Python
pycharm永久激活超详细教程
Oct 29 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扩展模块memcached长连接使用方法分析
2014/12/24 PHP
Laravel+jQuery实现AJAX分页效果
2016/09/14 PHP
Javascript 页面模板化很多人没有使用过的方法
2012/06/05 Javascript
document.createElement()用法
2013/03/13 Javascript
JavaScript创建类/对象的几种方式概述及实例
2013/05/06 Javascript
Bootstrap 源代码分析(未完待续)
2016/08/17 Javascript
学习掌握JavaScript中this的使用技巧
2016/08/29 Javascript
jQuery实现的checkbox级联选择下拉菜单效果示例
2016/12/26 Javascript
微信小程序左右滑动切换页面详解及实例代码
2017/02/28 Javascript
微信小程序实时聊天WebSocket
2018/07/05 Javascript
微信小程序实现自上而下字幕滚动
2018/07/14 Javascript
JavaScript实现矩形块大小任意缩放
2020/08/25 Javascript
在Python的Django框架中实现Hacker News的一些功能
2015/04/17 Python
python与C互相调用的方法详解
2017/07/14 Python
Python实现在线暴力破解邮箱账号密码功能示例【测试可用】
2017/09/06 Python
浅析Python数字类型和字符串类型的内置方法
2019/12/22 Python
python实现四人制扑克牌游戏
2020/04/22 Python
Python获取浏览器窗口句柄过程解析
2020/07/25 Python
阿联酋航空官方网站:Emirates
2017/10/17 全球购物
Roxy荷兰官方网站:冲浪、滑雪板、服装和配件
2019/10/22 全球购物
大学应届毕业生个人求职信
2013/09/23 职场文书
日语系毕业生推荐信
2013/11/11 职场文书
教师岗位聘任书范文
2014/03/29 职场文书
建房协议书
2014/04/11 职场文书
安全技术说明书
2014/05/09 职场文书
企业法人代表任命书
2014/06/06 职场文书
党的群众路线教育实践活动自我剖析材料
2014/10/08 职场文书
领导干部作风建设自查报告
2014/10/23 职场文书
简易离婚协议书范本
2014/10/24 职场文书
酒店辞职书范文
2015/02/26 职场文书
2015年世界粮食日演讲稿
2015/03/20 职场文书
检讨书怎么写
2015/05/07 职场文书
2016年度基层党建工作公开承诺书
2016/03/25 职场文书
laravel ajax curd 搜索登录判断功能的实现
2021/04/17 PHP
java如何实现socket连接方法封装
2021/09/25 Java/Android
德生TECSUN S-2000使用手册文字版
2022/05/10 无线电