【问题标题】:curve_fit - question about var/covar matrixcurve_fit - 关于 var/covar 矩阵的问题
【发布时间】:2021-01-14 12:51:03
【问题描述】:

我正在使用curve_fit 将曲线拟合到二维空间中的一组数据点(x,y)。正如我们所知,curve_fit 有这个 p0 参数。

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

curve_fit 返回的第二个东西是pcov,当我取pcov 的对角线并对其平方根时,我得到一个值向量v

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

我注意到当我改变p0 时,我得到不同的曲线,它们有不同的S 值。而且,有时我认为这些曲线在视觉上看起来并没有太大区别,但它们的 S 值却相差很大。

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

我的问题是:这个S

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

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

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

是这样还是不是?

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

【问题讨论】:

标签: python numpy scipy data-science curve-fitting


【解决方案1】:

实际上既不是 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 等等。所以大多数时候我会说一个小错误意味着一个很好的拟合,肯定在线性系统中。在奇怪的非线性情况下,我很确定可以构造一个情况(陡峭的局部最小值),其中参数的变化相对于输入值的变化很小,而拟合本身非常糟糕。在这种情况下,一个人会同时出现小错误和不合适的情况。不过,人们可能会在卡方值中看到它。

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

给出了一些数学公式here

【讨论】:

  • 谢谢。这些拟合参数是什么?另外,如果合身在视觉上看起来不错,我应该相信这个,还是应该相信大错误?我想我应该相信视觉效果。
  • 另外...您确定其他答案暗示的内容不正确吗?从我所做的数百个实验中,在我看来,当 S 较小时,模型看起来也不错。但是如果模型(拟合曲线)看起来不错,那么 S 不一定很小(特别是当我只有几个数据点要拟合时,而是我试图拟合的复杂模型函数)。你觉得这样好吗?
  • @peter.petrov 对我来说还可以。最初来自实验物理学,我同意经验是对正在发生的事情的一个很好的暗示。我会进行编辑。请告诉我这是否能回答您的问题。
  • 谢谢。我会尝试重新阅读并尝试理解您在说什么。
【解决方案2】:

据我了解,这更像是您的第 1 点。

来自docs

popt 的估计协方差。对角线提供方差 参数估计值。计算一个标准差误差 参数使用 perr = np.sqrt(np.diag(pcov))。

所以pcov越小,参数估计的误差就越小。

---编辑---

pcov 表示求解器如何确定所提供的参数popt 是最优且唯一的。这并不一定意味着它们可以很好地拟合数据。

【讨论】:

  • 嗯...好的,谢谢,但你听起来有点不确定 :) 我也不确定 :) 这就是我问这个问题的原因。我不明白errors... 与什么相比的错误/差异?到数据点(x,y),或者到参数本身在收敛到“几乎最优”曲线之前变化了多少。
  • 如果你真的想去挖掘和理解,我建议你做一些练习。我会得到一组完全符合曲线的点,然后看看 pcov 会发生什么。然后开始一一改变,看看又会发生什么=)我刚刚完成了文档中提供的示例,并删除了y_noise...适合完美,pcov 为零。这是一个线索;)
  • 好的......所以你的意思是这样的测试表明它确实是1)而不是2)?数字 S - 它确实衡量了我们对数据的逼近程度/好坏程度?
  • @peter.petrov 在阅读了@mikuszefski 的答案后改变了我的看法,我玩了一些高阶多项式。尝试将一组表现良好的点(比如一条直线)拟合到一个高阶多项式函数中。多项式被卡住并且无法拟合数据,尽管最佳解决方案非常简单 - 所以你得到一个非常小的pvoc
猜你喜欢
  • 2017-12-16
  • 2011-06-09
  • 2011-07-09
  • 2020-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多