简介
K-Means是一种常用的非监督式聚类算法,其中k代表聚类的类别数量,means代表均值。是基于划分的聚类算法,对象之间的相似度使用距离来衡量。
算法步骤:
1)选取k个数据作为初始聚类中心(可以随机选取也可以指定);
2)对其余数据计算与k个聚类中心的距离,并归类在距离最小的聚类中心所代表的类中;
3)重新计算每个类簇的中心,(计算每个类簇中对象的均值);
4)计算准则函数,重复2)、3)直到准则函数不再发生变化(收敛);
聚类数量k的选取
算法中聚类的数量需要人为指定,当k值较大时,聚类效果好,但是时间消耗快;当k值较小时,聚类结果单调。k值的大小也与数据量的大小有关系。《大数据》中提到:给定一个合适的类簇指标,比如平均半径或直径,只要我们假设的类簇的数目等于或者高于真实的类簇的数目时,该指标上升会很缓慢,而一旦试图得到少于真实数目的类簇时,该指标会急剧上升。(类簇的直径是指类簇内任意两点之间的最大距离。类簇的半径是指类簇内所有点到类簇中心距离的最大值)
确定聚类的数量通常有两种方式:
1、手肘法
核心指标为SSE(sum of squared errors,误差平方和),,Ci是第i个簇,p是Ci中的样本点,mi是Ci的质心(Ci中所有样本的均值),SSE是所有样本的聚类误差,代表了聚类效果的好坏。
核心思想为:随着聚类数量的增大,数据集被划分的更加精细,每个类簇的聚合程度会逐渐提高,那么误差平方和SSE就会逐渐变小。当k小于真实类簇的数目时,K值的增大会大幅增加每个簇的聚合程度,SSE的下降幅度会很大;当k值大于等于真实类簇数目时,增加k会使类的聚合程度回报迅速变小,则SSE的下降幅度减慢,最后随着k值的增大而逐渐趋于平缓;所以k值和SSE的关系图会有一个转折点,即为真实类簇的数目。
2、轮廓系数法
核心指标为轮廓系数(Silhouette Coefficient),,a是Xi与同簇的其他样本的平均距离,称为凝聚度,b是Xi与最近簇中所有样本的平均距离,称为分离度。最近簇的定义是
,p是某个簇Ck中的样本。事实上,简单点讲,就是用Xi到某个簇所有样本平均距离作为衡量该点到该簇的距离后,选择离Xi最近的一个簇作为最近簇。求出所有样本的轮廓系数后取平均值得到平均轮廓系数,其取值范围为【-1,1】,簇内样本的距离越近,簇间样本的距离越远,则轮廓系数越大,聚类效果越好。所以在选取中,要选择轮廓系数最大的k值作为聚类数量的初始值。
初始聚类中心的选取
在确定聚类数量之后,需要在数据集中选取k个初始的聚类中心。最简单的方法是随机选取,但是其聚类效果不够理想。还有以下两种方式可供使用:
1)选择彼此距离尽可能远的k个点:首先随机选择一个点作为第一个初始类簇中心点,然后选择距离该点最远的那个点作为第二个初始类簇中心点,然后再选择距离前两个点的最近距离最大的点作为第三个初始类簇的中心点,以此类推,直至选出K个初始类簇中心点。
2)先使用层次聚类或者canopy算法进行聚类,将得到的类簇中心作为初始类簇中心点:
相似性度量
该算法中数据对象之间的相似性通常采用距离进行度量,最常使用的是欧氏距离,也可以采用曼哈顿距离,巴氏距离等。
性能分析
优点:简单、高效;对处理大数据集,该算法相对可伸缩且高效率,它的复杂度大约为o(nkt),其中n为全部对象的数目,k是类簇的数目,t是迭代的次数,(k<<n),算法通常以局部最优结束;由于试图找出是平方误差函数值最小的k个划分。使用于密集的球状或团状簇,簇之间的差别特别明显时,聚类效果较好;
缺点:仅仅适用于簇的平均值被定义的情况,不适用于涉及分类属性的数据;需要实现确定类簇的数目k;对初值敏感,不同的初值会产生不同的聚类效果;不适用于发现非凸面形状或者大小区别非常大的类簇;对于噪声和孤立点数据敏感,少量的该类数据可以对平均值产生极大的影响。