主要内容

高斯混合模型拟合数据

这个例子展示了如何模拟来自多元正态分布的数据,然后使用高斯混合模型(GMM)来拟合数据fitgmdist。要创建已知或完全指定的GMM对象,请参见创建高斯混合模型

fitgmdist需要一个数据矩阵和GMM中组件的数量。要创建有用的GMM,您必须选择k小心。太少的组件不能准确地对数据建模(即,对数据的欠拟合)。过多的分量会导致协方差矩阵奇异的过拟合模型。

从两个二元高斯分布的混合中模拟数据mvnrnd

Mu1 = [1 2];Sigma1 = [2 0];0。5);mu = [-3 -5];Sigma2 = [1 0;0 1];rng (1);%为了重现性X = [mvnrnd(mu1,sigma1,1000);mvnrnd (mu2 sigma2 1000)];

绘制模拟数据。

散射(X (: 1) X(:, 2), 10日“。”%散点图,大小为10标题(模拟数据的

图包含一个轴对象。标题为模拟数据的轴对象包含一个类型为scatter的对象。

安装双分量GMM。使用“选项”名称-值对参数显示拟合算法的最终输出。

选项= statset(“显示”“最后一次”);gm = fitgmdist(X,2,“选项”选项)
5次迭代,log-likelihood = -7105.71 gm = 2个分量的二维高斯混合分布成分1:混合比例:0.500000均值:-3.0377 -4.9859成分2:混合比例:0.500000均值:0.9812 2.0563

绘制拟合GMM的pdf。

gmPDF = @ (x, y) arrayfun (@ (x0, y0) pdf(通用、(x0 y0)), x, y);持有h = fcontour(gmPDF,[-8 6]);标题(pdf的模拟数据和等高线);

图包含一个轴对象。pdf标题为“模拟数据和轮廓线”的轴对象包含散点、函数轮廓2个类型的对象。

显示均值、协方差和混合比例的估计值

ComponentMeans = gm.mu
ComponentMeans =2×2-3.0377 -4.9859 0.9812 2.0563
组件协方差= gm.Sigma
ComponentCovariances = ComponentCovariances(:,:,1) = 1.0132 0.0482 0.0482 0.9796 ComponentCovariances(:,:,2) = 1.9919 0.0127 0.0127 0.5533
MixtureProportions = gm.ComponentProportion
MixtureProportions =1×20.5000 - 0.5000

对数据拟合4个模型,每个模型的成分数不断增加,并比较赤池信息准则(Akaike Information Criterion, AIC)的值。

AIC = 0 (1,4);Gm = cell(1,4);k = 1:4 gm{k} = fitgmdist(X,k);AIC (k) = {k} .AIC通用;结束

显示使AIC值最小的组件数量。

[minAIC,numComponents] = min(AIC);numComponents
numComponents = 2

双分量模型的AIC值最小。

显示双组件GMM。

gm2 = gm{numComponents}
gm2 = 2个分量的二维高斯混合分布成分1:混合比例:0.500000均值:-3.0377 -4.9859成分2:混合比例:0.500000均值:0.9812 2.0563

AIC和贝叶斯信息标准(BIC)都是基于似然的模型拟合度量,包括对复杂性的惩罚(特别是参数的数量)。当组件数量未指定时,您可以使用它们来确定模型的适当组件数量。

另请参阅

|||

相关的话题