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

news/2025/2/8 14:32:47 标签: 概率论

【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.niftyadmin.cn/n/5844972.html

相关文章

在rtthread中,scons构建时,它是怎么知道是从rtconfig.h找宏定义,而不是从其他头文件找?

在rtthread源码中&#xff0c;每一个bsp芯片板级目录下都有一个 SConstruct scons构建脚本的入口&#xff0c; 在这里把rtthread tools/目录下的所有模块都添加到了系统路径中&#xff1a; 在tools下所有模块中&#xff0c;最重要的是building.py模块&#xff0c;在此脚本里面…

智慧交通:如何通过数据可视化提升城市交通效率

随着城市化进程的加速&#xff0c;交通管理面临着前所未有的挑战。为了应对日益复杂的交通状况&#xff0c;智慧交通系统应运而生&#xff0c;其中数据可视化技术成为了提升交通管理效率的关键一环。本文将探讨如何利用山海鲸可视化软件来优化交通管理&#xff0c;并展示其在智…

3.1 可视化算子编程语言

HuggingFists的VO编程语言与常见的其它编程语言有一定的区别。其语言由两种不同的语法特征构成。一部分以可视化算子作为语法基础(简称&#xff1a;VO-O)&#xff0c;辅助使用者可视化的完成数据处理/分析流程的编写&#xff1b;一部分采用表达式语法(简称&#xff1a;VO-E)&am…

python编程-类结构,lambda语法,原始字符串

一个类的基本结构包括以下部分&#xff1a; 类名&#xff1a;用来描述具有相同属性和方法的对象的集合。 属性&#xff1a;类变量或实例变量&#xff0c;用于处理类及其实例对象的相关数据。 方法&#xff1a;在类中定义的函数&#xff0c;用于执行特定操作。 构造器&#xff…

Ubuntu 下 nginx-1.24.0 源码分析 - ngx_write_stderr函数

定义 在ngx_log.h 中 static ngx_inline void ngx_write_stderr(char *text) {(void) ngx_write_fd(ngx_stderr, text, ngx_strlen(text)); } 在开发软件时&#xff0c;尤其是像 Nginx 这样复杂的服务器软件&#xff0c;开发者需要一种方法来输出调试信息或者错误信息。这段代码…

基于asr的所见即可说方案

年前写的文章对所见即可说方案进一步调研-CSDN博客&#xff0c;针对rk3568定制版&#xff0c;进行了Accessibility实现所见即可说功能的验证与调研&#xff0c;结论是不可行。 最终解决方案是&#xff1a;结合科大讯飞的AI大模型智能助手&#xff0c;使用rk3588板&#xff08;…

Harmony os router 使用详解

关于HarmonyOS NEXT中ArkTS的路由&#xff08;Router&#xff09;模块实现原理和使用方法&#xff0c;结合官方文档和开发实践&#xff0c;可总结如下核心要点&#xff1a; 一、Router模块的基础能力 Router模块是HarmonyOS页面导航的核心工具&#xff0c;主要提供两种跳转模…

LSSVM最小二乘支持向量机多变量多步光伏功率预测(Matlab)

代码下载&#xff1a;LSSVM最小二乘支持向量机多变量多步光伏功率预测&#xff08;Matlab&#xff09; LSSVM最小二乘支持向量机多变量多步光伏功率预测 一、引言 1.1、研究背景与意义 随着全球能源危机和环境问题的日益严重&#xff0c;可再生能源的开发利用成为了世界各国…