在 Python 中将泊松分布拟合到不同的数据集

news2024/9/24 23:31:02

文章目录

    • 在 Python 中将泊松分布拟合到不同的数据集
    • 在 Python 中拟合泊松分布的分箱最小二乘法
      • 程序的导入函数
      • 为泊松分布创建一个虚拟数据集并使用该数据集绘制直方图
      • 使用曲线拟合将曲线拟合到直方图
    • 使用负二项式拟合过度分散的数据集上的泊松分布
      • 创建数据集
      • 使用数据集绘制直方图
      • 将泊松分布曲线拟合到直方图
    • 使用负二项分布的高度分散数据的泊松分布
    • 总结


泊松概率分布显示了事件在固定周期或空间内发生的几率。 可以使用 Python 将此数据绘制为直方图,以观察事件的发生率。

分布是可以绘制在直方图或其他结构上以找到数据集的最佳拟合曲线的曲线。 本文将教您如何使用 Python 在数据集上拟合泊松分布。


在 Python 中将泊松分布拟合到不同的数据集

让我们了解如何使用 SciPy 和 Python 在一组数据上绘制多个分布并拟合泊松分布。


在 Python 中拟合泊松分布的分箱最小二乘法

在此示例中,创建了一个虚拟泊松数据集,并使用该数据绘制了一个直方图。 绘制直方图后,分箱最小二乘法在直方图上拟合一条曲线以拟合泊松分布。

程序的导入函数

该程序使用以下导入函数。

  1. Matplotlib 的数学分支——Numpy。
  2. 用于绘制图表的 Matplotlib 子库 Pyplot。
  3. SciPy curve_fit 用于导入曲线拟合。
  4. 数据集的泊松。

为泊松分布创建一个虚拟数据集并使用该数据集绘制直方图

通过使用函数 np.random.poisson() ,使用 4-20,000 范围内的泊松偏差数创建变量 dataset_size。 它返回一个具有随机泊松值的数组。

data_set = np.random.poisson(4, 2000)

直方图数据的差异存储在新变量 bin 中。 它使用 np.arrange() 函数返回一个数组,其值介于 -0.5 到 20 之间,平均差为 0.5。

bins = np.arange(20) - 0.5

使用 plt.hist() 函数绘制直方图,其中参数为:

  1. data_set 用于所使用的数据。
  2. 差异的垃圾箱。
  3. 密度,设置为真。
  4. label,它向绘图添加标签。

在绘制直方图时,从 plt.hist() 函数返回三个值,这些值存储在三个新变量中 - 直方图 bin 值的条目、bin 边缘的 bin_edges 和直方图的各个补丁的补丁。

entries, bin_edges, patches = plt.hist(data_set, bins=bins, density=True, label='Data')

使用曲线拟合将曲线拟合到直方图

绘制直方图后,曲线拟合函数用于将泊松分布拟合到数据。 曲线函数绘制分散数据集中的最佳拟合线。

曲线拟合需要一个拟合函数,该函数将值数组转换为泊松分布,并将其作为参数返回,以在其上绘制曲线。 方法 fit_function 是用两个参数 k 和 parameters 创建的。

SciPy 库 poisson.pmf 用于获取参数。 pmf 代表概率质量函数,该函数返回随机分布的频率。

变量 k 存储事件发生的次数,变量 lamb 是用作曲线函数的拟合参数的 popt(减少平方和)。

SciPy curve_fit 函数接受三个参数,fit_function、middle_bins 和 entries,并返回两个值 - parameters(减少残差平方和的最佳值)和 cov_matrix(参数估计的协方差)。

parameters, cov_matrix = curve_fit(fit_function, middles_bins, entries)

创建一个包含 15 个递增值的数据集来绘制曲线,并使用 fit_function 方法拟合这些递增值的泊松分布。 提供了绘图的属性,并显示了结果。

x_plot = np.arange(0, 15)

plt.plot(
    x_plot,
    fit_function(x_plot, *parameters),
    marker='D', linestyle='-',
    color='red',
    label='Fit result',
)

完整代码:

import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit
from scipy.stats import poisson

# get random numbers that are poisson deviated
data_set = np.random.poisson(4, 2000)

# the bins have to be kept as a positive integer because poisson is a positive integer distribution
bins = np.arange(20) - 0.5
entries, bin_edges, patches = plt.hist(data_set, bins=bins, density=True, label='Data')

# calculate bin centers
middles_bins = (bin_edges[1:] + bin_edges[:-1]) * 0.5


def fit_function(k, lamb):
    # The parameter lamb will be used as the fit parameter
    return poisson.pmf(k, lamb)


# fit with curve_fit
parameters, cov_matrix = curve_fit(fit_function, middles_bins, entries)

# plot poisson-deviation with fitted parameter
x_plot = np.arange(0, 15)

plt.plot(
    x_plot,
    fit_function(x_plot, *parameters),
    marker='D', linestyle='-',
    color='red',
    label='Fit result',
)
plt.legend()
plt.show()

输出:

使用曲线拟合将曲线拟合到直方图


使用负二项式拟合过度分散的数据集上的泊松分布

在这个例子中,泊松分布数据框是用高度分散的数据创建的,我们将学习如何使泊松分布适合这个数据。

与上一个示例不同,泊松分布以其均值为中心,此数据高度分散,因此下一节将向此数据添加负二项式以改进泊松分布。

创建数据集

在此示例中,创建了一个 Pandas 数据框并将其存储在变量数据集中。 该数据集只有一列,出现次数为 2000 泊松值,lambda 值设置为 200。

dataset = pd.DataFrame({'Occurrence': np.random.poisson(200, 2000)})

使用数据集绘制直方图

要绘制直方图,我们需要提供三个值,bin 的间隔(值桶)、bin 的起点和 bin 的终点。 这是通过以下方式完成的:

width_of_bin = 15
xstart = 150
xend = 280
bins = np.arange(xstart, xend, width_of_bin)

设置 bins 的值后,绘制直方图。

hist = sns.histplot(data=dataset["Occurrence"], kde=True, bins=bins)

将泊松分布曲线拟合到直方图

通过绘制分布曲线,需要数据集的均值和大小来拟合泊松分布。 在两个新变量 mu 和 n 中,分别存储了数据集的均值和大小。

绘制泊松分布曲线的算法是:

bins + width_of_bin / 2, n * (poisson.cdf(bins + width_of_bin, mu) - poisson.cdf(bins, mu))

最后,曲线绘制在直方图上。

完整代码:

import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from scipy.stats import poisson

dataset = pd.DataFrame({'Occurrence': np.random.poisson(200, 2000)})

width_of_bin = 15
xstart = 150
xend = 280
bins = np.arange(xstart, xend, width_of_bin)

hist = sns.histplot(data=dataset["Occurrence"], kde=True, bins=bins)
mu = dataset["Occurrence"].mean()
n = len(dataset)
plt.plot(bins + width_of_bin / 2, n * (poisson.cdf(bins + width_of_bin, mu) - poisson.cdf(bins, mu)), color='red')
plt.show()

输出:

将泊松分布曲线拟合到直方图


使用负二项分布的高度分散数据的泊松分布

如前所述,此数据集中的数据过于分散,这就是曲线与泊松分布曲线不完全相似的原因。 下面的示例中使用了负二项式来拟合泊松分布。

数据集是通过注入负二项式创建的:

dataset = pd.DataFrame({'Occurrence': nbinom.rvs(n=1, p=0.004, size=2000)})

直方图的 bin 从 0 开始,到 2000 结束,公共间隔为 100。

binwidth = 100
xstart = 0
xend = 2000
bins = np.arange(xstart, xend, binwidth)

创建 bin 和数据集后,绘制直方图:

hist = sns.histplot(data=dataset["Occurrence"], kde=True, bins=bins)

该曲线需要五个参数,方差(Var),均值(mu),p(均值/方差),r(考虑的项目)和n(数据集中的总项目)

方差和均值在两个变量中计算,方差和 mu。

Var = dataset["Occurrence"].var()
mu = dataset["Occurrence"].mean()

以下公式用于找出 p 和 r:

p = (mu / Var)
r = mu ** 2 / (Var - mu)

通过将数据集的长度保存在新变量 n 中来存储项目总数。

n = len(dataset)

最后,曲线绘制在直方图上。

plt.plot(bins + binwidth / 2, n * (nbinom.cdf(bins + binwidth, r, p) - nbinom.cdf(bins, r, p)))

完整代码:

import numpy as np
from scipy.stats import nbinom
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

dataset = pd.DataFrame({'Occurrence': nbinom.rvs(n=1, p=0.004, size=2000)})

binwidth = 100
xstart = 0
xend = 2000
bins = np.arange(xstart, xend, binwidth)

hist = sns.histplot(data=dataset["Occurrence"], kde=True, bins=bins)

Var = dataset["Occurrence"].var()
mu = dataset["Occurrence"].mean()
p = (mu / Var)
r = mu ** 2 / (Var - mu)
n = len(dataset)

plt.plot(bins + binwidth / 2,
         n * (nbinom.cdf(bins + binwidth, r, p) - nbinom.cdf(bins, r, p)),
         color='red')
plt.show()

输出:

使用负二项分布的高度分散数据的泊松分布


总结

本文介绍了在 Python 中将泊松分布拟合到数据集的三种方法。 阅读本文后,读者可以在虚拟泊松数据集和过度分散的数据集上拟合泊松分布。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/505214.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JAVA算法(一)查找算法

一、基本查找 / 顺序查找 核心&#xff1a;从0索引开始挨个往后查找 private static boolean basicSearch(int[] arr, int number) {for (int i 0; i < arr.length; i) {if (arr[i] number) {return true;}}return false;}二、二分查找 / 折半查找 前提&#xff1a;数组…

(四) 打造更加智能的即时通信系统——实现主界面消息和联系人切换效果

文章目录 一、引言二、界面设计的基本要求2.1 界面美观简洁2.2 功能合理布局 三、界面布局和控件设计四、效果展示五、关键代码六、个人经验分享6.1 即时通信系统开发中的经验和总结6.2 遇到的问题和解决方案6.3优化即时通信系统 七、总结 一、引言 当今社会&#xff0c;人们对…

解决 scalac: bad option: ‘-make:transitive‘

scalac: bad option: ‘-make:transitive’ 打开项目所在位置并进入 .idea 修改scala_compiler.xml文件 删除掉参数行包含-make:transitive 保存后 重新运行代码

Linux驱动开发笔记(二):ubuntu系统从源码编译安装gcc7.3.0编译器

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/130533941 红胖子网络科技博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬…

uniapp云打包

1. 生成本地打包资源 2. 下载Android Studio和App离线SDK 导航路径&#xff1a;https://nativesupport.dcloud.net.cn/AppDocs/usesdk/android 下载的Android 离线SDK与本地开发工具版本对应 3. 解压得到的目录如下 4. 使用Android Studio打开Android 离线SDK解压目录里面这个…

计算机毕业论文选题推荐|软件工程|系列一

文章目录 导文题目导文 计算机毕业论文选题推荐|软件工程 (***语言)==使用其他任何编程语言 例如:基于(***语言)门窗账务管理系统的设计与实现 得到:基于JAVA门窗账务管理系统的设计与实现 基于vue门窗账务管理系统的设计与实现 等等 题目 基于(***语言)的研发部署管理…

全方位揭秘!大数据从0到1的完美落地之MapReduce实战案例(1)

案例一: MR实战之小文件合并(自定义inputFormat) 项目准备 需求 无论hdfs还是MapReduce&#xff0c;对于小文件都有损效率&#xff0c;实践中&#xff0c;又难免面临处理大量小文件的场景&#xff0c;此时&#xff0c;就需要有相应解决方案 测试数据 分析 小文件的优化无…

ClickHouse:联接执行的内部机制

在之前的文章中&#xff0c;我们回顾了 ClickHouse 中可用的 SQL JOIN 类型。提醒一下&#xff1a;ClickHouse 附带完整的 SQL 连接支持。 在本文中&#xff0c;我们将探索 ClickHouse 中联接执行的内部结构&#xff0c;以便您可以优化应用程序使用的查询的联接。在这里&#…

数据集进行拆分到底什么样数据算是数据标签什么样的数据算数据样本

点击上方“Python爬虫与数据挖掘”&#xff0c;进行关注 回复“书籍”即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 忽闻海上有仙山&#xff0c;山在虚无缥缈间。 大家好&#xff0c;我是皮皮。 一、前言 前几天在Python白银群【kim】问了一个Python机器学习的问题&…

【AI大模型】SparkDesk讯飞星火认知大模型初体验-国内最强ChatGPT

文章目录 前言SparkDesk讯飞星火认知大模型简介语言理解知识问答逻辑推理数学题解答代码理解与编写亲自体验写在最后 前言 5月6日&#xff0c;讯飞星火认知大模型成果发布会在安徽合肥举行。科大讯飞董事长刘庆峰、研究院院长刘聪发布讯飞星火认知大模型&#xff0c;现场实测大…

5. 类和对象

一、面向对象程序设计的基本特点 1.1 抽象 指对具体问题&#xff08;对象&#xff09;进行概括&#xff0c;抽出一类对象的公共性质并加以描述的过程 数据抽象 描述某类对象的属性或状态&#xff0c;即此类对象与其他类对象的区别 行为抽象 描述某类对象的共同行为或功能特征…

计算机毕业论文内容参考|基于神经网络的网络安全态势感知技术研究

文章目录 导文文章重点摘要前言绪论课题背景国内外现状与趋势课题内容相关技术与方法介绍技术分析技术设计技术实现总结与展望导文 基于神经网络的网络安全态势感知技术研究 文章重点 摘要 随着互联网的快速发展,网络攻击的频率和复杂度也在逐年增加。为了更好地保护信息系统…

Java版本spring cloud 工程管理系统软件 系统源代码 自主研发,工程行业适用

Java版工程项目管理系统 Spring CloudSpring BootMybatisVueElementUI前后端分离 功能清单如下&#xff1a; 首页 工作台&#xff1a;待办工作、消息通知、预警信息&#xff0c;点击可进入相应的列表 项目进度图表&#xff1a;选择&#xff08;总体或单个&#xff09;项目显示…

项目终于用上了 DDD 领域驱动,太强了

在公司对支付业务、结算业务、资金业务使用DDD进行领域建模的两年&#xff0c;得到了许多好评&#xff0c;也面对过不少质疑&#xff0c;总体来说还是能收获不少&#xff0c;这对团队成员理解业务起着很大作用。近半年一直在研究DDD的落地实战&#xff0c;如今已修得阶段性成果…

让ChatGPT来制作Excel表格,ChatGPT实现文本和表格的相互转换

Office 三套件可以说是现代办公族必备的办公工具。其中&#xff0c;Excel 因为内置的计算函数、VBA 宏等高级功能又成为了非专业人士最头疼的 Office 组件。非财务专业人士&#xff0c;估计平常会用的 Excel 函数仅限于 SUM(), AVERAGE() 等&#xff0c;甚至这些都是通过界面点…

【2023 · CANN训练营第一季】应用开发深入讲解——第三章应用调试

学习资源 日志参考文档 应用开发FAQ 日志主要用于记录系统的运行过程及异常信息&#xff0c;帮助快速定位系统运行过程中出现的问题以及开发过程中的程序调试问题。 日志分为如下两大类&#xff1a; 系统类日志&#xff1a;系统运行产生的日志。主要包括&#xff1a; Contro…

shiro CVE-2016-4437 漏洞复现

shiro Apache Shiro是一个强大且易用的Java安全框架,执行身份验证、授权、密码和会话管理。使用Shiro的易于理解的API,您可以快速、轻松地获得任何应用程序,从最小的移动应用程序到最大的网络和企业应用程序漏洞原理 在Apache shiro的框架中&#xff0c;执行身份验证时提供了…

【开发者必读】如何在MyEclipse中使用内联搜索?

MyEclipse v2022.1.0正式版下载 DevStyle中的内联搜索取代了传统的Eclipse查找和替换对话框&#xff0c;提供了一种更加高效和非侵入性的搜索体验——一种不会中断您的开发工作流程的工具。 DevStyle是一个Eclipse插件&#xff0c;也包含在MyEclipse中。 选择内联搜索参数 …

C++编译器对于对象的优化

C编译器对于对象构造的优化 用临时对象生成新对象时&#xff0c; 临时对象就不产生了&#xff0c;直接构造新对象即可 class Test { public:Test(int a 10) :ma(a){cout << "Test(int)" << endl;}~Test(){cout << "~Test()" <<…

node中npm依赖安装顺序,package-lock.json文件详解

前置知识&#xff1a;需要先了解package.json 和package-lock.json的基本知识和使用方法&#xff0c;可以参考这篇文章。 npm依赖安装的逻辑和顺序可以参考这篇文章 理论看完了我们来看一下实际项目中的是啥样的&#xff0c;上面文章所讲的逻辑都会在npm install之后&#xf…