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