美文网首页
聚类算法 - kmeans

聚类算法 - kmeans

作者: dora_yip | 来源:发表于2021-02-26 00:06 被阅读0次

    一、定义

    kmeans即k均值算法。k均值聚类是最著名的划分聚类算法,由于简洁和效率使得他成为所有聚类算法中最广泛使用的。给定一个数据点集合和需要的聚类数目k,k由用户指定,k均值算法根据某个距离函数反复把数据分入k个聚类中。

    二、算法过程

    简易动画过程在这,传送门
    第一步,输入k的值,即我们希望将数据集经过聚类得到k类,分为k组
    第二步,从数据集中随机选择k个数据点作为初识的聚类中心(质心,Centroid)
    第三步,对集合中每一个数据点,计算与每一个聚类中心的距离,离哪个中心距离近,就标记为哪个中心。待分配完全时,就有第一次分类。
    第四步,每一个分类根据现有的数据重新计算,并重新选取每个分类的中心(质心)
    第五至N步,重复第三至四步,直至符合条件结束迭代步骤。条件是如果新中心和旧中心之间的距离小于某一个设置的阈值(表示重新计算的质心的位置变化不大,趋于稳定,或者说收敛),可以认为我们进行的聚类已经达到期望的结果,终止迭代过程。

    该算法的核心就是选择合适的k值,不同的k值出来有不同的结果。

    三、如何选择合适的K值?

    1、手肘法

    手肘法的核心指标是SSE(sum of the squared errors,误差平方和),

    image

    其中,Ci是第i个簇,p是Ci中的样本点,mi是Ci的质心(Ci中所有样本的均值),SSE是所有样本的聚类误差,代表了聚类效果的好坏。

    手肘法的核心思想是:随着聚类数k的增大,样本划分会更加精细,每个簇的聚合程度会逐渐提高,那么误差平方和SSE自然会逐渐变小。并且,当k小于真实聚类数时,由于k的增大会大幅增加每个簇的聚合程度,故SSE的下降幅度会很大,而当k到达真实聚类数时,再增加k所得到的聚合程度回报会迅速变小,所以SSE的下降幅度会骤减,然后随着k值的继续增大而趋于平缓,也就是说SSE和k的关系图是一个手肘的形状,而这个肘部对应的k值就是数据的真实聚类数。当然,这也是该方法被称为手肘法的原因。


    image.png

    2、轮廓系数法

    该方法的核心指标是轮廓系数(Silhouette Coefficient),某个样本点Xi的轮廓系数定义如下:

    S=(b-a)/max(a,b)

    其中,a是Xi与同簇的其他样本的平均距离,称为凝聚度,b是Xi与最近簇中所有样本的平均距离,称为分离度。而最近簇的定义是


    image

    其中p是某个簇Ck中的样本。事实上,简单点讲,就是用Xi到某个簇所有样本平均距离作为衡量该点到该簇的距离后,选择离Xi最近的一个簇作为最近簇。

    求出所有样本的轮廓系数后再求平均值就得到了平均轮廓系数。平均轮廓系数的取值范围为[-1,1],且簇内样本的距离越近,簇间样本距离越远,平均轮廓系数越大,聚类效果越好。那么,很自然地,平均轮廓系数最大的k便是最佳聚类数。

    四、优缺点

    1、优点

    (1)容易理解,聚类效果不错,虽然是局部最优, 但往往局部最优就够了
    (2)处理大数据集的时候,该算法可以保证较好的伸缩性
    (3)当簇近似高斯分布的时候,效果非常不错
    (4)算法复杂度低

    2、缺点

    (1)K 值需要人为设定,不同 K 值得到的结果不一样
    (2)对初始的簇中心敏感,不同选取方式会得到不同结果
    (3)对异常值敏感
    (4)样本只能归为一类,不适合多分类任务
    (5)不适合太离散的分类、样本类别不平衡的分类、非凸形状的分类

    相关文章

      网友评论

          本文标题:聚类算法 - kmeans

          本文链接:https://www.haomeiwen.com/subject/vcmrfltx.html