高斯混合模型拟合数据
这个例子展示了如何模拟来自多元正态分布的数据,然后使用高斯混合模型(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标题(模拟数据的)
安装双分量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的模拟数据和等高线);
显示均值、协方差和混合比例的估计值
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)都是基于似然的模型拟合度量,包括对复杂性的惩罚(特别是参数的数量)。当组件数量未指定时,您可以使用它们来确定模型的适当组件数量。
另请参阅
fitgmdist
|gmdistribution
|mvnrnd
|随机