使用python模拟高斯分布例子


Posted in Python onDecember 09, 2019

正态分布(Normal distribution),也称“常态分布”,又名高斯分布(Gaussian distribution)

正态曲线呈钟型,两头低,中间高,左右对称因其曲线呈钟形,因此人们又经常称之为钟形曲线。

若随机变量X服从一个数学期望为μ、方差为σ^2的正态分布。其概率密度函数为正态分布的期望值μ决定了其位置,其标准差σ决定了分布的幅度。当μ = 0,σ = 1时的正态分布是标准正态分布。

用python 模拟

#!/usr/bin/python
# -*- coding:utf-8 -*-

import numpy as np
from scipy import stats
import math
import matplotlib as mpl
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm
import seaborn


def calc_statistics(x):
  n = x.shape[0] # 样本个数
  # 手动计算
  m = 0
  m2 = 0
  m3 = 0
  m4 = 0
  for t in x:
    m += t
    m2 += t*t
    m3 += t**3
    m4 += t**4
  m /= n
  m2 /= n
  m3 /= n
  m4 /= n

  mu = m
  sigma = np.sqrt(m2 - mu*mu)
  skew = (m3 - 3*mu*m2 + 2*mu**3) / sigma**3
  kurtosis = (m4 - 4*mu*m3 + 6*mu*mu*m2 - 4*mu**3*mu + mu**4) / sigma**4 - 3
  print('手动计算均值、标准差、偏度、峰度:', mu, sigma, skew, kurtosis)

  # 使用系统函数验证
  mu = np.mean(x, axis=0)
  sigma = np.std(x, axis=0)
  skew = stats.skew(x)
  kurtosis = stats.kurtosis(x)
  return mu, sigma, skew, kurtosis


if __name__ == '__main__':
  d = np.random.randn(10000)
  print(d)
  print(d.shape)
  mu, sigma, skew, kurtosis = calc_statistics(d)
  print('函数库计算均值、标准差、偏度、峰度:', mu, sigma, skew, kurtosis)
  # 一维直方图
  mpl.rcParams['font.sans-serif'] = 'SimHei'
  mpl.rcParams['axes.unicode_minus'] = False
  plt.figure(num=1, facecolor='w')
  y1, x1, dummy = plt.hist(d, bins=30, normed=True, color='g', alpha=0.75, edgecolor='k', lw=0.5)
  t = np.arange(x1.min(), x1.max(), 0.05)
  y = np.exp(-t**2 / 2) / math.sqrt(2*math.pi)
  plt.plot(t, y, 'r-', lw=2)
  plt.title('高斯分布,样本个数:%d' % d.shape[0])
  plt.grid(b=True, ls=':', color='#404040')
  # plt.show()

  d = np.random.randn(100000, 2)
  mu, sigma, skew, kurtosis = calc_statistics(d)
  print('函数库计算均值、标准差、偏度、峰度:', mu, sigma, skew, kurtosis)

  # 二维图像
  N = 30
  density, edges = np.histogramdd(d, bins=[N, N])
  print('样本总数:', np.sum(density))
  density /= density.max()
  x = y = np.arange(N)
  print('x = ', x)
  print('y = ', y)
  t = np.meshgrid(x, y)
  print(t)
  fig = plt.figure(facecolor='w')
  ax = fig.add_subplot(111, projection='3d')
  # ax.scatter(t[0], t[1], density, c='r', s=50*density, marker='o', depthshade=True, edgecolor='k')
  ax.plot_surface(t[0], t[1], density, cmap=cm.Accent, rstride=1, cstride=1, alpha=0.9, lw=0.75, edgecolor='k')
  ax.set_xlabel('X')
  ax.set_ylabel('Y')
  ax.set_zlabel('Z')
  plt.title('二元高斯分布,样本个数:%d' % d.shape[0], fontsize=15)
  plt.tight_layout(0.1)
  plt.show()

使用python模拟高斯分布例子

使用python模拟高斯分布例子

来个6的

二元高斯分布方差比较

#!/usr/bin/python
# -*- coding:utf-8 -*-

import numpy as np
from scipy import stats
import matplotlib as mpl
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm


if __name__ == '__main__':
  x1, x2 = np.mgrid[-5:5:51j, -5:5:51j]
  x = np.stack((x1, x2), axis=2)
  print('x1 = \n', x1)
  print('x2 = \n', x2)
  print('x = \n', x)

  mpl.rcParams['axes.unicode_minus'] = False
  mpl.rcParams['font.sans-serif'] = 'SimHei'
  plt.figure(figsize=(9, 8), facecolor='w')
  sigma = (np.identity(2), np.diag((3,3)), np.diag((2,5)), np.array(((2,1), (1,5))))
  for i in np.arange(4):
    ax = plt.subplot(2, 2, i+1, projection='3d')
    norm = stats.multivariate_normal((0, 0), sigma[i])
    y = norm.pdf(x)
    ax.plot_surface(x1, x2, y, cmap=cm.Accent, rstride=1, cstride=1, alpha=0.9, lw=0.3, edgecolor='#303030')
    ax.set_xlabel('X')
    ax.set_ylabel('Y')
    ax.set_zlabel('Z')
  plt.suptitle('二元高斯分布方差比较', fontsize=18)
  plt.tight_layout(1.5)
  plt.show()

使用python模拟高斯分布例子

图像好看吗?

以上这篇使用python模拟高斯分布例子就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python脚本实现查找webshell的方法
Jul 31 Python
Python中的FTP通信模块ftplib的用法整理
Jul 08 Python
python的unittest测试类代码实例
Dec 07 Python
Django中使用celery完成异步任务的示例代码
Jan 23 Python
Python简单实现两个任意字符串乘积的方法示例
Apr 12 Python
python之django母板页面的使用
Jul 03 Python
判断python字典中key是否存在的两种方法
Aug 10 Python
Django中FilePathField字段的用法
May 21 Python
Python request post上传文件常见要点
Nov 20 Python
python3定位并识别图片验证码实现自动登录功能
Jan 29 Python
浅析Python模块之间的相互引用问题
Feb 26 Python
浅谈哪个Python库才最适合做数据可视化
Jun 28 Python
使用python+whoosh实现全文检索
Dec 09 #Python
Python 实现顺序高斯消元法示例
Dec 09 #Python
Python实现线性判别分析(LDA)的MATLAB方式
Dec 09 #Python
在python中做正态性检验示例
Dec 09 #Python
python实现高斯判别分析算法的例子
Dec 09 #Python
Pycharm使用远程linux服务器conda/python环境在本地运行的方法(图解))
Dec 09 #Python
使用 Python 写一个简易的抽奖程序
Dec 08 #Python
You might like
用php实现批量查询清除一句话后门的代码
2008/01/20 PHP
PHP简单获取上月、本月、近15天、近30天的方法示例
2017/07/03 PHP
js自带函数备忘 数组
2006/12/29 Javascript
jquery $(document).ready() 与window.onload的区别
2009/12/28 Javascript
jquery ajax abort()的使用方法
2010/10/28 Javascript
实现只能输入数字的input不用replace方法
2013/09/12 Javascript
JQuery调用WebServices的方法和4个实例
2014/05/06 Javascript
js实现图片无缝滚动特效
2020/03/19 Javascript
使用Object.defineProperty实现简单的js双向绑定
2016/04/15 Javascript
javascript html5摇一摇功能的实现
2016/04/19 Javascript
jQuery实现frame之间互通的方法
2017/06/26 jQuery
浅谈Vue3 Composition API如何替换Vue Mixins
2020/04/29 Javascript
React实现类似淘宝tab居中切换效果的示例代码
2020/06/02 Javascript
Vue生命周期activated之返回上一页不重新请求数据操作
2020/07/26 Javascript
Vue-cli4 配置 element-ui 按需引入操作
2020/09/11 Javascript
antd table按表格里的日期去排序操作
2020/11/17 Javascript
html5以及jQuery实现本地图片上传前的预览代码实例讲解
2021/03/01 jQuery
使用Python进行稳定可靠的文件操作详解
2013/12/31 Python
python操作 hbase 数据的方法
2016/12/18 Python
Python编程之基于概率论的分类方法:朴素贝叶斯
2017/11/11 Python
python3.6 +tkinter GUI编程 实现界面化的文本处理工具(推荐)
2017/12/20 Python
python脚本生成caffe train_list.txt的方法
2018/04/27 Python
基于python log取对数详解
2018/06/08 Python
Pandas读取MySQL数据到DataFrame的方法
2018/07/25 Python
Python面向对象之反射/自省机制实例分析
2018/08/24 Python
python里dict变成list实例方法
2019/06/26 Python
简单的Python调度器Schedule详解
2019/08/30 Python
pytorch加载自定义网络权重的实现
2020/01/07 Python
css3个性化字体_动力节点Java学院整理
2017/07/12 HTML / CSS
HTML5响应式(自适应)网页设计的实现
2017/11/17 HTML / CSS
叙述DBMS对数据控制功能有哪些
2016/06/12 面试题
公司领导九九重阳节发言稿2014
2014/09/25 职场文书
公务员个人年终总结
2015/02/12 职场文书
七年级生物教学反思
2016/02/20 职场文书
mysql字符串截取函数小结
2021/04/05 MySQL
opencv检测动态物体的实现
2021/07/21 Python