这个例子展示了如何通过调整组件的数量和组件协方差矩阵结构来确定最佳高斯混合模型(GMM)。
载入费雪的虹膜数据集。把花瓣的大小作为预测因素。
负载渔民;X =量(:,3:4);(氮、磷)= (X)大小;rng (1);重复性的%图;plot(x(:,1),x(:,2),“。”,'Markersize'15);标题('fisher'的虹膜数据集');包含(“花瓣长度(厘米)”);ylabel (“花瓣宽度(cm)”);
假设k所需组件或集群的数量,和是所有组件的协方差结构。按照以下步骤调整GMM。
选择一个 (k,)对,然后使用所选参数规范和整个数据集适用于GMM。
估计AIC和BIC。
重复步骤1和2,直到排除所有(k,)成对的兴趣。
选择合适的GMM,平衡低AIC和简单。
对于本例,选择一个值网格k包括2和3,以及一些周围的数字。为协方差结构指定所有可用的选项。如果k对于数据集来说太高了,那么估计的分量协方差可能被严重制约。指定使用正则化来避免条件恶劣的协方差矩阵。EM算法迭代次数增加到10000次。
k = 1:5;nK =元素个数(k);σ= {“对角线”,'满的'};nSigma =元素个数(σ);SharedCovariance ={真,假};SCtext = {'真的',“假”};nSC =元素个数(SharedCovariance);RegularizationValue = 0.01;选择= statset (“麦克斯特”,10000);
利用各参数组合拟合gmm。计算每个拟合的AIC和BIC。跟踪各拟合的终端收敛状态。
%预先配置通用=细胞(nK、nSigma nSC);aic = 0 (nK、nSigma nSC);bic = 0 (nK、nSigma nSC);聚合= false (nK、nSigma nSC);适合所有型号为m = 1:nsc;为j = 1:nsigma;为我= 1:nK;通用{i, j, m} = fitgmdist (X, k(我),...“CovarianceType”,sigma {j},...“SharedCovariance”,sharedcovariance {m},...'正规化值',正规化值,...“选项”,选项);AIC(i,j,m)= gm {i,j,m} .aic;BIC(i,j,m)= gm {i,j,m} .bic;融合(i,j,m)= gm {i,j,m} .converged;结束结束结束allConverge = (sum(converged(:)) == nK*nSigma*nSC)
allConverge =逻辑1
通用汽车
一个细胞阵列包含所有的安装GMDistribution.
模型对象。所有拟合实例都融合在一起。
绘制单独的柱状图来比较所有拟合的AIC和BIC。将条形图按k.
图;酒吧(Rehape(AIC,NK,Nsigma * NSC));标题('AIC为各种$ k $和$ \ sigma $ chines','口译员',“乳胶”);包含(“k美元”,'口译员',“乳胶”);ylabel ('AIC');传奇({“Diagonal-shared”,“Full-shared”,“Diagonal-unshared”,...“Full-unshared”});图;酒吧(重塑(bic、nK、nSigma * nSC));标题('BIC For Various $k$ and $\Sigma$ Choices','口译员',“乳胶”);包含(“c美元”,'口译员',“乳胶”);ylabel (“BIC”);传奇({“Diagonal-shared”,“Full-shared”,“Diagonal-unshared”,...“Full-unshared”});
根据AIC和BIC值,最好的模型具有3个组件和完整的不共同的协方差矩阵结构。
使用最佳拟合模型对训练数据进行聚类。绘制聚集的数据和组件省略号。
gmb =通用{3 2 2};clusterX =集群(gmb X);kGMM = gmBest.NumComponents;d = 500;x1 = linspace (min (X(: 1)) - 2,马克斯(X (: 1)) + 2, d);x2 = linspace (min (X(:, 2)) - 2,马克斯(X (:, 2)) + 2, d);[x1grid, x2grid] = meshgrid (x1, x2);X0 = [x1grid(:) x2grid(:)];mahalDist =泰姬陵(gmb, X0);阈值=√chi2inv (0.99, 2)); figure; h1 = gscatter(X(:,1),X(:,2),clusterX); hold在;为j = 1:kgmm;idx = mahaldist(:,j)<=阈值;color = h1(j).color * 0.75 + -0.5 *(H1(J).color - 1);h2 = plot(x0(idx,1),x0(idx,2),“。”,'颜色'、颜色、'Markersize'1);uistack (h2,“底”);结束H3 = Plot(Gmbest.mu(:,1),Gmbest.mu(:,2),“kx”,“线宽”2,'Markersize'10);标题(“集群数据和组件结构”);包含(“花瓣长度(厘米)”);ylabel (“花瓣宽度(cm)”);传奇(H1,“集群1”,《集群2》,“集群3”,'地点',“西北”);持有离开
这个数据集包括标签。确定好gmb
通过将每个预测与真实标签进行比较,将数据聚类。
物种=分类(物种);y =零(n,1);= = Y(物种'versicolor') = 1;= = Y(物种'virginica') = 2;= = Y(物种'setosa') = 3;miscluster = Y ~= clusterX;clusterError = (miscluster) / n
clusterError = 0.0800
最佳的GMM组8%的观察到错误的集群。
集群
并不总是保持集群秩序。也就是说,如果您群集几个安装GMDistribution.
模型,集群
可能会为类似组件分配不同的群集标签。