为什么MATLAB原生函数cov(协方差矩阵计算)使用的除数与我预期的不同?
给定M维数据矩阵和N个样本为什么MATLAB原生函数cov(协方差矩阵计算)使用的除数与我预期的不同?,matlab,covariance,Matlab,Covariance,给定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)少一个 为什么??你能复制它吗?这是一只虫子吗
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)
也就是说,分母是(N-1)少一个。
为什么?你能复制它吗?这是一只虫子吗
看。这和我的工作有关
另外请注意,如果您希望使用分母N而不是N-1,则可以向调用中添加一个尾随的
1
参数,即cov(x,y,1)
或cov(x,1)
,如文档所示。N-1是计算方差时使用的正确分母。
这就是所谓的贝塞尔校正(http://en.wikipedia.org/wiki/Bessel%27s_correction)
简单地说,1/(n-1)比1/n产生更准确的预期方差估计。Matlab绝不会让这样的“错误”从他们身边溜走。
N-1
是有原因的,让我找到它。”或者“n-1”,这可能取决于您是查看样本(co)方差
还是总体(co)方差
。对于大N,它们非常接近,但你必须小心小N。哈,我显然看不懂。在发布这篇文章之前,我确实“帮助了cov”。谢谢