在 numpy polyfit 中使用的权重值是多少,拟合的误差是多少

Posted

技术标签:

【中文标题】在 numpy polyfit 中使用的权重值是多少,拟合的误差是多少【英文标题】:What are the weight values to use in numpy polyfit and what is the error of the fit 【发布时间】:2013-11-09 04:16:21 【问题描述】:

我正在尝试对 numpy 中的一些数据进行线性拟合。

Ex(其中 w 是我对该值的样本数,即对于点 (x=0, y=0) 我只有 1 个测量值,该测量值是 2.2,但对于点 (1,1) 我有2 个测量值,值为 3.5

x = np.array([0, 1, 2, 3])
y = np.array([2.2, 3.5, 4.6, 5.2])
w = np.array([1, 2, 2, 1])

z = np.polyfit(x, y, 1, w = w)

所以,现在的问题是: 对于这些情况,在 polyfit 中使用 w=w 是否正确,或者我应该使用 w = sqrt(w) 我应该使用什么?

另外,如何从 polyfit 中获取拟合误差?

【问题讨论】:

【参考方案1】:

如果您有正态分布的测量值,那么每个值的不确定性将与1/sqrt(n) 成正比,其中n 是测量次数。你想通过不确定性的倒数来衡量你的适合度,所以你的第二个猜测是最好的:w=np.sqrt(n)

要获得参数的协方差,请同时提供cov=True

x = np.array([0, 1, 2, 3])
y = np.array([2.2, 3.5, 4.6, 5.2])
n = np.array([1, 2, 2, 1])

p, c = np.polyfit(x, y, 1, w=np.sqrt(n), cov=True)

cov 矩阵的对角线是每个参数的个体方差,当然非对角线是协方差。所以最有可能你想要的“拟合误差”是这些对角线的平方根:

e = np.sqrt(np.diag(c))

【讨论】:

非常感谢。这就是我一直在寻找的。​​span> 很高兴为您提供帮助,@jbssm。顺便说一句,当使用np.polyfitnp.polyvalnp.poly1d 等时,不要将它们与任何np.polynomial 模块函数组合在一起,因为它们是follow different conventions, specifically the return ordering。通常建议只使用np.polynomial package,但出于某种原因it doesn't provide the covariance

以上是关于在 numpy polyfit 中使用的权重值是多少,拟合的误差是多少的主要内容,如果未能解决你的问题,请参考以下文章

在没有numpy polyfit的python中拟合二次函数

numpy.polyfit 和 scipy.polyfit 有啥区别? [复制]

numpy.polyfit 给出空残差数组

多个维度的 NumPy PolyFit 和 PolyVal?

无法在 Jupyter 笔记本中导入 Numpy(RuntimeError: Polyfit sanity test 发出警告,很可能是由于使用了有问题的 Accelerate 后端)

numpy polynomial.Polynomial.fit() 给出的系数与 polynomial.polyfit() 不同