神经网络|(九)概率论基础知识-泊松分布及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()函数进行了泊松分布效果仿真。

相关推荐
西猫雷婶1 天前
scikit-learn/sklearn学习|广义线性回归损失函数的基本表达式
深度学习·神经网络·学习·机器学习·线性回归·scikit-learn·概率论
xz2024102****3 天前
最大似然估计:损失函数的底层数学原理
人工智能·算法·机器学习·概率论
kingmax542120083 天前
概率与数理统计公式及结论汇总
人工智能·机器学习·概率论
西猫雷婶4 天前
神经网络|(十九)概率论基础知识-伽马函数·下
人工智能·深度学习·神经网络·机器学习·回归·scikit-learn·概率论
西猫雷婶7 天前
神经网络|(十八)概率论基础知识-伽马函数溯源-阶乘的积分表达式
人工智能·深度学习·神经网络·机器学习·概率论
西猫雷婶11 天前
神经网络|(十六)概率论基础知识-伽马函数·中
人工智能·深度学习·神经网络·学习·机器学习·概率论
西西弗Sisyphus11 天前
大模型 多轮对话
语言模型·概率论·知识蒸馏
Jooou12 天前
机器学习:贝叶斯派和频率派
机器学习·概率论·贝叶斯派
simon_skywalker15 天前
概率论基础教程第六章 随机变量的联合分布(二)
概率论
simon_skywalker16 天前
概率论基础教程第5章 连续型随机变量(三)
概率论