我目前正在 Python 中使用 scipy.optimize 包的 curve_fit 函数,并且知道,如果取从 curve_fit 获得的协方差矩阵的对角线条目的平方根,您将获得 curve_fit 参数的标准偏差计算出来的。我不确定这个标准差到底意味着什么。据我了解,这是使用黑塞矩阵的近似值,但确切的计算结果是什么呢?高斯钟形曲线上的标准差告诉您曲线特定范围内的面积百分比,因此我假设 curve_fit 它告诉您某些参数值之间有多少个数据点,但显然这是不对的......
如果这应该是曲线拟合的基本知识,我很抱歉,但我真的无法弄清楚标准差的作用,它们表示参数上的错误,但这些参数被计算为函数的最佳拟合,这并不像是一个完整的最佳参数集合,我们得到该集合的平均值,因此也有一个标准差。最佳值只有一个,用什么来比较呢?我想我的问题实际上可以归结为:如何手动准确地计算这些标准差,而不仅仅是使用黑塞矩阵获得近似值?
拟合参数的方差表示基于模型与数据的拟合质量的最佳拟合值的不确定性。也就是说,它描述了值可以偏离最佳拟合值多少,但仍然具有几乎与最佳拟合值一样好的拟合度。
根据卡方的标准定义,
chi_square = ( ( (data - model)/epsilon )**2 ).sum()
and reduced_chi_square = chi_square / (ndata - nvarys)
(where data
是数据值的数组,model
计算模型的数组,epsilon
是数据的不确定性,ndata
是数据点的数量,并且nvarys
变量的数量),一个好的拟合应该有reduced_chi_square
大约 1 或chi_square
around ndata-nvary
。 (注意:不是 0——拟合不会完美,因为数据中存在噪声)。
变量的最佳拟合值的方差给出了您可以更改该值(并重新优化所有其他值)并将卡方增加 1 的量。这给出了所谓的“1-sigma”值的不确定性。
正如您所说,这些值以协方差矩阵的对角项表示scipy.optimize.curve_fit
(非对角项给出了变量之间的相关性:如果一个变量的值偏离其最佳值,其他变量将如何反应以使拟合更好)。该协方差矩阵是在拟合完成时使用解附近的试验值和导数构建的 - 它计算参数空间的“曲率”(即,当变量值变化时卡方变化多少)。
You can手动计算这些不确定性。这lmfit
图书馆 (https://lmfit.github.io/lmfit-py/ https://lmfit.github.io/lmfit-py/)具有通过最小二乘最小化或曲线拟合更明确地探索变量置信区间的例程。这些在以下位置有更详细的描述:https://lmfit.github.io/lmfit-py/confidence.html https://lmfit.github.io/lmfit-py/confidence.html。这可能是最容易使用的lmfit
用于曲线拟合,而不是尝试重新实现置信区间代码curve_fit
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)