原文链接1
原文链接2

前言

作为无监督聚类算法中的代表——K均值(K-means)聚类(clustering)算法,该算法的主要作用是将相似的样本自动回归到一个类别中。所谓的无监督算法,就是输入样本没有对应输出或标签。聚类(clustering)试图将数据集中的样本划分为若干个通常是不相交的子集,每个子集成为一个簇(cluster),聚类既能作为一个单独过程,用于寻找数据内在的分布结构,也可作为分类等其他学习任务的前去过程——《Machine Learning》。


聚类算法也许是机器学习中“新算法”出现最多最快的领域,一个重要的原因在于聚类不存在客观标准,给定数据集总能从某个角度找到以往算法未覆盖的某种标准从而设计出新算法。Kmeans算法十分简单易懂而且非常有效,但是合理的确定K值和K个初始类簇中心点对于聚类效果的好坏有很大的影响。众多的论文基于此都提出了各自行之有效的解决方案,新的改进算法仍然不断被提出,此类文章大家可以在Web Of Science中搜索。
尽管Kmeans算法在Matlab、Python等语言的工具箱函数中都有自带的函数可以调用,但作为机器学习的研究者来说要设计出新的算法,有时候得定制自己的Kmeans函数。

Kmeans算法的原理与理解

Kmeans算法是最常用的聚类算法,主要思想是:在给定K值和K个初始类簇 中心点的情况下,把每个点(亦即数据记录)分离到离其最近的类簇中心点所代表的类簇中,所有点分配完毕后,根据一个类簇内的所有点重新计算该类簇的中心点(取平均值),然后再迭代的进行分配点和更新类簇中心点的步骤,直至类簇中心点的变化很小或者达到指定的迭代次数。

基本原理

假定给定数据样本§ K均值聚类(K-means) - 图1,包含了§ K均值聚类(K-means) - 图2个对象§ K均值聚类(K-means) - 图3,其中每个对象都具有§ K均值聚类(K-means) - 图4个维度的属性。Kmeans算法的目标是将n个对象依据对象间的相似性聚集到指定的k个类簇中,每个对象属于且仅属于一个其到类簇中心距离最小的类簇中。对于Kmeans,首先需要初始化k个聚类中心§ K均值聚类(K-means) - 图5,然后通过计算每一个对象到每一个聚类中心的欧氏距离,如下所示:
§ K均值聚类(K-means) - 图6
上式中,§ K均值聚类(K-means) - 图7表示第i个对象§ K均值聚类(K-means) - 图8表示第j个聚类中心的§ K均值聚类(K-means) - 图9表示第i个对象的第t个属性,§ K均值聚类(K-means) - 图10表示第j个聚类中心的第t个属性。
依次比较每一个对象到每一个聚类中心的距离,将对象分配到距离最近的聚类中心的类簇中,得到k个类簇§ K均值聚类(K-means) - 图11
Kmeans算法用中心定义了类簇的原型,类簇中心就是类簇内所有对象在各个维度的均值,其计算公式如下
§ K均值聚类(K-means) - 图12
式中,§ K均值聚类(K-means) - 图13表示第§ K均值聚类(K-means) - 图14个聚类的中心,§ K均值聚类(K-means) - 图15表示第§ K均值聚类(K-means) - 图16个类簇中对象的个数,§ K均值聚类(K-means) - 图17表示第§ K均值聚类(K-means) - 图18个类簇中第§ K均值聚类(K-means) - 图19个对象,§ K均值聚类(K-means) - 图20

算法流程

输入:样本集§ K均值聚类(K-means) - 图21,聚类簇数k。
过程:
1:从D中随机选择k个样本作为初始均值向量§ K均值聚类(K-means) - 图22
2:repeat
3:令§ K均值聚类(K-means) - 图23
4:for j=1,2,…,m do
5:计算样本§ K均值聚类(K-means) - 图24与各均值向量§ K均值聚类(K-means) - 图25的距离:§ K均值聚类(K-means) - 图26;
6:根据距离最近的均值向量确定§ K均值聚类(K-means) - 图27的簇标记:§ K均值聚类(K-means) - 图28;
7:将样本§ K均值聚类(K-means) - 图29划入相应的簇:§ K均值聚类(K-means) - 图30
8:end for
9:for i=1,2,…,k do
10:计算新均值向量:§ K均值聚类(K-means) - 图31;
11:§ K均值聚类(K-means) - 图32
12:将当前均值向量为§ K均值聚类(K-means) - 图33更新为§ K均值聚类(K-means) - 图34
13:else
14:保持当前均值不变
15:end if
16: end for
17:until 当前均值向量未更新
输出:簇划分§ K均值聚类(K-means) - 图35