- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我对编程工具和Python都很陌生,对数值计算知之甚少。我试图理解 Curve_fit 的源代码,但这对我来说太难了。
如果我们直接对非线性模型进行曲线拟合,通过计算 Hessian 矩阵,我想我们能够找到所有参数的临界点,无论局部或全局、最小值或最大值。
但是,如果包含模型的函数无法微分,那么 curve_fit 实际上如何计算答案?
我想象该算法正在寻找所有数据点的每个参数的每个区间中 Chi^2 的局部最小值。如果这样做,默认间隔有多大,每次参数试验之间的距离是多少,最大迭代是多少?如果像我说的那样,那么这个迭代在多个参数之间是如何工作的呢?他们每次都是作为一组单独尝试吗?
我想了解该算法,以便我可以编写一个好的函数来应用 curve_fit。我试图适应的函数中存在许多脏修复,不同的小更改中出现不同的错误,因此我无法将代码放在这里,因为我不知道问题所在。
另外,关于 sigma 输入,如果我没有 y 错误的线索,如果默认 sigma 与数据值相比太大,结果会怎样?或者,如果模型的灵 active 对后处理影响不大,或者 sigma 远小于数据到函数的距离,会发生什么?
最佳答案
要开始了解 scipy curve_fit
如何尝试解决问题,请先阅读非线性优化方法,例如 Levenberg-Marquardt (LM) 方法(请参阅 https://en.wikipedia.org/wiki/Levenberg%E2%80%93Marquardt_algorithm )。这是未指定参数值界限时 curve_fit
使用的方法,它将给出您寻求的大部分答案。
此方法(以及 scipy.optimize 中的其他求解器)从初始值开始,并尝试细化这些值,以找到最小结果残差数组(在最小二乘意义上:需要明确的是,该方法需要一个残差数组并自行进行平方和求和)。为了确定参数值移动的方向,它使用一阶导数(变量的残差)或雅可比行列式。对此没有分析形式是很常见的,在这种情况下,通过在参数值中采取非常小的步长(通常围绕机器精度)来计算数值导数。
利用这些导数和最后的步长大小,LM 方法决定需要多大的步长才能找到最小残差。将残差视为每个参数的二次函数是一种常见的(而且通常是好的)近似。如果该值远离底部,则采取导数呈线性的步骤(即,仅遵循局部斜率)就非常好。但在接近最终解决方案时,使用二阶导数(又名 Hessian、曲率或某种意义上的“历史”)会很有帮助。 LM 结合这两种方法来尝试快速找到解决方案。在每个步骤中,它首先计算导数(以及第一步之后的二阶导数),然后计算所有参数要采取的步骤。它重复此过程,直到解(卡方)与容差相比没有改善。在scipy的leastsq
(通常由curve_fit
使用)中,可以指定用于计算数值导数的步长以及停止拟合的容差。
通常,当使用 curve_fit
或 leastsq
或 least_squares
时,您无需担心任何有关解决方案如何实现的细节成立。好吧,除了如果您确实有分析导数,它可以提高过程的速度和准确性。您的“模型函数”应该只接受传入的参数并计算数据的预测模型。更改传入的值会使算法感到困惑 - 它会使用它知道的值运行您的函数,以尝试找到解决方案。
其他问题:
如果您不知道数据中的标准错误 (y
),请不要太担心。报告卡方的绝对值可能不会接近 ndata-nvarys(正如预期的良好拟合),但相对于其他拟合的值应该很好。
LM 方法的特征之一(至少在 MINPACK -> leastsq
-> curve_fit
实现中)是它报告最终的协方差矩阵,该矩阵可以用于确定拟合参数的不确定性和相关性。通常,报告的值应将卡方增加 1(即 1-sigma
标准误差)。由于数据缺乏良好的不确定性非常常见,因此 scipy curve_fit 会缩放此协方差以给出值,就好像卡方等于 ndata-nvarys 一样。也就是说,如果您认为拟合良好,则参数中的标准误差将相当不错(并且可以使用 sqrt(chi-square/(ndata-nvays)) 来估计参数中的误差数据)。
关于python - 将数据拟合到后处理非线性模型时,curve_fit 的算法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49790974/
我正在尝试将数据放入 this file 中使用 Python 中 scipy 的 curve_fit。该文件包含以摄氏度和毫秒为单位的温度与时间的数据点。我将它们转换为开尔文和秒: thefile
我正在尝试将数据集拟合到这个庞大的方程中。我知道以前有人问过这个问题,但我不认为最初的猜测是我的问题,我也不能在拟合方程中添加更多项。 我的拟合方程。请注意,积分中的“u”与上面定义的 u 不同。 顺
我有一个包含多列的 pandas.DataFrame ,我想应用 curve_fit对他们每个人都有作用。我希望输出是一个数据框,其中具有适合列中数据的最佳值(目前,我对它们的协方差不感兴趣)。 df
我在这里定义了一个函数来返回任意数量的高斯分布的总和: import numpy from numpy import * import matplotlib.pyplot as plt from sc
我正在尝试将高斯拟合到光谱中,y 值大约为 10^(-19)。在我将整个数据乘以 10^(-19) 之前和之后,Curve_fit 给我的拟合结果都很差。附件是我的代码,它是一组相当简单的数据,只是值
我需要适应scipy.optimize.curve_fit一些看起来像图中点的数据。我使用函数 y(x) (见下面的 def)它给出了一个常量 y(x)=c对于 x p[0] '''
我是 Scipy.optimize curve_fit() 工具的新手。我试图找到一个最能模拟图中曲线(时间序列信号的一部分)的函数,但同时我只是将正弦曲线拟合到它并得到一条平坦的线。有人能发现我做错
the link of data from dropbox badfitting我尝试使用 curve_fit 来将数据与我在 python 中的预定义函数进行拟合,但结果远非完美。代码很简单,如下所
抱歉,我是 python 和堆栈流方面的新手。所以我无法发布图像。 我想用Python中的curve_fit函数进行幂律回归。但结果对我来说很奇怪。我用excel进一步检查了一下。看起来这两者差别很大
我正在尝试为拟合函数传递两个数组,该函数接受两个值。 数据文件: 第一栏:时间第 2 栏:温度第 3 栏:交易量第 4 栏:压力 0.000,0.946,4.668,0.981 0.050,0.946
对于我的学士论文,我正在研究一个项目,我想在其中对某些数据进行拟合。问题有点复杂,但我尽量减少这里的问题: 我们有三个数据点(可用的理论数据很少),但这些点高度相关。 使用 curve_fit 来拟合
Python 的 curve_fit计算具有单个自变量的函数的最佳拟合参数,但是有没有办法使用 curve_fit 或其他方法来拟合具有多个自变量的函数?例如: def func(x, y, a, b
本文实例讲述了Python图像处理之直线和曲线的拟合与绘制。分享给大家供大家参考,具体如下: 在数据处理和绘图中,我们通常会遇到直线或曲线的拟合问题,python中scipy模块的子模块optim
我正在尝试使用 curve_fit 来拟合一个简单的正弦波(甚至没有任何噪声)作为测试,然后再继续解决更复杂的问题。不幸的是,它甚至没有给出正确的答案。这是我的语法: x = linspace(0,1
我正在使用Scipy将数据适合一个函数。该函数为我提供了2个参数的值,在这种情况下, a 和 b 。我想使用绑定(bind)的参数来限制这些参数可以采用的值,每个参数都有自己的可接受值范围。 可接受的
我试图找到一条拟合我的数据的曲线,该曲线在视觉上似乎具有幂律分布。 我希望利用 scipy.optimize.curve_fit,但无论我尝试什么函数或数据规范化,我都会得到 RuntimeError
我尝试使用curve_fit拟合对数曲线,假设它遵循Y=a*ln(X)+b,但拟合的数据看起来仍然不正确. 现在我正在使用以下代码: from scipy.optimize import curve_
我正在尝试使用 scipy 的 curve_fit 拟合分布。我尝试拟合一个单分量指数函数,结果几乎是一条直线(见图)。我还尝试了两分量指数拟合,似乎效果很好。两个分量仅意味着方程的一部分使用不同的输
为了拟合双曲函数,我尝试使用以下代码: import numpy as np from scipy.optimize import curve_fit def hyperbola(x, s_1, s_
看起来它只适合第一个参数。 当我尝试使用 curve_fit 示例生成曲线时,这一切都很好,但当我使用自己的数据时却不然。 这是我的原始数据:https://pastebin.com/0hs2JVXL
我是一名优秀的程序员,十分优秀!