【问题标题】:How to calculate the covariance matrix in blocks?如何计算块中的协方差矩阵?
【发布时间】:2015-08-05 15:01:58
【问题描述】:

有一个 Matlab 内置函数 "cov" 来计算给定矩阵 C 的协方差矩阵。如果C 太大,例如1000*60000 double,而我的电脑内存不足,则需要编写一个函数,以块或块的形式计算给定矩阵C 的协方差矩阵。我的问题是如何计算块/块的协方差矩阵?假设给定矩阵的大小是1000*60000 double,我的计算机无法使用"cov" 函数处理。

【问题讨论】:

  • 您确定 1000 x 60000 的尺寸合适吗?通常,您应该拥有比变量(第二维)更多的观察值(第一维)。
  • @A.Donda,是的,1000*60000 是正确的尺寸。 6000 个特征和 1000 个时间点。

标签: matlab math matlab-guide data-analysis


【解决方案1】:

假设您的意思是您对 1,000 个变量进行了 60,000 次观察,那么您可以分块计算协方差矩阵,然后随时组合它们:

  1. 将您的观察结果分成大小为 N 的块。(必须确定 N 以适合您的 RAM)
  2. 计算第 N 个块的协方差
  3. 将第 N 个块与前 N-1 个块的总协方差相结合

Here 是关于如何组合协方差矩阵的讨论。基本上,您希望在处理块时跟踪它们的协方差和均值,然后通过利用它们的均方减去均值表示的平方来组合,列在列出的协方差的第一个属性here 中。

【讨论】:

  • @dpmcmixxvi,我有 1000 个时间点和 60000 个特征。能给个示例代码吗?
  • wiki 上,对于我上面描述的大小为 N=1 的块的特殊情况,有一个版本的伪代码。使用所有这些循环在 matlab 中可能不会非常有效,但您应该能够查看 wiki 链接上的方程式并针对一般情况进行扩展。
  • 实际上,我只是注意到他们还在最底部提供了组合两个协方差的公式。这应该就是你所需要的。
  • 该公式仅适用于两个数据集。如果有更多的数据块,如何处理这种情况。而且我不认为计算两个数据集的协方差与计算给定矩阵的协方差矩阵相同..
  • 是的,该公式适用于 2 个数据集。这就是为什么你使用公式和我上面描述的步骤。首先结合第一个块 (C1) 和第二个块 (C2) 的协方差,这将为您提供一个新的临时协方差 C12。然后将 C12 与第三块 C3 的协方差结合起来,得到 C123。然后你将它与 C4 等结合起来。
猜你喜欢
  • 2011-05-23
  • 1970-01-01
  • 2020-04-13
  • 1970-01-01
  • 2011-09-18
  • 2012-11-22
  • 2015-03-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多