Python 数学建模——Fitter 拟合数据样本的分布

embedded/2024/9/19 21:33:09/ 标签: 数学建模, python, 概率论

文章目录

    • 介绍
    • 代码实例

介绍

  数学建模中很多时候,我们有某个随机变量 X X X 的若干样本 X 1 , X 2 , ⋯ , X n X_1,X_2,\cdots,X_n X1,X2,,Xn,想要还原随机变量 X X X 的概率密度函数 f ( x ) f(x) f(x)。诚然,高斯核密度估计可以做到这一点,这里我们介绍一个新的 Python 库 Fitter。
  Fitter 的原理是,用指定的某些分布去匹配连续性随机变量 X X X 的观测值,对于每一种分布都拟合出响应的参数、计算出均方误差。一般选择均方误差最小的分布作为拟合结果。核心方法Fitter的函数原型为:

Fitter(data, xmin=None, xmax=None, bins=100, distributions=None, verbose=True, timeout=10)

  其中:

  • data是已知的 X X X 的观测值集合,或者说是样本点,即上面的 X 1 , ⋯ , X n X_1,\cdots,X_n X1,,Xn
  • xmin表示忽略观测值data中小于xmin的数据。
  • xmax表示忽略观测值data中大于xmax的数据。
  • bins是累计直方图的组数(直方图里有几个矩形),值越大拟合曲线越平滑
  • verbose表示是否显示 Fitter 拟合过程中的一些提示信息,设置verbose=False将会使你的控制台更干净。
  • timeout表示对于一种分布尝试的最长时间。因为各种各样的原因,给出的数据data可能不适合用某种分布去拟合,当 Fitter 在这种分布上拟合的时间超过timeout秒时,将会自动放弃拟合这种分布。
  • distributions是一个列表,用来告诉 Fitter你想尝试哪些概率密度函数(比如正态分布, t t t 分布, β \beta β 分布等)。默认情况下会尝试所有的 scipy 分布( 106 106 106 种)。常用分布distributions=['norm', 't', 'laplace', 'cauchy', 'chi2', 'expon', 'exponpow', 'gamma', ' lognorm', 'uniform']。(比如norm是正态分布,t t t t 分布,laplace是拉普拉斯分布,cauchy是柯西分布……)

参考文献:Python fitter包:拟合数据样本的分布_fitter的80多个分布有哪些-CSDN博客

代码实例

from scipy import stats
import numpy as np
import matplotlib.pyplot as plt
from fitter import Fitter# 直接生成 2000 个 beta 分布的样本点
data = np.array(np.random.beta(a=2, b=5, size=2000))# Euclid 字体是 latex 公式使用的字体
plt.rcParams['font.family'] = 'Euclid'# 尝试使用 distributions 里的分布去拟合样本点
f = Fitter(data, distributions=['norm', 't', 'laplace','beta','lognorm'])f.fit()print(f.summary())  # 返回排序好的分布拟合质量(拟合效果从好到坏),并绘制数据分布和Nbest分布
"""sumsquare_error         aic  ...  ks_statistic     ks_pvalue
beta           19.103771  164.735384  ...      0.016081  6.791340e-01
lognorm        22.106143  143.794008  ...      0.026787  1.113541e-01
t              30.674133  248.908752  ...      0.060242  9.434693e-07
norm           30.674533  246.915057  ...      0.060244  9.426322e-07
laplace        52.044523  184.287028  ...      0.068199  1.562740e-08
可以看到用 beta 分布去拟合,均方误差最小。
"""print(f.df_errors)  # 返回这些分布的拟合质量(均方根误差的和)
"""
sumsquare_error         aic  ...  ks_statistic     ks_pvalue
norm           30.674533  246.915057  ...      0.060244  9.426322e-07
laplace        52.044523  184.287028  ...      0.068199  1.562740e-08
beta           19.103771  164.735384  ...      0.016081  6.791340e-01
lognorm        22.106143  143.794008  ...      0.026787  1.113541e-01
t              30.674133  248.908752  ...      0.060242  9.434693e-07
"""print(f.fitted_param)  # 返回拟合分布的参数
"""
{'norm': (0.2796987317013659, 0.15616306964918625), 
'laplace': (0.26198195036801175, 0.12567921087793762), 
'beta': (1.9506594116888034, 4.9951825006926605, 0.0024740416891275907, 0.9862799904927366), 
'lognorm': (0.31353430150353023, -0.21970151525943354, 0.47572327635046574), 
't': (850256.2207528697, 0.2796983453401272, 0.15616418590110978)}
"""print(f.fitted_pdf)  # 使用最适合数据分布的分布参数生成的概率密度
"""
结果是返回从分布到 array 的字典。array 是一系列概率密度函数的取值,用来作概率密度曲线。
"""print(f.get_best(method='sumsquare_error'))  # 返回最佳拟合分布及其参数
"""
{'beta': {'a': 1.9506594116888034, 'b': 4.9951825006926605, 'loc': 0.0024740416891275907, 'scale': 0.9862799904927366}
}
"""f.hist()  # 绘制组数=bins的标准化直方图
# 下面这个方法绘制分布的概率密度函数,按照方差从小到大取前 Nbest 个。
# 因为前面的 f.summary() 也会画图,所以就不启用这个方法。
# 顺带一提,前面的  f.summary() 也可以设置 Nbest 参数。
# f.plot_pdf(names=None, Nbest=3, lw=2)
plt.show()

  画出来的图如下所示, β \beta β 分布是均方误差最小的分布,可以认为是最合适的分布。(因为数据就是按照 β \beta β 分布生成的,所以这个结果很合理。)同时,对数正态分布也比较合适, t t t 分布次之。

注意

  • Fitter方法的distributions参数决定了需要拟合哪些分布,默认拟合里面所有的 106 106 106 种分布。默认情况下会跑比较长的时间,而且往往给出最佳的分布是一个你从来没见过的分布。不建议使用默认情况
  • f.summary()默认参数Nbest=5,给出 5 5 5 个最好拟合的结果。如果想要所有分布的结果,请设置Nbest=len(f.distributions),即将f.summary()改为f.summary(Nbest=len(f.distributions))

http://www.ppmy.cn/embedded/113935.html

相关文章

solidity-19-fallback

接收ETH receive和fallback receive和callback是solidity中两个特殊的回调函数,一个处理接收ETH,一个处理不存在的函数调用。本质上就是吧fallback拆成了两个回调函数。我暂时不知道什么是fallback fallback调用不存在的函数时会被调用也就是这个函数是不是等价于…

Python基础(八)——MySql数据库

一.数据库 【库——>表——>数据】 借助数据库对数据进行组织存储,借助SQL语言对数据库、数据进行操作管理 Mysql数据库 下载:https://www.mysql.com/ 查看是否安装配置成功: 安装DBeaver用于Mysql数据库图形化 安装:…

MySQL——数据库的高级操作(一)数据备份与还原(1)数据的备份

在操作数据库时,难免会发生一些意外造成数据丢失。例如,突然停电、管理员的操作失误都可能导致数据的丢失。为了确保数据的安全,需要定期对数据库进行备份,这样,当遇到数据库中数据丢失或者出错的情况,就可…

Keil MDK5学习记录

2024.9.19 1. no browse information available in ‘xxx’的问题 成功解决Keil MDK5中no browse information available in ‘xxx’的问题-CSDN博客https://blog.csdn.net/bean_business/article/details/1091894452. .c文件中显示函数列表 如何在Keil5里.c文件中显示函数列表…

LeeCode打卡第二十九天

LeeCode打卡第二十九天 第一题:岛屿数量(LeeCode第200题): 给你一个由 1(陆地)和 0(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只…

Tcp三次握手四次挥手和SSL/TLS

1.Tcp三次握手四次挥手: 1.1基本概念: TCP(三次握手和四次挥手)是用于建立和终止可靠传输连接的过程。TCP协议是一种面向连接的传输层协议,确保数据在网络上可靠、有序地传输。下面详细解释三次握手和四次挥手的工作机…

浸没边界法精度相关的论文的阅读笔记

Convergence proof of the velocity field for a stokes flow immersed boundary method https://doi.org/10.1002/cpa.20233 研究对象的选取 他这里为什么能够选取一个周期性边界的流场啊?为什么不是狄利克雷边界或者诺伊曼边界? 方形流场的边界值 …

高级算法设计与分析 学习笔记6 B树

B树定义 一个块里面存了1000个数和1001个指针,指针指向的那个块里面的数据大小介于指针旁边的两个数之间 标准定义: B树上的操作 查找B树 创建B树 分割节点 都是选择正中间的那个,以免一直分裂。 插入数字 在插入的路上就会检查节点需不需要…

Testbench编写与Vivado Simulator的基本操作

Testbench编写与Vivado Simulator的基本操作 Testbench编写 Testbench 是一种用Verilog或者systemVerilog语言编写的程序或模块,编写testbench的主要目的是为了对使用硬件描述语言(HDL)设计的电路UUT(unit under test)进行仿真验证&#xf…

一招教你解决excel表格打印预览时候表格线条显示不全的问题

1、如图,我们在制作好excel表格后再需要打印时候,点击打印预览会出现以下情况: 最下边的表格线条显示不全,这样即使打印出来或者导出为pdf,文件中依然显示不全,这时候我们只需要在excel表格中轻轻设置一下就…

CleanMyMac X 4.15.6正式版 mac直装破解版

你知道 CleanMyMac是什么吗?它的字面意思为“清理我的Mac”,作为软件,那就是一款 Mac清理工具 ,Mac OS X 系统下知名系统清理软件,是数以万计的Mac用户的选择。它可以流畅地与系统性能相结合,只需…

JVM 运行时数据区域

目录 前言 程序计数器 java虚拟机栈 本地方法栈 java堆 方法区 运行时常量池 前言 首先, java程序在被加载在内存中运行的时候, 会把他自己管理的内存划分为若干个不同的数据区域, 就比如你是一个你是一个快递员, 一堆快递过来需要你分拣, 这个时候, 你就需要根据投放的目…

三、(JS)JS中常见的表单事件

一、onfocus、onblur事件 这个很容易理解&#xff0c;就不解释啦。 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"&…

关于 Goroutines 和并发控制的 Golang 难题

下面是一道关于 Goroutines 和并发控制的 Golang 难题&#xff0c;它涉及到 Go 的并发编程模型、Goroutines、通道&#xff08;Channels&#xff09;以及 sync.WaitGroup 的使用&#xff1a; 问题描述&#xff1a; 你有一个需要并发执行的任务&#xff0c;其中有 100 个 URL …

基于Spring Boot的学生社区故障维修预约系统的设计与实现(开题报告)

毕业论文(设计)开题报告 基于Spring Boot的学生社区故障维修预约系统设计与实现 姓 名 学 院 数学与数据科学学院 专业班级 信息与计算科学202 学 号 202021314223 校内指导教师 职称/职务 副教授 校外指导教师 职称/职务 技术经理 起始时间 2023年9月 教务部制 一、开…

【LLM多模态】文生视频评测基准VBench

note VBench的16个维度自动化评估指标代码实践&#xff08;待完成&#xff09;16个维度的prompt举例人类偏好标注&#xff1a;计算VBench评估结果与人类偏好之间的相关性、用于DPO微调 文章目录 note一、相关背景二、VBench评测基准概述&#xff1a;论文如何解决这个问题&…

Go语言现代web开发13 方法和接口

方法 As you probably noticed, there are no classes in the Go programming language. But we can mimic this by declaring functions on types. The type which declares functions is called the receiver argument and the function declared on the type is called the…

JS基础之【对象详解 -- 对象的属性与方法、遍历对象与内置对象】

&#x1f680; 个人简介&#xff1a;某大型国企高级前端开发工程师&#xff0c;7年研发经验&#xff0c;信息系统项目管理师、CSDN优质创作者、阿里云专家博主&#xff0c;华为云云享专家&#xff0c;分享前端后端相关技术与工作常见问题~ &#x1f49f; 作 者&#xff1a;码…

WPF 的TreeView的TreeViewItem下动态生成TreeViewItem

树形结构仅部分需要动态生成TreeViewItem的可以参考本文。 xaml页面 <TreeView MinWidth"220" ><TreeViewItem Header"功能列表" ItemsSource"{Binding Functions}"><TreeViewItem.ItemTemplate><HierarchicalDataTempla…

【设计模式】UML类图和六大设计原则

前言 在实践中经常看到工厂模式、观察者模式等字眼&#xff0c;渐觉设计模式的重要性&#xff0c;于是开刷设计模式。 本文讲述了UML类图以及设计模式的六大原则 参考资料&#xff1a; 课程视频&#xff1a;黑马程序员Java设计模式 一、UML类图 1. 类和接口的表示方式 如…