You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

手动实现协方差时三种方式结果不一致,求排查Bug

问题分析与解决

你的方法3在数学展开时出现了错误,核心问题是最后一项的求和步骤遗漏了样本量倍数:

我们重新推导协方差的分子展开式:

样本协方差的分子为 $\sum_{i=1}^n (x_i - \bar{x})(y_i - \bar{y})$
展开后得到:$\sum x_i y_i - \bar{x}\sum y_i - \bar{y}\sum x_i + \sum \bar{x}\bar{y}$

注意最后一项 $\sum \bar{x}\bar{y}$,由于$\bar{x}$和$\bar{y}$是常数,对n个样本求和的结果是 $n \times \bar{x}\bar{y}$,但你的方法3里直接写了 $\bar{x}\bar{y}$,漏掉了乘以样本量n。

修正后的方法3代码如下:

(
  sum(foo*bar) - 
    mean(bar)*sum(foo) -
    mean(foo)*sum(bar) + 
    n * mean(foo)*mean(bar)  # 补充乘以样本量n
) / (n-1)

运行修正后的代码,结果会和方法1、方法2完全一致。

内容的提问来源于stack exchange,提问作者JCWong

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 14:34:54