首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >用lmfit库拟合python中的多峰曲线

用lmfit库拟合python中的多峰曲线
EN

Stack Overflow用户
提问于 2021-05-19 21:56:34
回答 1查看 1.1K关注 0票数 0

我有一个数据文件,其中第一列是x-值,第二列是y-值,第三列是y-错误。我想要符合这些数据。我正在学习这里的例子,我的代码是-

代码语言:javascript
运行
AI代码解释
复制
import matplotlib.pyplot as plt
import numpy as np

from lmfit.models import ExponentialModel, GaussianModel


file='sample-data.txt'
dat = np.loadtxt(file)
x = dat[:, 0]
y = dat[:, 1]



exp_mod = ExponentialModel(prefix='exp_')
pars = exp_mod.guess(y, x=x)

gauss1 = GaussianModel(prefix='g1_')
pars.update(gauss1.make_params())

pars['g1_center'].set(value=105000, min=75000, max=125000)
pars['g1_sigma'].set(value=150000, min=30000)
pars['g1_amplitude'].set(value=2000000, min=100000)

gauss2 = GaussianModel(prefix='g2_')
pars.update(gauss2.make_params())

pars['g2_center'].set(value=155000, min=125000, max=175000)
pars['g2_sigma'].set(value=150000, min=30000)
pars['g2_amplitude'].set(value=2000000, min=100000)

mod = gauss1 + gauss2 + exp_mod

init = mod.eval(pars, x=x)
out = mod.fit(y, pars, x=x)

print(out.fit_report(min_correl=0.5))

fig, axes = plt.subplots(1, 2, figsize=(12.8, 4.8))
axes[0].plot(x, y, 'b')
axes[0].plot(x, init, 'k--', label='initial fit')
axes[0].plot(x, out.best_fit, 'r-', label='best fit')
axes[0].legend(loc='best')

comps = out.eval_components(x=x)
axes[1].plot(x, y, 'b')
axes[1].plot(x, comps['g1_'], 'g--', label='Gaussian component 1')
axes[1].plot(x, comps['g2_'], 'm--', label='Gaussian component 2')
axes[1].plot(x, comps['exp_'], 'k--', label='Exponential component')
axes[1].legend(loc='best')

plt.show()

这段代码给了我下面的情节(不合适)-

我期待着这样的事情-

  1. 有人能帮我把情节中的数据拟合一下吗?
  2. 示例值中,手动定义中心、西格玛和振幅的最小、最大值。有任何方法从数据文件中获取/计算这些值吗?

更新

我试着在评论中使用@mikuszefski建议的峰形。但是,正如图像显示的那样,它也能捕捉到所有的小峰值(噪声)。

是否有办法只为较大的山峰选择价值?

EN

回答 1

Stack Overflow用户

发布于 2021-05-20 09:14:40

你真的必须(“必须”、“被要求”、“在任何情况下绝对”)为所有参数提供合理、有限和合理的初始值。

当你说

代码语言:javascript
运行
AI代码解释
复制
pars['g1_center'].set(value=105000, min=75000, max=125000)
pars['g1_sigma'].set(value=150000, min=30000)
pars['g1_amplitude'].set(value=2000000, min=100000)

gauss2 = GaussianModel(prefix='g2_')
pars.update(gauss2.make_params())

pars['g2_center'].set(value=155000, min=125000, max=175000)
pars['g2_sigma'].set(value=150000, min=30000)
pars['g2_amplitude'].set(value=2000000, min=100000)

你(字面意思是“字面意思”)告诉程序,高斯#1应该以中心值105000开始,在任何情况下都不能超过75000,125000。

您提供的数据和图表显示,您感兴趣的两个峰值发生在大约1.4和1.5的x值上。

所以,中心的值在1左右,你告诉它,这个值在10^5左右,不能低于75,000。在这些限制下,这是最合适的做法。该程序工作正常,没有错误或问题,而且您完全得到了您所要求的。

同样,对于非线性最小二乘问题和曲线拟合,初值总是问题.在任何情况下,它们都是无关紧要的。

也就是说,正如mikuszefski所建议的那样,使用峰值查找算法是一个很好的选择。

旁白:边界应该主要用于约束逻辑/物理。例如,可以合理地说振幅应该是正的。一般的高斯人(或者你的数据)没有内在的要求,要求74999的质心值是荒谬的。所以,不要从这样的界限开始。无限制地开始,尽可能简单地开始。只有在需要时才增加这样的复杂性。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67614706

复制
相关文章
使用scrapy抓取股票代码
源码地址:https://github.com/geeeeeeeek/scrapy_stock
西门吹雪1997
2023/07/12
2180
使用scrapy抓取股票代码
源码地址:https://github.com/geeeeeeeek/scrapy_stock
西门吹雪1997
2019/02/26
9460
使用scrapy抓取股票代码
如何使用Scrapy框架抓取电影数据
随着互联网的普及和电影市场的繁荣,越来越多的人开始关注电影排行榜和评分,了解电影的排行榜和评分可以帮助我们更好地了解观众的喜好和市场趋势.豆瓣电影是一个广受欢迎的电影评分和评论网站,它提供了丰富的电影信息和用户评价。因此,爬取豆瓣电影排行榜的数据对于电影从业者和电影爱好者来说都具有重要意义。
小白学大数据
2023/09/25
3540
动态内容抓取指南:使用Scrapy-Selenium和代理实现滚动抓取
在网络数据抓取的过程中,有时需要处理那些通过JavaScript动态加载的内容。本文将介绍如何使用Scrapy-Selenium库来实现在网页中多次滚动并抓取数据,以满足对动态内容的抓取需求。
jackcode
2023/08/16
1.2K1
动态内容抓取指南:使用Scrapy-Selenium和代理实现滚动抓取
jmeter ---同一个参数、返回多个重复的值、怎么取唯一值。
( account_id的值会一直变化、有时可能多个值不一样、如何取用用于第二个接口)
用户10183171
2022/11/11
2.6K0
Scrapy全站抓取-个人博客
想像一下,首先我们需要解析一个网站的首页, 解析出其所有的资源链接(ajax方式或绑定dom事件实现跳转忽略),请求该页面所有的资源链接, 再在资源链接下递归地查找子页的资源链接,最后在我们需要的资源详情页结构化数据并持久化在文件中。这里只是简单的介绍一下全站抓取的大致思路,事实上,其细节的实现,流程的控制是很复杂的。
py3study
2020/11/09
1.2K0
Scrapy源码剖析(四)Scrapy如何完成抓取任务?
上一篇文章:Scrapy源码剖析(三)Scrapy有哪些核心组件?我们已经分析了 Scrapy 核心组件的主要职责,以及它们在初始化时都完成了哪些工作。
_Kaito
2021/03/23
1.2K0
Scrapy源码剖析(四)Scrapy如何完成抓取任务?
scrapy抓取下载360图片
假设我们要做一个有关美食的网站,需要从360图片库采集一批美食图片,不仅是采集图片的链接,而是将图片下载到本地,引用第三方图片链接总是不可靠的,哪天设置了防盗链,又得重新忙活,还是要放在自己的图床才踏实
章鱼喵
2019/07/22
9600
scrapy抓取下载360图片
scrapy顺序执行多个爬虫
# -*- coding:utf-8 -*- from scrapy import cmdline from scrapy.cmdline import execute import sys,time,os #会全部执行爬虫程序 os.system('scrapy crawl ccdi') os.system('scrapy crawl ccxi') #----------------------------------------------------- #只会执行第一个 cmdline.exe
周小董
2019/03/25
1K0
用Python抓取在Github上的组织名称
我想在我的个人网站上展现我在Github上提交代码的组织名称,并且不用我手动更新提交记录的变化。Github提供了读取数据的API,但是,不能体现出我想一些开发组织提交的代码。这就是我之所以要爬取那些信息的原因。本文的代码仓库:https://github.com/DahlitzFlorian
老齐
2020/05/15
1.7K0
用Python抓取在Github上的组织名称
爬虫进阶:Scrapy抓取科技平台Zealer
  这次的目标网站也是本人一直以来有在关注的科技平台:Zealer,爬取的信息包括全部的科技资讯以及相应的评论。默认配置下运行,大概跑了半个多小时,最终抓取了5000+的资讯以及10几万的评论。
happyJared
2018/09/20
8270
爬虫进阶:Scrapy抓取科技平台Zealer
在同一个系统里使用多个版本的软件
如果你有几房姨太太的话,那么想让她们和平共处,多半是痴人说梦。对程序员而言,虽然他们不会有娶几个老婆的好运气,但是很可能会遇到在同一个系统里使用多个版本的软件的情况,一旦处理不好,同样会焦头烂额。
LA0WAN9
2021/12/14
1.2K0
Scrapy递归抓取简书用户信息
好久没有录制实战教程视频,大邓就在圣诞节后直接上干货。 之前写过一期【视频教程-用python批量抓取简书用户信息】的文章,是自己造的轮子,今天我趁着刚入门scrapy和xpath,操刀重写这个任务。 一、实战项目简介递归 我们要大批量获取简书网站上的用户数据,最直接的办法是给一个初识的用户url,从这个用户的关注的和粉丝中再抽取url,循环往复,周而复始。这其实就是递归。 数据项 获取到的url,我们需要对其进行请求,解析出想要的数据 昵称-nickname 关注数-followed 粉丝数- fol
企鹅号小编
2018/01/26
1.4K0
scrapy爬虫抓取并下载文件
scrapy 内部提供了专门用于下载文件的 FilesPipeline , 我们可以将其视为特殊的下载器,只需要将要下载的文件 url 传递过去,下载器就会自动将文件下载到本地
章鱼喵
2019/07/22
4.1K0
scrapy爬虫抓取并下载文件
爬虫进阶:Scrapy抓取慕课网
  完整的爬虫流程大致是这样的:分析页面结构 -> 确定提取信息 -> 设计相应表结构 -> 编写爬虫脚本 -> 数据保存入库;入库可以选择mongo这样的文档数据库,也可以选择mysql这样的关系型数据库。废话不多讲,这里暂且跳过页面分析,现给出如下两张数据表设计:
happyJared
2018/10/10
1.9K0
爬虫进阶:Scrapy抓取慕课网
使用Debookee抓取同一网络中中任何设备的报文
使用文档见:https://docs.debookee.com/en/latest/
zx钟
2022/12/02
1.3K0
使用Debookee抓取同一网络中中任何设备的报文
Scrapy:多个spider时指定pipeline
导读 Scrapy存在多个爬虫的时候如何指定对应的管道呢? 1、在 pipeline 里判断爬虫 settings.py ITEM_PIPELINES = { "xxxx.pipelines.MyPipeline": 300, } OneSpider.py class OneSpider(scrapy.spiders.Spider): name = "one" TwoSpider.py class TwoSpider(scrapy.spiders.Spider): name = "t
新码农
2020/04/17
2.2K0
Scrapy:多个spider时指定pipeline
Scrapy:多个item时指定pipeline
有时,为了数据的干净清爽,我们可以定义多个item,不同的item存储不同的数据,避免数据污染。但是在pipeline对item进行操作的时候就要加上判断。
新码农
2020/04/17
2.7K0
Scrapy:多个item时指定pipeline
Scrapy:多个爬虫同时运行
在spiders目录的同级目录下创建一个commands目录,并在该目录中创建一个crawlall.py,将scrapy源代码里的commands文件夹里的crawl.py源码复制过来,只修改run()方法即可。(文件夹下面必须要有__init__文件)
新码农
2020/12/29
1.5K0
scrapy如何顺序执行多个爬虫
scrapy如何单线程顺序执行多个爬虫,刚开始我天真的以为将多个excute顺序罗列就能依次执行每个爬虫了,代码如下所示: 谁料,在执行完第一个爬虫之后,整个程序就停止运行了。到底是什么原因呢?笔者在 Stack Overflow 上找到了类似的问题( https://stackoverflow.com/questions/24875280/scrapy-cmdline-execute-stops-script )。得知问题的原因在于 方法中的最后一句代码是 ,所以当程序执行完一个execute语
企鹅号小编
2018/01/29
2.2K0
scrapy如何顺序执行多个爬虫

相似问题

无法访问Google Cloud上的Kubernetes仪表板

41

Kubernetes:无法访问kubernetes仪表板

10

无法访问Kubernetes仪表板

34

无法访问Kubernetes仪表板

10

istio无法访问kubernetes仪表板

210
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文