【问题标题】:Why does MATLAB native function cov (covariance matrix computation) use a different divisor than I expect?为什么 MATLAB 原生函数 cov(协方差矩阵计算)使用的除数与我预期的不同?
【发布时间】:2010-12-21 01:16:30
【问题描述】:

给定一个 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) 减一。

为什么?你能重现它吗?这是bug吗??

我使用 MATLAB 版本 7.6.0.324 (2008)。

【问题讨论】:

标签: matlab covariance


【解决方案1】:

即分母为(N - 1) 减一。 为什么??你能重现它吗?这是bug吗??

请参阅cov documentation。它与population variance vs. sample variance有关。

另请注意,如果您希望使用分母 N 而不是 N-1,您可以根据文档在调用中添加尾随 1 参数,即 cov(x,y,1)cov(x,1)

【讨论】:

  • 哈哈,我显然看不懂。在发布此之前,我做了“帮助 cov”。谢谢。
【解决方案2】:

n-1 是用于计算方差的正确分母。 这就是所谓的贝塞尔校正 (http://en.wikipedia.org/wiki/Bessel%27s_correction) 简而言之,1/(n-1) 比 1/n 产生更准确的方差预期估计值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-13
    • 2012-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多