numpy.polyfit权重参数1/sigma与1/sigma²文档表述矛盾确认问询
numpy.polyfit 权重参数矛盾说明
这两处官方文档的表述不存在矛盾,是不同语境下的加权逻辑描述差异,核心原因和使用规则如下:
- 先明确
numpy.polyfit的加权最小二乘实现逻辑:损失函数计算规则为对「残差乘以权重w」的结果做平方求和,公式为sum( (w[i] * (y[i] - poly(x[i]))) ** 2 for i in range(M) ) - w参数文档的表述是针对numpy自身的实现逻辑:如果观测值的高斯不确定性为标准差
sigma[i],要让损失等价于标准加权最小二乘(平方残差除以sigma平方后求和),只需要给w传1/sigma[i]即可,代入后刚好得到sum( (y[i]-poly(x[i]))² / sigma[i]² ),符合最大似然估计要求,你的现有使用方式是正确的。 - cov参数文档的表述是通用加权最小二乘语境下的常规描述:常规语境中权重会直接作为平方残差的系数,损失公式为
sum( w[i] * (y[i] - poly(x[i])) ** 2 for i in range(M) ),这种场景下权重要求为1/sigma[i]²,和numpy的实现刚好差了一层平方映射。当你给numpy的w参数传了1/sigma[i],就等价于常规语境下使用了1/sigma[i]²的权重,此时如果你确认sigma是完全可靠的不确定性估计,就可以设置cov='unscaled'跳过缩放,拿到原生协方差结果。
使用建议
- 直接使用
numpy.polyfit接口时,完全按照w参数的文档说明传入1/sigma即可,不需要调整为平方形式。 - 协方差输出按需设置:
- 若sigma估计精度不确定,或仅使用相对权重,保持默认
cov=True即可,自动按约化chi2缩放后的协方差结果更可靠。 - 若确认sigma是准确的观测误差,且w已传入
1/sigma,可设置cov='unscaled'获取未缩放的协方差矩阵。
- 若sigma估计精度不确定,或仅使用相对权重,保持默认
内容的提问来源于stack exchange,提问作者Coolcrab
相关产品推荐
相关产品推荐

