gpt4 book ai didi

python - 线性拟合,包括 NumPy/SciPy 的所有错误

转载 作者:太空狗 更新时间:2023-10-29 20:56:14 25 4
gpt4 key购买 nike

我有很多 x-y 数据点在 y 轴上有错误,我需要用非线性函数拟合它们。这些函数在某些情况下可以是线性的,但更常见的是指数衰减、高斯曲线等。 SciPy 通过scipy.optimize.curve_fit 支持这种拟合,我还可以指定每个点的权重。这给了我很好的加权非线性拟合。从结果中,我可以提取参数及其各自的错误。

只有一个警告:错误仅用作权重,但不包含在错误中。如果我将所有数据点的误差加倍,我预计结果的不确定性也会增加。所以我构建了一个测试用例 ( source code ) 来测试它。

配合 scipy.optimize.curve_fit 给我:

Parameters: [ 1.99900756  2.99695535]
Errors: [ 0.00424833 0.00943236]

相同但带有 2 * y_err:

Parameters: [ 1.99900756  2.99695535]
Errors: [ 0.00424833 0.00943236]

相同但有 2 * y_err:

因此您可以看到值是相同的。这告诉我算法没有考虑这些,但我认为值应该不同。

我在这里也读到了另一种拟合方法,所以我也尝试用 scipy.odr 拟合:

Beta: [ 2.00538124  2.95000413]
Beta Std Error: [ 0.00652719 0.03870884]

相同但带有 20 * y_err:

Beta: [ 2.00517894  2.9489472 ]
Beta Std Error: [ 0.00642428 0.03647149]

值略有不同,但我确实认为这是导致错误增加的原因。我认为这只是舍入误差或稍微不同的权重。

是否有一些包可以让我拟合数据并获得实际错误?我在一本书中有这里的公式,但如果不需要,我不想自己实现它。


我现在已经在另一个问题中阅读了关于 linfit.py 的内容。这很好地处理了我的想法。它支持两种模式,第一种是我需要的。

Fit with linfit:
Parameters: [ 2.02600849 2.91759066]
Errors: [ 0.00772283 0.04449971]

Same but with 20 * y_err:
Parameters: [ 2.02600849 2.91759066]
Errors: [ 0.15445662 0.88999413]

Fit with linfit(relsigma=True):
Parameters: [ 2.02600849 2.91759066]
Errors: [ 0.00622595 0.03587451]

Same but with 20 * y_err:
Parameters: [ 2.02600849 2.91759066]
Errors: [ 0.00622595 0.03587451]

我应该回答我的问题还是立即关闭/删除它?

最佳答案

一种行之有效且实际提供更好结果的方法是 Bootstrap 方法。当给出有错误的数据点时,使用参数 Bootstrap 并让每个 xy 值描述高斯分布。然后将从这些分布中的每一个中抽取一个点并获得一个新的自举样本。执行简单的未加权拟合为参数提供一个值。

这个过程会重复大约 300 到几千次。最终会得到拟合参数的分布,其中可以采用均值和标准差来获得值和误差。

另一件巧妙的事情是,结果不是获得单个拟合曲线,而是获得许多曲线。对于每个内插的 x 值,我们可以再次取许多值的平均值和标准差 f(x, param) 并获得误差带:

enter image description here

然后使用各种拟合参数再次执行分析中的其他步骤数百次。然后,这还将考虑拟合参数的相关性,正如上图中可以清楚地看到的那样:尽管对数据拟合了对称函数,但误差带是不对称的。这意味着左侧的插值具有比右侧更大的不确定性。

关于python - 线性拟合,包括 NumPy/SciPy 的所有错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23951876/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com