我尝试使用随机初始化构建高斯混合模型,并将结果与使用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
data
是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.
我应该如何创建这个协方差矩阵?
答案 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));