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

相关推荐
for_ever_love__20 小时前
概率与统计——分布、期望与贝叶斯,语言模型的建模基础
python·机器学习·大模型·概率论
lisw052 天前
概率论:事件之间的关系与运算!
数据分析·概率论
lisw053 天前
论数学期望与概率的关系及其应用!
概率论
Ruannn(努力版)4 天前
statistics
概率论
FPGA信号处理8 天前
《随机信号分析与处理》第1章 随机变量基础:习题解答
人工智能·机器学习·概率论
金色光环9 天前
概率论笔记:连续型随机变量函数的分布与尺度变换 连续型随机变量函数的分布:定义法与公式法推导
笔记·概率论
tigershang18 天前
从工具到结构:工科数学的升阶之路
神经网络·机器学习·概率论
computersciencer23 天前
事件的六种关系之包含关系
程序人生·数学建模·数据分析·概率论
红烧code1 个月前
统计学中的六大估计方法:从最大似然到核密度估计的本质理解
数学建模·概率论
啥都想学点的研究生1 个月前
一篇文章讲清楚:朴素贝叶斯
人工智能·机器学习·概率论