【发布时间】:2021-11-16 08:52:57
【问题描述】:
from scipy.optimize import curve_fit
def func(x, a, b):
return a * x + b
x = [0, 1, 2, 3]
y = [160, 317, 3302, 16002]
yerr = [0.0791, 0.0562, 0.0174, 0.0079]
curve_fit(func, x, y, sigma=yerr)
我正在尝试使用 scipy 的 curve_fit 函数对上面的代码进行加权最小二乘线性回归。由此我需要得到斜率和拟合误差。我想我知道如何使用下面的代码获得斜率,但我不知道如何提取拟合误差。
# Code to get the slope (correct me if i'm wrong!!)
popt = curve_fit(func, x, y, sigma=yerr)
slope = popt[0]
谢谢!
========================================
编辑:我一直在做一些研究,我想我可能已经为自己弄清楚了一切。我会尽力解释的!
从下图中,我将这个函数提供给curve_fit,a和b是我的参数,分别对应斜率和截距。
当您使用曲线拟合时,它会返回一个一维数组、popt 和一个二维数组 pcov。
popt 包含对我提供的参数的优化,所以在这种情况下,popt[0] 是斜率(绿色),popt[1] 是截距(红色)。
接下来,pcov 矩阵表示协方差。我在这里主要寻找的是对角线上的值,因为它们对应于每个参数的方差。我再次对它们进行了颜色编码,因此斜率错误为pcov[0,0](绿色),截距错误为pcov[1,1](红色)。
由此我能够得到我的线的斜率及其错误。我希望这个解释可以对其他人有所帮助!
【问题讨论】:
-
那个代码是错误的。
curve_fitreturns(popt, pcov)所以你的popt[0]将是curve_fitspopt -
也就是说,需要指出的是,您不必要地使用非线性优化来进行简单的回归。
-
那么更好的解决方案是什么?我的印象是我需要curve_fit,所以我可以在我的y值中包含错误。事实上我并不完全理解这个功能!
标签: python scipy linear-regression curve-fitting