使用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循环语句中else的用法总结
Sep 11 Python
Python元组知识点总结
Feb 18 Python
python3+pyqt5+itchat微信定时发送消息的方法
Feb 20 Python
python 动态调用函数实例解析
Oct 21 Python
Python 取numpy数组的某几行某几列方法
Oct 24 Python
利用PyCharm操作Github(仓库新建、更新,代码回滚)
Dec 18 Python
PyTorch的SoftMax交叉熵损失和梯度用法
Jan 15 Python
win10安装tesserocr配置 Python使用tesserocr识别字母数字验证码
Jan 16 Python
基于python实现matlab filter函数过程详解
Jun 08 Python
Python 忽略文件名编码的方法
Aug 01 Python
python time()的实例用法
Nov 03 Python
pytorch 6 batch_train 批训练操作
May 28 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
在IIS7.0下面配置PHP 5.3.2运行环境的方法
2010/04/13 PHP
PHP abstract 抽象类定义与用法示例
2018/05/29 PHP
浅析PHP中的 inet_pton 网络函数
2019/12/16 PHP
php5.3/5.4/5.5/5.6/7常见新增特性汇总整理
2020/02/27 PHP
jQuery 性能优化指南(3)
2009/05/21 Javascript
ie8下修改input的type属性报错的解决方法
2014/09/16 Javascript
jQuery切换所有复选框选中状态的方法
2015/07/02 Javascript
AngularJS基础 ng-mousemove 指令简单示例
2016/08/02 Javascript
新入门node.js必须要知道的概念(必看篇)
2016/08/10 Javascript
微信小程序中顶部导航栏的实现代码
2017/03/30 Javascript
jQuery Json数据格式排版高亮插件json-viewer.js使用方法详解
2017/06/12 jQuery
解决vue-cli单页面手机应用input点击手机端虚拟键盘弹出盖住input问题
2018/08/25 Javascript
JavaScript中作用域链的概念及用途讲解
2020/08/06 Javascript
Vue的el-scrollbar实现自定义滚动
2018/05/29 Python
pygame游戏之旅 添加游戏介绍
2018/11/20 Python
Python使用os.listdir()和os.walk()获取文件路径与文件下所有目录的方法
2019/04/01 Python
python中property和setter装饰器用法
2019/12/19 Python
PyCharm+Pipenv虚拟环境开发和依赖管理的教程详解
2020/04/16 Python
Kears 使用:通过回调函数保存最佳准确率下的模型操作
2020/06/17 Python
Python 中 sorted 如何自定义比较逻辑
2021/02/02 Python
澳大利亚手袋、珠宝和在线时尚精品店:The Way
2019/12/21 全球购物
婚礼证婚人证婚词
2014/01/08 职场文书
贺卡寄语大全
2014/04/11 职场文书
党员领导干部民主生活会批评与自我批评发言
2014/09/28 职场文书
秦兵马俑导游词
2015/02/02 职场文书
感恩母亲节活动总结
2015/02/10 职场文书
应届生个人的求职(自荐信范文2篇)
2019/08/23 职场文书
MySQL root密码的重置方法
2021/04/21 MySQL
Redis5之后版本的高可用集群搭建的实现
2021/04/27 Redis
vue使用v-model进行跨组件绑定的基本实现方法
2021/04/28 Vue.js
变长双向rnn的正确使用姿势教学
2021/05/31 Python
Redis高并发防止秒杀超卖实战源码解决方案
2021/11/01 Redis
Python+tkinter实现高清图片保存
2022/03/13 Python
vue实现省市区联动 element-china-area-data插件
2022/04/22 Vue.js
使用 DataAnt 监控 Apache APISIX的原理解析
2022/07/07 Servers
JS高级程序设计之class继承重点详解
2022/07/07 Javascript