使用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 检查数组元素是否存在类似PHP isset()方法
Oct 14 Python
Python实现单词拼写检查
Apr 25 Python
Python中返回字典键的值的values()方法使用
May 22 Python
python 的列表遍历删除实现代码
Apr 12 Python
python基于phantomjs实现导入图片
May 13 Python
使用Python设计一个代码统计工具
Apr 04 Python
详解Python 定时框架 Apscheduler原理及安装过程
Jun 14 Python
python实现递归查找某个路径下所有文件中的中文字符
Aug 31 Python
解决keras使用cov1D函数的输入问题
Jun 29 Python
Python实现列表索引批量删除的5种方法
Nov 16 Python
用Python 执行cmd命令
Dec 18 Python
Python中的socket网络模块介绍
Jul 23 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格式化工具Beautify PHP小小BUG
2008/04/24 PHP
PHP PDOStatement::fetchObject讲解
2019/02/01 PHP
从父页面读取和操作iframe中内容方法
2009/07/25 Javascript
jQuery源码分析之Event事件分析
2010/06/07 Javascript
jquery遍历select元素(实例讲解)
2013/12/31 Javascript
jQuery中queue()方法用法实例
2014/12/29 Javascript
jQuery插件PageSlide实现左右侧栏导航菜单
2015/04/12 Javascript
最新最热最实用的15个jQuery插件汇总
2015/07/05 Javascript
基于JavaScript实现移动端点击图片查看大图点击大图隐藏
2015/11/04 Javascript
详解Javascript事件驱动编程
2016/01/03 Javascript
JavaScript接口的实现三种方式(推荐)
2016/06/14 Javascript
JQuery DIV 动态隐藏和显示的方法
2016/06/23 Javascript
jQuery实现ajax的叠加和停止(终止ajax请求)
2016/08/08 Javascript
详解JS: reduce方法实现 webpack多文件入口
2017/02/14 Javascript
纯JS实现弹性导航条效果
2017/03/06 Javascript
React Form组件的实现封装杂谈
2018/05/07 Javascript
nodejs和react实现即时通讯简易聊天室功能
2019/08/21 NodeJs
js实现移动端图片滑块验证功能
2020/09/29 Javascript
JS中循环遍历数组的四种方式总结
2021/01/23 Javascript
[00:35]TI7不朽珍藏III——寒冰飞龙不朽展示
2017/07/15 DOTA
栈和队列数据结构的基本概念及其相关的Python实现
2015/08/24 Python
python dataframe常见操作方法:实现取行、列、切片、统计特征值
2018/06/09 Python
python原类、类的创建过程与方法详解
2019/07/19 Python
利用pyecharts实现地图可视化的例子
2019/08/12 Python
tensorflow 获取checkpoint中的变量列表实例
2020/02/11 Python
利用python实现汉诺塔游戏
2021/03/01 Python
HTML5+CSS3 实现灵动的动画 TAB 切换效果(DEMO)
2017/09/15 HTML / CSS
详解HTML5 Canvas标签及基本使用
2020/01/10 HTML / CSS
意大利网上书店:LaFeltrinelli
2020/06/12 全球购物
简述使用ftp进行文件传输时的两种登录方式?它们的区别是什么?常用的ftp文件传输命令是什么?
2016/11/20 面试题
2013年入党人员的自我鉴定
2013/10/25 职场文书
教师校本培训方案
2014/02/26 职场文书
投资意向书范本
2014/04/01 职场文书
揭牌仪式策划方案
2014/05/28 职场文书
何玥事迹观后感
2015/06/16 职场文书
《暗黑破坏神2:重制版》本周进行第一轮A测 目前可官网进行申请报名
2021/04/07 其他游戏