给出M维和N个样本的数据矩阵数据,比如说,
data = randn(N, M);
我可以用
计算协方差矩阵data_mu = data - ones(N, 1)*mean(data);
cov_matrix = (data_mu'*data_mu)./N
如果我使用原生MATLAB函数
cov_matrix2 = cov(data)
这总是等于
cov_matrix = (data_mu'*data_mu)./(N-1)
也就是说,分母是(N-1)少一个。
为什么?你能重现吗?这是一个错误吗?
我使用MATLAB版本7.6.0.324(2008)。
答案 0 :(得分:9)
也就是说,分母是(N-1)少一个。 为什么??你能重现吗?这是一个错误吗?
请参阅cov documentation。它与population variance vs. sample variance有关。
另请注意,如果您希望使用分母N而不是N-1,则可以在调用中添加尾随1
参数,即cov(x,y,1)
或cov(x,1)
文档。
答案 1 :(得分:0)
n-1是用于计算方差的正确分母。 这就是所谓的贝塞尔校正(http://en.wikipedia.org/wiki/Bessel%27s_correction) 简单地说,1 /(n-1)产生比1 / n更准确的预期方差估计。