当前位置: 首页 > article >正文

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

【1】引言

前序已经学习了古典概型、条件概率、全概率公式和贝叶斯公式,它们作为基础,解释了事件发生及其概率的对应关系,相关文章链接为:

神经网络|(四)概率论基础知识-古典概型-CSDN博客

神经网络|(五)概率论基础知识-条件概率-CSDN博客 

神经网络|(六)概率论基础知识-全概率公式_部分概率和总概率的关系-CSDN博客

神经网络|(七)概率论基础知识-贝叶斯公式-CSDN博客 

在此基础上,我们更进一步,学习二项分布。

【2】概念分析

【2.1】随机变量

时间的发生可以用符号来记录,例如事件A,事件B等等。每个时间具体发生的情况又可以用数量来表达,例如事件A发生时记录为1,事件B发生时有5只小猫在玩耍3只小猫在睡觉等,总而言之千般万物各有对应的表征。

进一步,各个事件发生时,真正改变的那个因素才是我们关心的,这个因素就是变量。

随机变量就是随机试验中,事件发生时会改变的因素。

随机试验的特点是:试验可以在相同的条件下重复;每次试验的结果不止一个,且能明确所有可能的结果;但实际上不能提前预知哪个结果会出现。

所以,随机变量就是:可在相同条件下重复的试验中,虽然知道所有可能结果,但无法确定具体哪种结果可能出现时,具体出现的那个结果的表征,随机变量代表了具体的试验结果。

随机变量有离散和连续两种形式,此处我们先研究离散形式的随机变量。

【2.2】离散型随机变量及其分布

虽然定义了离散型随机变量这个名字,但还是要强调:

随机变量是随机试验的结果表征,因为只有随机试验完成,才知道具体的结果,所以这个结果的取值随着试验次数的增加不断变化,又因为试验都是在相同的条件下重复进行,所以每次出现的结果彼此独立、互不影响。

离散型的随机变量,就是指这些相互独立的随机变量的取值是跳跃的,在数学上的呈现是离散的点,而非练成一条线。

如果记X为随机变量,以x记录具体的随机变量取值,就可以简写随机试验的概率:

P{X=x}=p

在全概率公式的分析中已知:各个分概率对应的事件,是彼此互斥但总体互补的关系,它们互不隶属,但总体上能凑成一个完整的试验。所以各个分概率加起来,总和应该是1。

所以随机试验的概率,详细写可以为:

P\left \{ X=x_{k} \right \}=p_{_{k}}(k=1,2,...)

具体的解释为:随机变量X取值为x_{k}时的概率为p_{k}

同时也一定会满足:

\begin{matrix} P\left \{ X=x_{k} \right \}=p_{_{k}}\geqslant 0 \\ \sum_{k=0}^{k=\infty } p_{_{k}}=1 \end{matrix}

【2.3】二项分布-伯努利分布

如果一个随机试验只有两种结果:A或者非\bar{A},这种试验可以称为伯努利试验。

伯努利试验的概率,可以记作:P(A)=p(0<p<1)和P(\bar{A})=1-P。

伯努利试验重复n次,成为n重伯努利试验。如果想计算这n次试验中,A发生k次的概率,就可以分析:

a.用X记录A发生;

b.用X=k表征A发生k次。

所以有:

P\left \{ X=k \right \}=C_{n}^{k}p^{k}(1-p)^{n-k}

刚好,上式就是二项式[p+(1-p)]^{n}的第n项,所以n重伯努利试验结果的分布规律,也称为二项分布。

本质上,二项分布涉及三个量:代表事件的X,记录事件的x,以及时间对应的概率p。

当n=1时,二项分布也称为(0-1)分布。

有时候为了让公式更好看和便于书写,可以记录q=1-p。

【3】二项分布python仿真

使用python语言,调用numpy模块中的numpy.random.binomial()函数,可以实现对多重伯努利试验概率分布即二项分布的数学仿真。

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

https://numpy.org/doc/stable/reference/random/generated/numpy.random.binomial.html

这个函数是按照伯努利试验概率分布的形式生成随机数,官网对此的说明为:

图1  numpy.random.binomial()函数生成随机数工作原理

numpy.random.binomial()函数的参数解释为:

random.binomial(n, p, size)

n:伯努利试验的次数

p:伯努利试验的成功概率

size:把上述n次伯努利试验看成一个完整的大型伯努利试验,size代表对这个大型伯努利试验重复的次数,实际上就是打包重复n重伯努利试验

基于此函数的特点,先引入必要模块和定义所需参数:

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

# 二项分布参数
n = 10  # 试验次数
p = 0.5  # 成功的概率
size = 1000  # 生成随机数的数量

然后生成伯努利随机数:

# 生成符合二项分布的随机数
data_binomial = np.random.binomial(n, p, size) #随机数分布符合二项分布的形式

之后就是对随机数的分布情况进行绘图:

# 绘制直方图
fig,axs=plt.subplots(1,2) #定义一行两列的图像绘制
axs[0].hist(data_binomial, bins=n+1, density=False, alpha=0.6, color='g') #按数量绘制生成的数字分布图
axs[1].hist(data_binomial, bins=n+1, density=True, alpha=0.6, color='y') #按概率回执生成的数字分布图
fig.suptitle('Binomial Distribution Simulation',y=0.95) #设置图像名称
axs[0].set_xlabel('Number of Successes') #设置X轴标签
axs[0].set_ylabel('Probability') #设置Y轴标签
axs[1].set_xlabel('Number of Successes') #设置X轴标签
plt.savefig(‘binomial.png’) #保存图像
plt.show() #显示图像

在这里调用了hist()函数进行数据的概率分布画图,如果不是很熟悉,可以参考链接回忆:

python画图|hist()函数画直方图初探_python hist()-CSDN博客

python画图|hist()函数画直方图进阶_ax.hist()函数-CSDN博客 

python画图|hist()函数深层体验_python hist函数-CSDN博客 

python画图|hist()函数高阶探索_python 画图.hist(bars=100)-CSDN博客 

puthon画图|hist()函数深度探索-CSDN博客

代码使用了10次伯努利试验,单次成功率为0.5,然后对这10次c重伯努利试验打包dabao重复1000次,获得的试验成功次数和概率为:

图2 伯努利仿真

图2的显示效果非常类似于正态分布,其中仿真结果等于5的次数出现了大概250次,在所有渠道的数据中的占比大约为0.28。

此时的完整代码为:

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

# 二项分布参数
n = 10  # 试验次数
p = 0.5  # 成功的概率
size = 1000  # 生成随机数的数量

# 生成符合二项分布的随机数
data_binomial = np.random.binomial(n, p, size) #随机数分布符合二项分布的形式

# 绘制直方图
fig,axs=plt.subplots(1,2) #定义一行两列的图像绘制
axs[0].hist(data_binomial, bins=n+1, density=False, alpha=0.6, color='g') #按数量绘制生成的数字分布图
axs[1].hist(data_binomial, bins=n+1, density=True, alpha=0.6, color='y') #按概率回执生成的数字分布图
fig.suptitle('Binomial Distribution Simulation',y=0.95) #设置图像名称
axs[0].set_xlabel('Number of Successes') #设置X轴标签
axs[0].set_ylabel('Probability') #设置Y轴标签
axs[1].set_xlabel('Number of Successes') #设置X轴标签
plt.savefig('binomial.png') #保存图像
plt.show() #显示图像

【4】细节说明

使用python语言调用numpy模块中的numpy.random.binomial()函数时,生成的数据本身按照二项分布的形式出现,实际代码没有去编写二项分布函数。

【5】总结

回顾了二项分布的基础知识,使用python语言调用numpy模块中的numpy.random.binomial()函数进行了二项分布效果仿真。


http://www.kler.cn/a/541345.html

相关文章:

  • Java 使用腾讯翻译 API 实现含 HTML 标签文本,json值,精准翻译工具
  • 【Unity】性能优化:UI的合批 图集和优化
  • 代码随想录二刷|回溯4
  • 手动配置IP
  • Spatial Branching for Conic Non-Convexities in Optimal Electricity-Gas Flow
  • 高并发读多写少场景下的高效键查询与顺序统计的方案思路
  • 1.Excel:某停车场计划调整收费标准❗(13)
  • 5、大模型的记忆与缓存
  • MariaDB MaxScale实现mysql8主从同步读写分离
  • 升级进行中 您的邮箱正在作为Outlook 2013升级的一部分优化
  • DEEPSEEK与GPT等AI技术在机床数据采集与数字化转型中的应用与影响
  • 苍穹外卖学习
  • 利用Minio实现大文件分片上传、断点续传、秒传
  • 5G无线网络技术深度解析
  • 游戏引擎学习第94天
  • 【系统架构设计师】体系结构文档化
  • 8种方法解决电脑QQ能上网但是浏览器不能上网问题
  • Android车机DIY开发之软件篇(十二) AOSP12下载编译
  • windows server独立部署Qwen2.5-vl-7B
  • Web3 的未来:从技术变革到社会经济影响的深度思考
  • 13.6 基于 LangChain架构优化实战:OpenAI-Translator翻译系统重构与10倍效率提升秘籍
  • vue基础(四)
  • 综合评价 | 基于随机变异系数-TOPSIS组合法的综合评价模型(Matlab)
  • python-leetcode 23.反转链表
  • repo使用介绍
  • Python:凯撒密码