首页 > 解决方案 > curve_fit - 关于 var/covar 矩阵的问题

问题描述

我正在使用curve_fit将曲线拟合到(x,y)2D 空间中的某些数据点集。我们知道curve_fit有这个参数。p0

https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.curve_fit.html

返回的第二件事curve_fitpcov,当我取它的对角线pcov和平方根时,我得到一个v值向量。

然后我将所有这些值(来自这个向量v)相加并得到一个数字S:我将其解释为一个整体(正确与否,我不确定?!)std.dev。(或说总和std.deviations)。

我注意到,当我变化时,我会p0得到不同的曲线并且它们具有不同的S值。而且,有时我认为曲线在视觉上看起来并没有太大的不同,但它们的S值却有很大的不同。

我不完全理解这个pcov矩阵,因此我很困惑。它是什么的方差-协方差矩阵?!

我的问题是:这个S

1)它是否衡量我的曲线与数据的拟合程度?

或者

2)它更像是衡量优化过程(发生在内部curve_fit)收敛的速度(给定我使用的特定p0值)吗?

我希望它是 1),因此我可以使用这个数字S作为曲线拟合过程的质量度量。

是这样还是不是?

此外,任何与上述疑问相关的解释都将不胜感激。

标签: pythonnumpyscipydata-sciencecurve-fitting

解决方案


实际上既不是 1) 也不是 2)。协方差矩阵给出了拟合参数的误差和相关性。当合身“看起来不错”时,您可能会有很大的错误。较大的误差意味着模型的预测效果不是很好。当两个参数基本上做同样的事情时,相关性(非对角元素)可能非常大,而模型仍然很好。在第一种方法中,更好地检查拟合的优度,是减少的卡方。大多数拟合是通过最小化卡方来完成的。收敛速度取决于许多因素,包括高维(维度作为参数数量)卡方超曲面的复杂性,而误差仅根据近似抛物线(局部)最小值的曲率估计。

当进入细节时,它会很快变得复杂,但作为一个粗略的想法,就是这样,不知何故。

附录

出现了以下问题:是不是小号S通常表示合身,而好看的合身不一定有小号S

在拟合过程中,最佳参数最终是输入参数的函数。参数的误差反映了如果输入数据发生轻微变化,参数将如何变化。假设我们有a + b x_i = y_i(这是线性的,但可以概括它。我们假设 没有错误x)。然后我们会有a = f( x, y ). 错误s_ad/d y_i f(x, y)实际上是错误传播有关->错误如何y_i影响a等等。所以大多数时候我会说一个小错误意味着一个很好的拟合,在线性系统中肯定是这样。在奇怪的非线性情况下,我很确定可以构造一个情况(陡峭的局部最小值),其中参数的变化相对于输入值的变化很小,而拟合本身非常糟糕。在这种情况下,一个人会同时出现小错误和不合适的情况。不过,人们可能会在卡方值中看到它。

另一方面,如前所述,您可以在卡方很小但误差很大的情况下获得很好的拟合效果。这本身不是问题。但是如果使用带有拟合参数的模型来预测其他值,则需要执行误差传播。因此,预测在现实中可能非常好,但数学告诉你要宣布低置信度。

这里给出了一些数学


推荐阅读