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

无法在Matlab中从随机向量创建协方差矩阵,matlab,matrix,covariance,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

我正在尝试使用随机初始化建立一个高斯混合模型,并将结果与使用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 
数据是一个50x2500矩阵。我不断地得到一个错误,因为我的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.

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

我假设您所经历的并不是每次跑步都会发生。这是一种数值不稳定性,您可以使用简单的技术避免:

%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));

试试挤压西格玛:,:,我.“谢谢。我试过了,但我的Sigma变成了对角线矩阵,对角线条目都等于1.0e-05,这似乎不正确。。。我不明白为什么cov函数给我所有的零。在添加1E-5之前对角线值是零吗?如果是这样,那么问题在于μ。是的,对角线值为零。然而,μ不是零。