【发布时间】:2014-12-29 21:31:11
【问题描述】:
根据documentation,参数sigma可用于设置拟合数据点的权重。当参数 absolute_sigma=True 时,这些“描述”1-sigma 错误。
我有一些带有人工正态分布噪声的数据:
n = 200
x = np.linspace(1, 20, n)
x0, A, alpha = 12, 3, 3
def f(x, x0, A, alpha):
return A * np.exp(-((x-x0)/alpha)**2)
noise_sigma = x/20
noise = np.random.randn(n) * noise_sigma
yexact = f(x, x0, A, alpha)
y = yexact + noise
如果我想使用curve_fit 将嘈杂的y 调整为f,我应该将sigma 设置为什么?这里的文档不是很具体,但我通常会使用1/noise_sigma**2 作为权重:
p0 = 10, 4, 2
popt, pcov = curve_fit(f, x, y, p0)
popt2, pcov2 = curve_fit(f, x, y, p0, sigma=1/noise_sigma**2, absolute_sigma=True)
不过,它似乎并没有提高合身性。
此选项是否仅用于通过协方差矩阵更好地解释拟合不确定性?这两个告诉我有什么区别?
In [249]: pcov
Out[249]:
array([[ 1.10205238e-02, -3.91494024e-08, 8.81822412e-08],
[ -3.91494024e-08, 1.52660426e-02, -1.05907265e-02],
[ 8.81822412e-08, -1.05907265e-02, 2.20414887e-02]])
In [250]: pcov2
Out[250]:
array([[ 0.26584674, -0.01836064, -0.17867193],
[-0.01836064, 0.27833 , -0.1459469 ],
[-0.17867193, -0.1459469 , 0.38659059]])
【问题讨论】:
-
当你说它似乎并没有提高合身性时,你期待看到什么?
-
成群的角马威风凛凛地扫过平原。或者失败了,我认为 rms 拟合残差在“with-sigma”情况下会更好,但更糟(0.64 vs 1.07)。
-
哈哈,牛羚。不过,未加权算法是否不会最小化 rms(回想一下我模糊地记住的日子,当时我做了很多曲线拟合)?在这种情况下,权重肯定只会增加它吗?您是在告诉它“不要太担心这里的这些点,即使以整体 rms 为代价也能更好地适应这些其他点”。
-
请注意:R 的 nls 采用权重,看起来 Python 的
sigma对应于 nls 权重的平方根。
标签: python scipy curve-fitting