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

【1】引言

在前序学习进程中,我们已经知晓二项分布是多重伯努利分布,二伯努利分布对应的是可以无限重复、结果只有两种可能的随机试验。

相关文章链接为:

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

上述文章还调用numpy模块中的numpy.random.binomial()函数,实现了对多重伯努利试验概率分布即二项分布的数学仿真。

【2】泊松分布

实际上,泊松分布是二项分布的一种近似

当二项分布的n很大而p很小时,就会有泊松分布:

上式的证明过程暂略。

泊松分布只有一个参数拉姆达λ。

【3】代码测试

使用python调用numpy模块下的np.random.poisson()函数可以实现按照泊松分布生成随机数。

点击下方链接,直达np.random.poisson()函数的官网教程:

numpy.random.poisson --- NumPy v2.2 Manual

官网页面的函数解释为:

++图1 np.random.poisson()函数官网说明++

首先进行必要模块的引入:

python 复制代码
import numpy as np #引入numpy模块
import matplotlib.pyplot as plt #引入matplotlib模块

然后定义泊松分布的参数,参数包括拉姆达λ和size:

python 复制代码
# 定义泊松分布的参数 λ,它代表单位时间(或空间)内事件的平均发生次数
lambda_value = 4
# 生成的随机样本数量
sample_size = 1000

官网对参数拉姆达λ和size的解释为:

++图2 np.random.poisson()函数官网参数说明++

拉姆达λ是n和p的乘积,必须是正数,实际上为0也不太可能;

size代表随机数的数量,可以是矩阵的各种维度形式,也可以就是一个单独的数字。

可以这样理解,random.poisson(lam , size)代表生成size个随机数,这些随机数服从泊松分布,泊松分布的参数为拉姆达λ。

在理解上述参数意义后,直接生成服从泊松分布的随机数:

python 复制代码
# 使用 numpy 生成服从泊松分布的随机数
samples = np.random.poisson(lam=lambda_value, size=sample_size) #生成满足泊松分布的随机数

之后的事情比较简单,把这些数据分布规律,再重新画出来即可:

python 复制代码
# 统计每个事件发生次数的频数
counts = np.bincount(samples)
# 计算每个事件发生次数对应的概率
probabilities = counts / sample_size

# 创建一个表示事件发生次数的数组
event_numbers = np.arange(len(counts))

# 绘制柱状图来展示仿真得到的泊松分布
plt.bar(event_numbers, probabilities, width=0.8, color='skyblue', edgecolor='green')

# 设置图表的标题和坐标轴标签
plt.title(f'Poisson Distribution Simulation (λ = {lambda_value})')
plt.xlabel('Number of Events')
plt.ylabel('Probability')

这段代码的原理是:由于已经按照泊松分布生成了随机数,所以这些随机数的分布规律必然和泊松分布的函数曲线相似,把这个规律画出来即可。

上述代码运行后,生成的图像为:

++图3 泊松分布仿真效果++

此时的完整代码为:

python 复制代码
import numpy as np #引入numpy模块
import matplotlib.pyplot as plt #引入matplotlib模块

# 定义泊松分布的参数 λ,它代表单位时间(或空间)内事件的平均发生次数
lambda_value = 4
# 生成的随机样本数量
sample_size = 1000

# 使用 numpy 生成服从泊松分布的随机数
samples = np.random.poisson(lam=lambda_value, size=sample_size) #生成满足泊松分布的随机数

# 统计每个事件发生次数的频数
counts = np.bincount(samples)
# 计算每个事件发生次数对应的概率
probabilities = counts / sample_size

# 创建一个表示事件发生次数的数组
event_numbers = np.arange(len(counts))

# 绘制柱状图来展示仿真得到的泊松分布
plt.bar(event_numbers, probabilities, width=0.8, color='skyblue', edgecolor='green')

# 设置图表的标题和坐标轴标签
plt.title(f'Poisson Distribution Simulation (λ = {lambda_value})')
plt.xlabel('Number of Events')
plt.ylabel('Probability')

# 显示绘制好的图表
plt.show()

【4】细节说明

代码使用函数np.random.poisson()生成满足泊松分布的随机数,本身未编写泊松分布函数。

【5】总结

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

相关推荐
凋零蓝玫瑰18 小时前
解锁几何:从古希腊到现代生活的奇幻空间密码
线性代数·概率论
golitter.21 小时前
机器学习:朴素贝叶斯分类器
人工智能·机器学习·概率论
@心都2 天前
机器学习数学基础:15.分块矩阵
机器学习·矩阵·概率论
@心都3 天前
机器学习数学基础:19.线性相关与线性无关
线性代数·机器学习·概率论
西猫雷婶3 天前
神经网络|(八)概率论基础知识-二项分布及python仿真
概率论
婷小主的保镖的学习日记3 天前
一篇关于高等数理统计结合机器学习论文的撰写(如何撰写?)
人工智能·机器学习·概率论
Chatopera 研发团队5 天前
机器学习之数学基础:线性代数、微积分、概率论 | PyTorch 深度学习实战
深度学习·线性代数·机器学习·概率论·微积分
永远的麦田6 天前
贝叶斯-概率
算法·机器学习·概率论
SUNX-T7 天前
【机器学习理论】朴素贝叶斯网络
人工智能·机器学习·概率论