合并两个集合的协方差以创建新的协方差

Merging covariance from two sets to create new covariance

有什么方法可以合并来自两个数据集的协方差,而不是通过合并数据来计算新的协方差。假设我已经从 100 万个数据中计算出协方差,然后如果我得到另一个已经计算出协方差的 200 万个数据,我是否可以结合已经计算出的协方差来产生新的协方差。当我从 300 万个数据中计算协方差时,我最感兴趣的是减少所需的计算量。

对于均值,这很容易做到。 新均值 = (data_size_1* mean_1 + data_size_2*mean_2)/((data_size_1 + data_size_2)

是否有任何类似的方法来计算协方差,以便我可以利用预先计算的数据。我还可以在计算 data_size_1 和数据 data_size_2 的协方差时存储一些信息,如果这可以帮助我轻松找到新的合并协方差。

此 pdf 中给出了完整的推导 http://prod.sandia.gov/techlib/access-control.cgi/2008/086212.pdf

我在这里找到了合并两组方差的公式:
https://www.emathzone.com/tutorials/basic-statistics/combined-variance.html

替换 (X1–Xc)2 为 (X1–Xc)(Y1–Yc), 和 (X2–Xc)2 与 (X2–Xc)(Y2–Yc) 给出协方差的正确结果。 与第一个答案中的公式不同,后者只是近似正确。

这是结合协方差 ab 的代码片段 生成的协方差 r.

r.n = a.n + b.n;
r.mean_x = (a.n * a.mean_x + b.n * b.mean_x) / r.n;
r.mean_y = (a.n * a.mean_y + b.n * b.mean_y) / r.n;
r.sum = a.sum + a.n * (a.mean_x - r.mean_x) * (a.mean_y - r.mean_y)
      + b.sum + b.n * (b.mean_x - r.mean_x) * (b.mean_y - r.mean_y);

abr 是包含以下内容的结构:

  • n – 元素个数,
  • mean_x – X 的平均值,
  • mean_y – Y 的平均值,
  • sum – 协方差乘以 n.