Ste*_*ano 6 python curve-fitting scipy chi-squared
是否有可能获得卡方的值作为 的直接输出scipy.optimize.curve_fit()?
通常,通过对模型和数据之间的差异求平方、不确定性加权和总和,在拟合后很容易计算它。然而,当参数sigma传递一个二维矩阵(数据的协方差矩阵)而不是一个简单的一维数组时,它就不那么直接了。
最佳拟合参数及其协方差矩阵真的是唯一可以从中提取的两个输出curve_fit()吗?
不scipy.optimize.curve_fit经过人工计算,无法直接得到chi^2的值。它可以从获得额外的输出curve_fit之外popt,并pcov通过提供参数full_output=True,但额外的输出不包含志^ 2的值。(额外的输出被记录在例如leastsq 这里)。
在 wheresigma是 MxM 数组的情况下,curve_fit 最小化的 chi^2 函数的定义略有不同。在这种情况下,curve_fit最小化函数r.T @ inv(sigma) @ r,其中r = ydata - f(xdata, *popt),而不是chisq = sum((r / sigma) ** 2)在一维的情况下sigma,请参阅参数的文档sigma。因此,您还应该能够通过使用r.T @ inv(sigma) @ r优化的参数来计算您的情况下的 chi^2 。
另一种方法是使用另一个包,例如lmfit,其中卡方的值可以直接从拟合结果中获得:
from lmfit.models import GaussianModel
model = GaussianModel()
# create parameters with initial guesses:
params = model.make_params(center=9, amplitude=40, sigma=1)
result = model.fit(n, params, x=centers)
print(result.chisqr)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10405 次 |
| 最近记录: |