相关疑难解决方法(0)

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

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

只有一点需要注意:错误仅用作权重,但不包含在错误中.如果我将所有数据点的误差加倍,我预计结果的不确定性也会增加.所以我构建了一个测试用例(源代码)来测试它.

适合scipy.optimize.curve_fit给我:

Parameters: [ 1.99900756  2.99695535]
Errors:     [ 0.00424833  0.00943236]
Run Code Online (Sandbox Code Playgroud)

相同但有2 * y_err:

Parameters: [ 1.99900756  2.99695535]
Errors:     [ 0.00424833  0.00943236]
Run Code Online (Sandbox Code Playgroud)

相同但有2*y_err:

所以你可以看到值是相同的.这告诉我算法没有考虑到这些,但我认为值应该是不同的.

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

Beta: [ 2.00538124  2.95000413]
Beta Std Error: [ 0.00652719  0.03870884]
Run Code Online (Sandbox Code Playgroud)

相同但有20 * y_err:

Beta: [ 2.00517894  2.9489472 ]
Beta Std Error: [ 0.00642428  0.03647149]
Run Code Online (Sandbox Code Playgroud)

值略有不同,但我认为这可以解释错误的增加.我认为这只是围绕错误或有点不同的权重.

是否有一些软件包允许我适应数据并获得实际错误?我在书中有公式,但如果我不需要,我不想自己实现.


我现在linfit.py在另一个问题中读过.这很好地处理了我的想法.它支持两种模式,第一种是我需要的.

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

Same but with …
Run Code Online (Sandbox Code Playgroud)

python numpy scipy

8
推荐指数
1
解决办法
3635
查看次数

标签 统计

numpy ×1

python ×1

scipy ×1