MMi*_*lis 3 python curve-fitting scipy
我目前正在 Python 中使用 scipy.optimize 包的 curve_fit 函数,并且知道如果您取从curve_fit 获得的协方差矩阵的对角线项的平方根,您将得到curve_fit 参数的标准偏差计算。我不确定的是,这个标准偏差究竟意味着什么。据我所知,这是使用黑塞矩阵的近似值,但确切的计算是什么?高斯钟形曲线上的标准偏差告诉您曲线特定范围内的面积百分比,所以我假设对于 curve_fit 它告诉您某些参数值之间有多少数据点,但显然这是不对的......
如果这应该是曲线拟合的基本知识,我很抱歉,但我真的无法弄清楚标准偏差的作用,它们表示参数上的错误,但这些参数被计算为最可能的函数拟合,它不像有一个完整的最佳参数集合,我们得到该集合的平均值,因此也有一个标准偏差。只有一个最佳值,有什么可比较的呢?我想我的问题真的归结为:我如何手动准确地计算这些标准偏差,而不仅仅是使用 Hesse 矩阵获得近似值?
拟合参数的方差表示基于模型与数据拟合质量的最佳拟合值的不确定性。也就是说,它描述了值可以从最佳拟合值变化多少,并且仍然具有几乎与最佳拟合值一样好的拟合。
根据卡方的标准定义,
chi_square = ( ( (data - model)/epsilon )**2 ).sum()
和reduced_chi_square = chi_square / (ndata - nvarys)
(其中data
是数据值model
的数组,计算模型的数组,epsilon
是数据中的不确定性,ndata
是数据点nvarys
的数量,以及变量的数量),一个好的拟合应该reduced_chi_square
在 1chi_square
左右ndata-nvary
。(注意:不是 0——拟合不会完美,因为数据中存在噪声)。
变量的最佳拟合值的方差给出了您可以更改值(并重新优化所有其他值)并将卡方增加 1 的量。这给出了所谓的“1-sigma”值的不确定性。
正如您所说,这些值以由返回的协方差矩阵的对角项表示scipy.optimize.curve_fit
(非对角项给出变量之间的相关性:如果一个变量的值偏离其最佳值,其他变量将如何响应使合身更好)。这个协方差矩阵是在拟合完成时使用解附近的试验值和导数构建的——它计算参数空间的“曲率”(即,当变量值改变时,卡方改变了多少)。
您可以手动计算这些不确定性。该lmfit
库 ( https://lmfit.github.io/lmfit-py/ ) 具有更明确地探索最小二乘最小化或曲线拟合变量的置信区间的例程。这些在https://lmfit.github.io/lmfit-py/confidence.html中有更详细的描述
。lmfit
用于曲线拟合可能是最简单的,而不是尝试重新实现curve_fit
.