【问题标题】:Calculating covariance in Matlab for large dataset and different mean在 Matlab 中计算大数据集和不同均值的协方差
【发布时间】:2018-05-12 18:51:54
【问题描述】:

所以我正在尝试实施一种 EM 算法来训练用于对数据进行分类的高斯类条件模型。我现在陷入了 M 步,因为我不知道如何计算协方差矩阵。

问题是我有一个大数据集,使用 for 循环遍历每个点会很慢。我也不能使用协方差函数 cov(),因为我需要使用我使用这个公式计算的平均值(mu 符号一)

有没有办法调整 cov() 以使用我想要的平均值?或者有没有其他方法可以在没有 for 循环的情况下做到这一点?

编辑:忘记解释数据矩阵是什么样的。它是一个 nx3,其中每一行都是一个数据点。

它在技术上需要适用于一般情况 nxm 但 n 通常非常大(1000 或更大)而 m 相对较小。

【问题讨论】:

  • 您能否编辑帖子以在循环中包含工作(虽然很慢)版本?这将为寻找性能优化提供一个很好的起点。
  • @mikkola 抱歉,我没有那个代码。我被明确告知我将无法循环遍历数据,因为它需要太长时间。我正在寻找的是 for 循环的替代方法。

标签: matlab classification covariance


【解决方案1】:

您可以手动计算协方差矩阵。让data 是包含所有变量的矩阵(例如,[x y]),mu 是您的自定义平均值,按以下步骤操作:

n = size(data,1);
data_dem = data - (ones(n,1) * mu);
cov_mat = (data_dem.' * data_dem) ./ (n - 1);

请注意,我使用 Bessel's Correctionn-1 而不是 n)是因为 Matlab 的 cov 函数使用它,除非您将第三个参数指定为 1

 cov_mat = cov(x,y,1);

C = cov(___,w) 指定任何 以前的语法。当 w = 0(默认)时,C 由数字归一化 意见-1。当 w = 1 时,它被归一化的数量 观察。

【讨论】:

  • 对不起,我忘了解释数据集的大小。我编辑了原始帖子,但它是一个 nx3 矩阵,其中每一行都是一个数据点。这种方法是否适用于这样的数据矩阵?根据我对协方差的理解(这并不多,因为它有时会让我感到困惑)这种方法不应该起作用,尽管我可能是错的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-20
  • 2012-11-22
  • 2011-10-12
  • 1970-01-01
  • 2023-03-14
  • 2020-02-14
相关资源
最近更新 更多