一、K-means算法
K-means算法是最基础和最常用聚类算法。其相关概念有:
K值:希望得到的簇的个数。
质心:即簇的中心值,是每个簇的均值向量,向量各维取平均即可。
距离量度:常用欧几里得距离和余弦相似度,但在计算之前,先要将各维数据标准化。
(一)距离的计算
在聚类算法的距离计算中,不得不提到范数这一数学概念,在很多机器学习相关的著作和教材中,我们也经常看到各式各样的距离及范数,如,,其中,分别表示向量和矩阵。
为方便统一,一般将任意向量的范数定义为:
由上式可知,则范数的定义为:,它表示向量中的非0元素的个数。在诸多机器学习模型中,比如压缩感知(Compressive sensing),就是希望最小化向量的范数。
同理,范数的定义为:,由式中可以看出,范数等于向量中所有元素的绝对值之和。范数的优点是容易求解,借助现有凸优化算法(线性规划或是非线性规划),就能够找到我们想要的可行解。
以上两种距离计算方法是聚类算法中最为常用的,此外还有一些距离计算法,适合于某种特定应用场景的计算。比如余弦相似度
,其计算公式为:。余弦相似度主要应用于文本分析。其它还包括闵氏距离(),切比雪夫距离()等。

(二)算法流程
(1)首先确定一个k值,即我们希望将数据集经过聚类得到集合。
(2)从数据集中随机选择k个数据点作为质心。
(3)对数据集中每一个点,计算其与每一个质心的距离(如欧式距离),离哪个质心近,就划分到那个质心所属的集合。
(4)把所有数据归好集合后,一共有k个集合。然后重新计算每个集合的质心,计算均值,即向量各维取平均。
(5)如果新计算出来的质心和原来的质心之间的距离小于某一个设置的阈值(表示重新计算的质心的位置变化不大,趋于稳定,或者说收敛),我们可以认为聚类已经达到期望的结果,算法终止。
(6)如果新质心和原质心距离变化很大,需要迭代(3)~(5)步骤。
(三)几个聚类算法中的数学公式
(1)质心的计算。如果用数据表达式表示,假设簇划分为(),设是的均值向量,也称为质心,表达式为:
(2)误差平方和(SSE,The Sum of Squares due to Error),是指簇内每一个点与其质心的距离平方和,体现的是质心位置的合适程度。其表达式为:
设想这样一个问题,如果分簇不合理时,其簇内各点与其质心的距离平方和肯定大于合理分簇的距离平方和(示意图如下图2-2-4)。设、为当时的质心,为当时的质心,显然分为两簇更符合样本形态。不难推断,值越大,SSE越小,但也不是越小越好,因为如设每一点为一簇,则SSE为零,那么如此分簇将毫无意义。所以,误差平方和这一参数一般考察的是样本分为几簇更为合理,即的取值问题。至于SSE与值之间的映射关系,将在下一节结合用例详细说明。
图2-2-4 SSE示意图
![]() | ![]() |
(3)轮廓系数(Silhouette Coefficient)。是结合了聚类的凝聚度(Cohesion)和分离度(Separation)的一个参数,用于评估聚类的效果。其表达式为:
这里是指样本到同一簇内其他点不相似程度的平均值,是指样本到其他簇的平均不相似程度的最小值。其示意图如图2-2-5。
图2-2-5 轮廓系数示意图

轮廓系数的取值范围为,其值越大越好。其目的是使内部距离最小化,外部距离最大化。