神经网络|(十)概率论基础知识-正态分布及python仿真

【1】引言

前序学习进程中,已经掌握了二项分布、泊松分布相关知识及其python仿真技巧,相关文章链接为:

神经网络|(八)概率论基础知识-二项分布及python仿真-CSDN博客

神经网络|(九)概率论基础知识-泊松分布及python仿真-CSDN博客

在此基础上,今天进一步学习正态分布。

【2】正态分布

【2.1】分布函数

分布函数:设X是随机变量,x是任意实数,满足F(x)=P(X≤x)的函数就是分布函数。

可以将分布函数理解为一段区间的概率,很显然:

P{x1≤X≤x2}=P(X≤x2)-P(X≤x1)=F(x2)-F(x1)

【2.2】概率密度函数

概率密度函数:如果对于随机随机变量X的分布函数F(x),存在非负可积函数f(x),对于任意实数x有,

F(x)=\int_{-\infty }^{x}f(t)dt

则称X为连续型随机变量,f(x)称为X的概率密度函数,简称概率密度。

可以将概率密度函数理解为分布函数的导数,由于分布函数非负,所以概率密度非负。很显然:

\int_{-\infty }^{\infty }f(x)=1

P\left \{ x_{1}\leqslant x\leqslant x_{2} \right \}=F(x_{1})-F(x_{2})=\int_{x_{1}}^{x_{2}}f(x)dx

【2.3】正态分布

若连续型随机变量X的概率密度函数满足:

f(x)=\frac{1}{\sqrt{2\pi}\sigma }e^{-\frac{(x-\mu )^{2}}{2\sigma ^{2}}}(-\infty<x<\infty )

其中\mu\sigma为常数,则称X服从参数为\mu\sigma的正态分布,或者也称为高斯分布。

正态分布记作X~N(\mu,\sigma^{^{2}})。

【3】官网教程

使用python语言,调用numpy模块中的np.random.normal()函数,可以实现对正态分布的数学仿真。

numpy.random.normal()函数的官网链接为:

numpy.random.normal — NumPy v2.2 Manual

官网对numpy.random.normal()函数的说明为:

图1  np.random.normal()函数的官网说明

具体的,np.random.normal()函数的参数为:

np.random.normal(
mu                #均值
sigma             #标准差
zise)             #样本量

【4】python仿真

使用python仿真有两种方法,第一种方法是直接对正态分布的概率密度函数进行绘图,第二种方法是调用np.random.normal()函数生成一些列随机数,再对这些随机数绘制概率密度图。

【4.1】概率密度函数仿真

首先给出需要的模块:

import numpy as np  #引入numpy模块
import matplotlib.pyplot as plt  #引入matplotlib模块

然后定义正态分布的基本参数:

# 定义正态分布的参数
# 均值
mu1 = 0
# 标准差
sigma1 = 1
sigma2 = 5

这里给出了两个标准差选项,目的是仿真不同标准差时的概率密度函数曲线。

然后定义自变量:

# 绘制正态分布的概率密度函数曲线
x1 = np.linspace(-3, 3, 100)
x2 = np.linspace(-10, 10, 100)

这里定义了两个自变量,目的是仿真不同区间范围的概率密度函数曲线。

然后定义因变量,直接将概率密度函数代入:

p1 = (1 / (np.sqrt(2 * np.pi) * sigma1)) * np.exp(-(x1 - mu1)**2 / (2 * sigma1**2))
p2 = (1 / (np.sqrt(2 * np.pi) * sigma1)) * np.exp(-(x2 - mu1)**2 / (2 * sigma1**2))
p3 = (1 / (np.sqrt(2 * np.pi) * sigma2)) * np.exp(-(x1 - mu1)**2 / (2 * sigma1**2))
p4 = (1 / (np.sqrt(2 * np.pi) * sigma2)) * np.exp(-(x2 - mu1)**2 / (2 * sigma1**2))

之后是画图:

plt.plot(x1, p1, 'k', linewidth=5,label='(-3,3),μ=0,σ=1')
plt.plot(x2, p2, 'r', linewidth=2,label='(-10,10),μ=0,σ=5')
plt.plot(x1, p3, 'g', linewidth=5,label='(-3,3),μ=0,σ=1')
plt.plot(x2, p4, '-b', linewidth=2,label='(-10,10),μ=0,σ=5')


# 添加标题和标签
plt.title('Normal Distribution Simulation')
plt.xlabel('Value')
plt.ylabel('Probability Density')
plt.legend()
plt.savefig('f(x)-simulation.png')
# 显示图形
plt.show()

代码运行后,获得的图像为:

图2  概率密度函数仿真效果

由图2可见,正态分布的概率密度函数在较大范围上的分布趋势是一致的:

在取均值的时候函数获得极大值,离坐标轴两侧越远的地方,概率密度函数的取值越接近0。

标准差越大,函数的极大值越小。

此时的完整代码为:

import numpy as np  #引入numpy模块
import matplotlib.pyplot as plt  #引入matplotlib模块

# 定义正态分布的参数
# 均值
mu1 = 0
# 标准差
sigma1 = 1
sigma2 = 5

# 绘制正态分布的概率密度函数曲线
x1 = np.linspace(-3, 3, 100)
x2 = np.linspace(-10, 10, 100)

p1 = (1 / (np.sqrt(2 * np.pi) * sigma1)) * np.exp(-(x1 - mu1)**2 / (2 * sigma1**2))
p2 = (1 / (np.sqrt(2 * np.pi) * sigma1)) * np.exp(-(x2 - mu1)**2 / (2 * sigma1**2))
p3 = (1 / (np.sqrt(2 * np.pi) * sigma2)) * np.exp(-(x1 - mu1)**2 / (2 * sigma1**2))
p4 = (1 / (np.sqrt(2 * np.pi) * sigma2)) * np.exp(-(x2 - mu1)**2 / (2 * sigma1**2))

plt.plot(x1, p1, 'k', linewidth=5,label='(-3,3),μ=0,σ=1')
plt.plot(x2, p2, 'r', linewidth=2,label='(-10,10),μ=0,σ=1')
plt.plot(x1, p3, 'g', linewidth=5,label='(-3,3),μ=0,σ=5')
plt.plot(x2, p4, '-b', linewidth=2,label='(-10,10),μ=0,σ=5')


# 添加标题和标签
plt.title('Normal Distribution Simulation')
plt.xlabel('Value')
plt.ylabel('Probability Density')
plt.legend()
plt.savefig('f(x)-simulation.png')
# 显示图形
plt.show()

【4.2】np.random.normal()函数仿真

np.random.normal()函数仿真和概率密度函数仿真函数的本质区别在于:np.random.normal()函数仿真是按照正态分布的规律生成随机数,然后把随机数的概率密度绘制出来,随机数的分布本身就符合正态分布的规律;而概率密度函数的仿真,是将概率密度函数用图像画出来。

np.random.normal()函数仿真同样需要引入模块和提前定义好需要的参数:

import numpy as np  #引入numpy模块
import matplotlib.pyplot as plt  #引入matplotlib模块

# 定义正态分布的参数
# 均值
mu1 = 0
# 标准差
sigma1 = 1
sigma2 = 5

然后还需要定义一个输出的随机数个数:

# 生成的样本数量
sample_size = 1000

之后生成随机样本数:

# 生成服从正态分布的随机数
samples1 = np.random.normal(mu1, sigma1, sample_size)
samples2 = np.random.normal(mu1, sigma2, sample_size)

因为标准差选了两个,所以生成的随机数也输出了两份。

然后就可以绘制随机数的概率分布直方图:

# 绘制直方图来可视化正态分布
plt.hist(samples1, bins=50, density=True, alpha=0.7, color='b',label='μ=0,σ=1')
plt.hist(samples2, bins=50, density=True, alpha=0.7, color='r',label='μ=0,σ=5')

之后进行图像的细节标注:

# 添加标题和标签
plt.title('Normal Distribution Simulation')
plt.xlabel('Value')
plt.ylabel('Probability Density')
plt.legend()
plt.savefig('gauss-simulation.png')
# 显示图形
plt.show()

代码运行获得的图像为:

图3  np.random.normal()函数仿真效果  

 由图3可见,np.random.normal()函数仿真效果和概率密度函数仿真的效果一致:

在取均值的时候函数获得极大值,离坐标轴两侧越远的地方,概率密度函数的取值越接近0。

标准差越大,函数的极大值越小。

此时的完整代码为:

import numpy as np  #引入numpy模块
import matplotlib.pyplot as plt  #引入matplotlib模块

# 定义正态分布的参数
# 均值
mu1 = 0
# 标准差
sigma1 = 1
sigma2 = 5

# 生成的样本数量
sample_size = 1000

# 生成服从正态分布的随机数
samples1 = np.random.normal(mu1, sigma1, sample_size)
samples2 = np.random.normal(mu1, sigma2, sample_size)

# 绘制直方图来可视化正态分布
plt.hist(samples1, bins=50, density=True, alpha=0.7, color='b',label='μ=0,σ=1')
plt.hist(samples2, bins=50, density=True, alpha=0.7, color='r',label='μ=0,σ=5')

# 添加标题和标签
plt.title('Normal Distribution Simulation')
plt.xlabel('Value')
plt.ylabel('Probability Density')
plt.legend()
plt.savefig('gauss-simulation.png')
# 显示图形
plt.show()

【4.3】对比仿真

进一步,将概率密度函数仿真和np.random.normal()函数仿真放到一起,这里直接给出完整代码:

import numpy as np  #引入numpy模块
import matplotlib.pyplot as plt  #引入matplotlib模块

# 定义正态分布的参数
# 均值
mu1 = 0
# 标准差
sigma1 = 1
sigma2 = 5

# 生成的样本数量
sample_size = 1000

# 生成服从正态分布的随机数
samples1 = np.random.normal(mu1, sigma1, sample_size)
samples2 = np.random.normal(mu1, sigma2, sample_size)

# 绘制直方图来可视化正态分布
plt.hist(samples1, bins=50, density=True, alpha=0.7, color='b',label='μ=0,σ=1')
plt.hist(samples2, bins=50, density=True, alpha=0.7, color='r',label='μ=0,σ=5')

# 绘制正态分布的概率密度函数曲线
x1 = np.linspace(-3, 3, 100)
x2 = np.linspace(-10, 10, 100)

p1 = (1 / (np.sqrt(2 * np.pi) * sigma1)) * np.exp(-(x1 - mu1)**2 / (2 * sigma1**2))
p2 = (1 / (np.sqrt(2 * np.pi) * sigma1)) * np.exp(-(x2 - mu1)**2 / (2 * sigma1**2))
p3 = (1 / (np.sqrt(2 * np.pi) * sigma2)) * np.exp(-(x1 - mu1)**2 / (2 * sigma1**2))
p4 = (1 / (np.sqrt(2 * np.pi) * sigma2)) * np.exp(-(x2 - mu1)**2 / (2 * sigma1**2))

plt.plot(x1, p1, 'k', linewidth=5,label='(-3,3),μ=0,σ=1')
plt.plot(x2, p2, 'r', linewidth=2,label='(-10,10),μ=0,σ=1')
plt.plot(x1, p3, 'g', linewidth=5,label='(-3,3),μ=0,σ=5')
plt.plot(x2, p4, '-b', linewidth=2,label='(-10,10),μ=0,σ=5')

# 添加标题和标签
plt.title('Normal Distribution Simulation')
plt.xlabel('Value')
plt.ylabel('Probability Density')
plt.legend()
plt.savefig('Normal-simulation.png')
# 显示图形
plt.show()

代码运行获得的图像为:

图4 概率密度函数仿真和np.random.normal()函数仿真效果 

由图4可见,概率密度函数仿真和np.random.normal()函数仿真效果在整体上的分布趋势完全一致,这两种仿真都可以用了学习正态分布。

进一步,因为概率密度函数仿真存在只改变自变量期间的设置,为此稍微优化一下代码,获得更具代表性的图像:

图5  概率密度函数仿真和np.random.normal()函数仿真效果-优化

此时的完整代码为:

import numpy as np  #引入numpy模块
import matplotlib.pyplot as plt  #引入matplotlib模块

# 定义正态分布的参数
# 均值
mu1 = 0
# 标准差
sigma1 = 1
sigma2 = 5

# 生成的样本数量
sample_size = 1000

# 生成服从正态分布的随机数
samples1 = np.random.normal(mu1, sigma1, sample_size)
samples2 = np.random.normal(mu1, sigma2, sample_size)

# 绘制直方图来可视化正态分布
plt.hist(samples1, bins=50, density=True, alpha=0.7, color='b',label='μ=0,σ=1')
plt.hist(samples2, bins=50, density=True, alpha=0.7, color='r',label='μ=0,σ=5')

# 绘制正态分布的概率密度函数曲线
x1 = np.linspace(-3, 3, 100)
x2 = np.linspace(-10, 10, 100)

#p1 = (1 / (np.sqrt(2 * np.pi) * sigma1)) * np.exp(-(x1 - mu1)**2 / (2 * sigma1**2))
p2 = (1 / (np.sqrt(2 * np.pi) * sigma1)) * np.exp(-(x2 - mu1)**2 / (2 * sigma1**2))
#p3 = (1 / (np.sqrt(2 * np.pi) * sigma2)) * np.exp(-(x1 - mu1)**2 / (2 * sigma1**2))
p4 = (1 / (np.sqrt(2 * np.pi) * sigma2)) * np.exp(-(x2 - mu1)**2 / (2 * sigma1**2))

#plt.plot(x1, p1, 'k', linewidth=5,label='(-3,3),μ=0,σ=1')
plt.plot(x2, p2, 'g', linewidth=2,label='(-10,10),μ=0,σ=1')
#plt.plot(x1, p3, 'g', linewidth=5,label='(-3,3),μ=0,σ=5')
plt.plot(x2, p4, 'b', linewidth=2,label='(-10,10),μ=0,σ=5')

# 添加标题和标签
plt.title('Normal Distribution Simulation')
plt.xlabel('Value')
plt.ylabel('Probability Density')
plt.legend()
plt.savefig('Normal-simulation.png')
# 显示图形
plt.show()

【5】总结

回顾了正态分布基础知识,对正态分布进行了python仿真。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/972358.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

centos8 使用yum安装程序出现报错

在执行yum指令出现源更新不了Could not resolve host: mirrorlist.centos.org&#xff1b; Unknown error问题 yum -y update结果 Errors during downloading metadata for repository appstream: - Curl error (6): Couldnt resolve host name for http://mirrorlist.centos…

MSI微星电脑冲锋坦克Pro Vector GP76 12UGS(MS-17K4)原厂Win11系统恢复镜像,含还原功能,预装OEM系统下载

适用机型&#xff1a;【MS-17K4】 链接&#xff1a;https://pan.baidu.com/s/1P8ZgXc6S_J9DI8RToRd0dQ?pwdqrf1 提取码&#xff1a;qrf1 微星笔记本原装出厂WINDOWS11系统自带所有驱动、出厂主题壁纸、系统属性专属联机支持标志、Office办公软件、MSI Center控制中心等预装…

手机控制电脑远程关机

远程看看软件兼容iOS和Android设备&#xff0c;该软件除了能通过电脑远程关闭另一台电脑外&#xff0c;您还可以通过它在手机上远程关闭公司的电脑。您可以按照以下步骤进行操作以实现电脑远程关机&#xff1a; 步骤1.在手机应用商店搜索“远程看看”进行软件安装&#xff0c;…

html网络安全工具源码 网络安全前端

&#x1f345; 点击文末小卡片 &#xff0c;免费获取网络安全全套资料&#xff0c;资料在手&#xff0c;涨薪更快 前端常见的网络安全包括&#xff1a;xss&#xff08;跨站脚本攻击&#xff09;、csrf&#xff08;跨站请求伪造&#xff09;、sql注入攻击等。 1&#xff09;跨站…

VMware新建虚拟机

看看自己的电脑是什么内核&#xff0c;有几个处理器 再分配给虚拟机 镜像文件需要自己安装下载地方https://mirrors.aliyun.com/centos/?spma2c6h.13651104.d-2001.8.3fb1320cuI1jeS 然后就出现了 然后开启虚拟机&#xff0c;等待 等待之后如下&#xff0c;选择语言 等待一段时…

Comsol 二维Voronoi泰森多边形结构振动传输特性

Voronoi 泰森多边形结构在振动传输特性方面具有一些独特的特点&#xff1a; 1. 频率特性&#xff1a;Voronoi 泰森多边形结构的频率特性受到其几何形状和材料特性的影响。不规则的边界和内部区域的形状、尺寸和材料会影响结构的振动模态和频率响应。 2. 波的传播&#xff1a;…

三、linux字符驱动详解

在上一节完成NFS开发环境的搭建后&#xff0c;本节将探讨Linux字符设备驱动的开发。字符设备驱动作为Linux内核的重要组成部分&#xff0c;主要负责管理与字符设备&#xff08;如串口、键盘等&#xff09;的交互&#xff0c;并为用户空间程序提供统一的读写操作接口。 驱动代码…

【Flink快速入门-7.Flink 状态管理】

Flink 状态管理 实验介绍 在批计算中&#xff0c;我们对某个特定 Batch 的数据通过一系列计算之后输出一个最终结果&#xff0c;你会发现我们并没有提到过数据的状态&#xff0c;或者说我们对数据状态并不关心。但是在流计算中&#xff0c;有状态的计算是流处理框架中的重要功…

【JavaEE进阶】数据库连接池

目录 &#x1f334;数据库连接池 &#x1f38b;数据库连接池的使用 &#x1f332;MySQL企业开发规范 &#x1f334;数据库连接池 数据库连接池负责分配、管理和释放数据库连接&#xff0c;它允许应⽤程序重复使⽤⼀个现有的数据库连接&#xff0c;⽽不是再重新建⽴⼀个. 没…

剑指 Offer II 025. 链表中的两数相加

comments: true edit_url: https://github.com/doocs/leetcode/edit/main/lcof2/%E5%89%91%E6%8C%87%20Offer%20II%20025.%20%E9%93%BE%E8%A1%A8%E4%B8%AD%E7%9A%84%E4%B8%A4%E6%95%B0%E7%9B%B8%E5%8A%A0/README.md 剑指 Offer II 025. 链表中的两数相加 题目描述 给定两个 非…

数据分析--数据清洗

一、数据清洗的重要性&#xff1a;数据质量决定分析成败 1.1 真实案例警示 电商平台事故&#xff1a;2019年某电商大促期间&#xff0c;因价格数据未清洗导致错误标价&#xff0c;产生3000万元损失医疗数据分析&#xff1a;未清洗的异常血压值&#xff08;如300mmHg&#xff…

[算法学习笔记]1. 枚举与暴力

一、枚举算法 定义 枚举是基于已有知识来猜测答案的问题求解策略。即在已知可能答案的范围内&#xff0c;通过逐一尝试寻找符合条件的解。 2. 核心思想 穷举验证&#xff1a;对可能答案集合中的每一个元素进行尝试终止条件&#xff1a;找到满足条件的解&#xff0c;或遍历完…

基于Flask的广西高校舆情分析系统的设计与实现

【Flask】基于Flask的广西高校舆情分析系统的设计与实现&#xff08;完整系统源码开发笔记详细部署教程&#xff09;✅ 目录 一、项目简介二、项目界面展示三、项目视频展示 一、项目简介 该系统综合运用Python、Flask框架及多种数据处理与可视化工具开发&#xff0c;结合Boot…

还在为AI模型部署发愁?VSCode插件让你轻松拥有DeepSeek和近百种AI模型!

1 还在为AI模型部署发愁&#xff1f;VSCode插件让你轻松拥有DeepSeek和近百种AI模型&#xff01; 1.1 背景 DeepSeek在春节期间突然大行其道&#xff0c;欣喜国力大增的同时&#xff0c;对于普通IT工作者&#xff0c;如何才能享受这一波AI红利&#xff0c;让自己的工作更出彩呢…

sourcetree gitee 详细使用

SSH 公钥设置 | Gitee 帮助中心 先配置公钥&#xff0c;输入gitee密码完成验证 gitee仓库创建完成 打开sourcetree 如果你本地有项目&#xff08;vite &#xff09;需要 git init 在设置中完成远程仓库的添加 &#xff08;ssh ,https) 直接提交推送&#xff0c;完成后&#xf…

ios苹果手机使用AScript应用程序实现UI自动化操作,非常简单的一种方式

现在要想实现ios的ui自动化还是非常简单的&#xff0c;只需要安装AScript这个自动化工具就可以了&#xff0c;而且安卓&#xff0c;iso还有windows都支持&#xff0c;非常好用。 在ios端安装之后&#xff0c;需要使用mac电脑或者windows电脑激活一下 使用Windows电脑激活​ 激…

【触想智能】工业显示器和普通显示器的区别以及工业显示器的主要应用领域分析

在现代工业中&#xff0c;工业显示器被广泛应用于各种场景&#xff0c;从监控系统到生产控制&#xff0c;它们在实时数据显示、操作界面和信息传递方面发挥着重要作用。与普通显示器相比&#xff0c;工业显示器在耐用性、可靠性和适应特殊环境的能力上有着显著的差异。 触想工业…

HarmonyNext上传用户相册图片到服务器

图片选择就不用说了&#xff0c;直接用 无须申请权限 。 上传图片&#xff0c;步骤和android对比稍微有点复杂&#xff0c;可能是为了安全性考虑&#xff0c;需要将图片先拷贝到缓存目录下面&#xff0c;然后再上传&#xff0c;当然你也可以转成Base64&#xff0c;然后和服务…

.NET SixLabors.ImageSharp v1.0 图像实用程序控制台示例

使用 C# 控制台应用程序示例在 Windows、Linux 和 MacOS 机器上处理图像&#xff0c;包括创建散点图和直方图&#xff0c;以及根据需要旋转图像以便正确显示。 这个小型实用程序库需要将 NuGet SixLabors.ImageSharp包&#xff08;版本 1.0.4&#xff09;添加到.NET Core 3.1/ …

第1章大型互联网公司的基础架构——1.2 客户端连接机房的技术1:DNS

客户端启动时要做的第一件事情就是通过互联网与机房建立连接&#xff0c;然后用户才可以在客户端与后台服务器进行网络通信。目前在计算机网络中应用较为广泛的网络通信协议是TCP/IP&#xff0c;它的通信基础是IP地址&#xff0c;因为IP地址有如下两个主要功能。 标识设备&…