K-Means算法原理理解以及上手实例

K-Means聚类详解
本文详细介绍K-Means算法原理及其实现过程,包括质心计算、距离度量等核心步骤,并通过实例演示如何使用Python进行聚类分析及轮廓系数评估。

本文将大致梳理K-Means算法的流程, 并且使用python3实现kmeans算法对简单欧式空间数据集的聚类问题,以及结果评价算法—轮廓系数的实现,最后将提供本次实例的详细注释代码

1.算法原理:

K-means算法是最为经典的基于划分的聚类方法,是十大经典数据挖掘算法之一。K-means算法的基本思想是:以空间中k个点为中心进行聚类,对最靠近他们的对象归类。通过迭代的方法,逐次更新各聚类中心的值,直至得到最好的聚类结果。

选择K个不相同的点作为初始质心  
repeat  
    将每个点指派到最近的质心,形成K个簇  
    重新计算每个簇的质心  
until 簇不发生变化或达到最大迭代次数  

1.1.质心计算:

对于分类后的产生的k个簇,分别计算到簇内其他点距离均值最小的点作为质心(对于拥有坐标的簇可以计算每个簇坐标的均值作为质心)

1.2.距离度量:

将对象点分到距离聚类中心最近的那个簇中需要最近邻的度量策略,在欧式空间中采用的是欧式距离,在处理文档中采用的是余弦相似度函数,有时候也采用曼哈顿距离作为度量,不同的情况实用的度量公式是不同的。
欧式距离
余弦相似度
曼哈顿距离

1.3.聚类效果评价

轮廓系数(Silhouette Coefficient)结合了聚类的凝聚度(Cohesion)和分离度(Separation),用于评估聚类的效果。该值处于-1~1之间,值越大,表示聚类效果越好。具体计算方法如下:

  1. 对于每个样本点i,计算点i与其同一个簇内的所有其他元素距离的平均值,记作a(i),用于量化簇内的凝聚度。
  2. 选取i外的一个簇b,计算i与b中所有点的平均距离,遍历所有其他簇,找到最近的这个平均距离,记作b(i),即为i的邻居类,用于量化簇之间分离度。
  3. 对于样本点i,轮廓系数s(i) = (b(i) – a(i))/max{a(i),b(i)}
  4. 计算所有i的轮廓系数,求出平均值即为当前聚类的整体轮廓系数,度量数据聚类的紧密程度

从上面的公式,不难发现若s(i)小于0,说明i与其簇内元素的平均距离小于最近的其他簇,表示聚类效果不好。如果a(i)趋于0,或者b(i)足够大,即a(i)远远小于b(i),那么s(i)趋近与1,说明聚类效果比较好。


2.上手实例

下面将通过从准备数据到完成聚类并寻找最佳参数等一系列完整的步骤来讲解第一个算法实现的示例,最后我将提供此次示例的完整项目代码以及基于上一篇博客的VSM模型的计算结果来进行文档的聚类项目代码,本次示例使用语言为python3

2.1.准备数据

作为算法实现的测试数据,最好能够了解数据的分布情况,以便结合代码的运行结果来检测代码实现的正确与否。因此,我准备了一组基于欧式空间的坐标集数据,数据大致分布如下:

评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值