numpy.polyfit的文档HERE将可选的输入向量 w 定义为“应用于y坐标的权重”。这个定义不清楚,似乎不是最小二乘拟合权重的标准定义(参见例如HERE)。
如何计算输入测量的1σ误差(标准偏差)的常见情况,如何计算numpy.polyfit中使用的权重?
答案 0 :(得分:1)
w 与numpy.polyfit中的1σ错误之间的关系是
w = 1/sigma
这与每个人都期望的不同。
编辑:在我对Github的评论之后,numpy.polyfit 1.16文档现在明确指出“使用1 / sigma(不是1 / sigma ** 2)”以避免人们认为有公式中的拼写错误。
在最小二乘拟合中,通常以这样的方式定义权重向量,即拟合最小化平方误差(参见例如Wikipedia或NIST)
chi2 = np.sum(weights*(p(x) - y)**2)
在1σ误差(标准偏差)“sigma”已知的常见情况下,人们有熟悉的教科书关系,其中权重是方差的倒数
weights = 1/sigma**2
然而,numpy.polyfit文档将权重定义为“应用于y坐标的权重”。这个定义不太正确。权重适用于拟合残差,而不仅适用于y坐标。
更重要的是,看看Numpy(v1.9.1)代码中的数学,看起来Numpy代码在最后的方块意义上解决了下面的线性问题,其中 w 向量确实乘以y坐标
(vander*w[:, np.newaxis]).dot(x) == y*w
但是,在最小二乘意义上求解上述数组表达式相当于使用括号内的 w 最小化下面的表达式
chi2 = np.sum((w*(vander.dot(x) - y))**2)
或者,使用Numpy文档的表示法
chi2 = np.sum((w*(p(x) - y))**2)
以 w 与1σ误差之间的关系为
w = 1/sigma
这与每个人都期望的不同。