在Matlab中计算大数据集和不同均值的协方差

时间:2017-11-29 06:29:27

标签: matlab classification covariance

所以我试图实现一个EM算法来训练一个高斯类条件模型来分类数据。我目前陷入了M步骤,因为我无法弄清楚如何计算协方差矩阵。

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

M-step

有没有办法调整cov()来使用我想要的意思?或者还有另一种方法可以在没有循环的情况下做到这一点吗?

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

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

1 个答案:

答案 0 :(得分:0)

您可以手动计算协方差矩阵。让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} }:

1
  

C = cov(___,w)指定任何一个的归一化权重   以前的语法。当w = 0(默认值)时,C由数字标准化   观察-1。当w = 1时,它按数量归一化   观察结果。