在 Matlab 中计算协方差矩阵



我正在MATLAB中实现PCA算法。我看到两种不同的方法来计算协方差矩阵:

C = sampleMat.' * sampleMat ./ nSamples;

C = cov(data);

这两种方法有什么区别?

PS 1:当我使用cov(data)时,这是不必要的:

meanSample = mean(data,1);
data = data - repmat(data, nSamples, 1);

诗篇2:

首先,我应该使用nSamples还是nSamples - 1

简而言之:cov主要只是为裸公式增加便利。

如果您键入

edit cov

你会看到很多东西,这些行一直到底部:

xc = bsxfun(@minus,x,sum(x,1)/m);  % Remove mean    
if flag
    xy = (xc' * xc) / m;
else
    xy = (xc' * xc) / (m-1);  % DEFAULT 
end

这与您的第一行基本相同,除了列均值的减法。

阅读有关示例协方差的 wiki,了解为什么默认路径中有减 1。

但请注意,您的第一行使用普通转置(.'),而cov版本使用共轭转置(')。这将使cov的输出在复值数据的上下文中有所不同。

另请注意,cov是对非内置函数的函数调用。这意味着在循环中使用cov时会有(可能严重的)性能损失;Matlab的JIT编译器无法加速非内置函数。

相关内容

  • 没有找到相关文章

最新更新