
上QQ阅读APP看书,第一时间看更新
6.3 实例分析
了解了GMM算法的原理及优缺点后,本节将对这一算法进行实际的应用。首先用正态分布生成模拟数据,并可视化展示模拟数据,然后用GMM的部分核心展示聚类的收敛过程,并可视化展示聚类效果,最后再给出完整的GMM代码。
6.3.1 数据集介绍
本节将使用模拟生成的数据来进行测试,首先通过人为设定均值和标准差来随机生成三种正态分布随机数,并画图对三种类别的点进行观察,代码如下。

图6-4为将以上代码生成的随机数可视化的效果,五角星、菱形和方形分别是三种随机数的标识。

图6-4 生成的模拟数据测试样本学习过程
6.3.2 函数介绍
GMM算法理论并不复杂,核心参数是预设的分布个数。本小节将对GMM算法的函数进行介绍,具体如下。

6.3.3 学习过程
GMM算法的代码分为训练和预测两部分,其中最主要的是训练部分,分为E步和M步,本小节将该算法的主要过程抽取出来,形成以下代码,其中for循环部分是GMM的训练过程。

图6-5展示了参数迭代过程 (ϕ即本文中的Q)。 我们看到, 最后的参数计算结果与生成样本点所用的参数几乎一致。
图6-6展示了确定分类的参数γnk的最终结果(部分)。每个样本的类别归属概率相差大,类别划分明确。

图6-5 GMM参数迭代过程

图6-6 GMM聚类结果
6.3.4 样本聚类结果
图6-7是GMM训练结果的展示,横轴是训练样本的序号,纵轴是样本点数据值,因为构造数据时假定的正态分布均值不同,从图中也确实看到了明显的样本分层。五角星、菱形、方形分别代表三类样本,可以看到样本被较好地聚类为3类。

图6-7 聚类结果可视化