
5.3 实例分析
本节将使用MATLAB自带的鸢尾花Iris数据集,对鸢尾花种类进行聚类,根据鸢尾花的特征变量来预测鸢尾花属于哪一类品种。
5.3.1 数据集介绍
鸢尾花Iris数据集共150个样本,每个样本即为一朵花。数据集包含4个特征变量,分别对应花萼长度、花萼宽度、花瓣长度和花瓣宽度,1个类变量对应鸢尾花的三个亚属,分别是山鸢尾(Iris-setosa)、变色鸢尾(Iris-versicolor)和弗吉尼亚鸢尾(Iris-virginica),每类鸢尾花各50个样本。
本小节将根据鸢尾花的4个特征变量对其进行聚类分析,预测鸢尾花卉属于哪一品种。图5-1 截取了鸢尾花数据集的部分数据,数据中前面4列为特征变量,第5列为待分类的属性值,最后一列指出了鸢尾花属于哪一类。

图5-1 鸢尾花(Iris)数据集示例
5.3.2 函数介绍
根据5.1.2小节介绍的K-Means算法流程,我们可以把整个算法切分为多个函数。下面将对主函数进行介绍,具体如下(其他函数会在本章最后给出代码)。

函数的输入值中m是训练模型的数据,由于是非监督学习,所以无须指定样本标签,K是把数据分为几类,isRand是指选择初始中心点时是否随机选择样本点为初始中心点,若isRand的值不为0(默认值),随机选择。若isRand的值为0,则选择前k个样本点作为初始中心点。
输出参数中xy是训练的结果, 是一个矩阵, 每行代表一个样本, 最后一列是各样本的归类情况, 前面若干列是原数据。 c是最后得到的各类的中心点, 每行是一个中心点。 loss是模型的损失函数值, record_c是元胞数组, 记录了每次迭代时的中心点, 数组的长度为k, 每个元素是一个矩阵, 每行是每次迭代时中心点。
5.3.3 K的选择
为了确定k的值,把k从1取到20来分别训练模型,所计算的损失函数随k的变化如图5-2 所示。

图5-2 手肘法中k的选择
其中,折线表示损失函数,五角星为k取3时损失函数上的点,观察可知,该点就是肘点。当然,在选用的这个数据中,本案例已经事先知道了样本总共分为3类。
5.3.4 训练结果分析
为了将聚类结果可视化,本小节选取了样本的前两个属性绘图,如图5-3所示。

图5-3 聚类中心的移动过程
其中,横坐标是属性一,纵坐标是属性二。图中正方形、星型、菱形分别代表每一类样本,轨迹密集处的点是每一类的中心收敛点,黑色的线是各中心点在每次迭代时的运动轨迹。从图中也可以看出,刚开始迭代时中心点的移动幅度大,随着迭代次数的增加,移动幅度递减,直至收敛。由于本图只选取了样本的前两个特征,所以图中不同类之间的点会有交叉。
分类结果的输出量xy随机显示了其中的5行,如图5-4所示。最后得到的各类中心点c,每行是一个中心点,如图5-5所示。

图5-4 随机选择5个分类结果展示

图5-5 分类中心
记录中心点运动轨迹的record_c如图5-6所示。 三个矩阵代表了三类中心点的运动情况,第1、 2类的矩阵有7行, 说明这两类的中心点运动了7次, 第3类的矩阵有8行, 说明该类的中心点运动了8次, 可以从图5-3的中心点运动轨迹中看出。
元胞数组的第一个元素如图5-7所示。每一个行都是中心点坐标,行顺次往下代表了中心点修正的轨迹。

图5-6 分类中心的移动记录

图5-7 分类中心的移动记录