【问题标题】:Estimated mean and covariance calculation in matlab using maximum likelihood method使用最大似然法在matlab中估计均值和协方差计算
【发布时间】:2014-07-08 21:28:08
【问题描述】:

我正在尝试在 matlab 中使用最大似然法计算估计均值和协方差。我是 Matlab 的新手,遇到了一些我想在这里解决的问题。

我正在使用以下代码:

clear all;
%Visualization of 2D Gaussian Distribution
% Mean of the distribution
mu = [1 -1]; 
% Covariance matrix (Must be symetric)
sigma = [ 2 1 ; 1 3 ];

% Samples
X = mvnrnd(mu,sigma,1000);

analytical_mean = mean(X);
analytical_cov = cov(X);

N = size(X,1);

estimated_mean = sum(X)/N;
summation = 0;
for i=1:N,
 row = X(i,:);
 tmp1= (row - estimated_mean);
 tmp2 =  tmp1';
 summation = summation + tmp2;
end  

covar = summation/N;

现在analytical_mean 和estimated_mean 相等,但我计算出的协方差covar 不像analytical_cov 那样作为矩阵出现。我需要知道如何正确计算 covar。

我正在使用以下等式:

【问题讨论】:

    标签: matlab statistics


    【解决方案1】:

    你可以试试这个

    [m,n] = size(X);
    estimated_mean = sum(X)/m;
    tmp=zeros(m,n);
    for i=1:n
    tmp(:,i)= ((X(:,i) - estimated_mean(i)));
    end
    covar = (tmp.'*tmp)/m;
    

    【讨论】:

    • 是的,我现在得到了正确的输出。感谢您的回复和帮助。但我不确定在哪里进行了求和..
    • @Umer 这个解决方案中的求和正在这里进行sum(X)/m
    • 这是平均数。在协方差方程中,您可以看到还有另一个求和。
    • 你可以学习矩阵乘法。该值在最后一行求和,.
    【解决方案2】:

    我想你想要

    tmp2 =  tmp1'*tmp1;
    

    而不是

    tmp2 =  tmp1'
    

    这种变化使covar 对我来说非常接近:

    covar =
    
        1.9042    0.9534
        0.9534    3.0195
    

    线索是您的代码的 covar 的尺寸,应该是 2×2,但你的是 2×1

    【讨论】:

    • 有错字吗? tmp 不存在。只有tmp1tmp2
    • 我试过了:tmp2 = tmp1'*tmp1;我得到: 4.1531 而不是矩阵。此外,正如您在等式中看到的那样,存在求和符号,因此求和后我仍然会得到单个值而不是矩阵。
    • @Umer 我确实运行了你的代码(你所有的代码)并进行了更改,它返回一个 2×2 矩阵。如果由于某种原因您已将tmp1 与您的示例进行比较,那么是的,您将获得一个单一的值。在这种情况下尝试tmp2 = tmp1*tmp1'
    • 但我仍然对等式中给出的求和部分感到困惑。请你解释一下它是在哪里完成的
    • @Umer 你是什么意思?我根本没有改变你代码的求和部分......
    猜你喜欢
    • 2016-10-13
    • 2015-04-02
    • 2023-03-07
    • 2018-05-12
    • 1970-01-01
    • 2017-07-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多