我正在尝试使用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并不像analy_cov这样的矩阵。我需要知道如何正确计算covar。
我使用下面的等式:
答案 0 :(得分: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;
答案 1 :(得分:0)
我想你想要
tmp2 = tmp1'*tmp1;
而不是
tmp2 = tmp1'
这一变化让我covar
非常接近我:
covar =
1.9042 0.9534
0.9534 3.0195
线索是代码covar
的尺寸,应该是2乘2但你的是2乘1