无法在Matlab中从随机向量创建协方差矩阵

时间:2015-11-10 12:42:40

标签: matlab matrix covariance

我尝试使用随机初始化构建高斯混合模型,并将结果与​​使用Kmeans初始化的结果进行比较。但是,我很难创建初始协方差矩阵。我从2500个数据点的数据集中随机选择了10个数据点(每个"点"实际上是一个图像),并将它们用作平均值。然后我试图从这些随机点中创建协方差矩阵。

这就是我所拥有的。

% Randomly initialize GMM parameters
rng(1);
rand_index = randperm(2500);
Mu = data(:,rand_index(1:10));
for i = 1 : 10
    Sigma(:,:,i) = cov(Mu);
    Pxi(:,i) = mvnpdf(data', Mu(:,i)', Sigma(:,:,i));
end 

data50x2500矩阵。我一直收到错误,因为我Sigma的大小不合适,或者不是肯定的等等。

例如,上面的代码给出了错误

Error using mvnpdf (line 116)
SIGMA must be a square matrix with size equal to the number of columns in X, or a row vector with length equal to the number of
columns in X.

如果我使用

Sigma(:,:,i) = cov([Mu(:,i) Mu(:,i)]');

我收到错误

Error using mvnpdf (line 129)
SIGMA must be a square, symmetric, positive definite matrix.

我应该如何创建这个协方差矩阵?

1 个答案:

答案 0 :(得分:0)

我认为你遇到的事情并不是每次都在发生。这是一种数值不稳定性,您可以避免使用简单的技术:

%Add a tiny variance to avoid numerical instability
Sigma(:,:,i) = cov([Mu(:,i) Mu(:,i)]');
D = size(Sigma,1);
Sigma(:,:,i) = Sigma(:,:,i) + 1E-5.*diag(ones(D,1));