我正在设计一种需要部分运行 EM 算法的新算法。为此,我正在使用 MATLAB 的 (R2015b) fitgmdist。
我观察到通过(1)一次运行大量迭代和(2)一个接一个地运行相同数量的迭代所获得的解决方案之间的差异。请注意,两个版本都使用相同的起点,重复次数保留为 1(默认),RegularizationValue 保留为默认值 (0)。
那么差异从何而来?
这是演示该问题的代码:
mu1 = [1 1];
Sigma1 = [2 0; 0 0.5];
mu2 = [1 -1];
Sigma2 = [1 0;0 1];
rng(20); % For reproducibility
X = [mvnrnd(mu1,Sigma1,1000);mvnrnd(mu2,Sigma2,1000)];
start = [];
start.mu = [X(randi(size(X,1)),:); X(randi(size(X,1)),:)];
start.Sigma = [];
start.Sigma = cat(3, start.Sigma, Sigma1+rand(1));
start.Sigma = cat(3, start.Sigma, Sigma2+rand(1));
% run 100 iterations
GMModel = fitgmdist(X,2,'Options',statset('MaxIter',100),'Start',start);
% now run 100 iterations one by one
for i=1:100
GMModel2 = fitgmdist(X,2,'Options',statset('MaxIter',1),'Start',start);
% set the start to result after 1 iteration
start.mu = GMModel2.mu;
start.Sigma = GMModel2.Sigma;
start.ComponentProportion = GMModel2.ComponentProportion;
end
GMModel
% GMModel =
%
% Gaussian mixture distribution with 2 components in 2 dimensions
% Component 1:
% Mixing proportion: 0.470964
% Mean: 0.9345 0.9932
%
% Component 2:
% Mixing proportion: 0.529036
% Mean: 1.0809 -0.8807
GMModel2
% GMModel2 =
%
% Gaussian mixture distribution with 2 components in 2 dimensions
% Component 1:
% Mixing proportion: 0.481425
% Mean: 0.93994 0.98135
%
% Component 2:
% Mixing proportion: 0.518575
% Mean: 1.0788 -0.90749
编辑:我之前没有检查的一件事是用于 GMModel 的迭代次数(当 MaxIter 设置为 100 时)。它在 74 次迭代后停止。
GMModel.NumIterations
%ans =
% 74
一次迭代 74 次迭代的负对数似然与 100 MaxIter 相同。在第 75 次迭代时,它下降了 ~0.006。那么另一个问题出现了,为什么 MaxIter 100 版本在对数似然下降超过容差 1e-6 时在迭代 74 处停止?