Kmeans算法详解及实现

今天我们介绍数据挖掘领域最基本的一个算法,Kmeans算法,并进行算法的讲解及实现。本文实现代码为最基础的实现方式,如果数据多维,例如用经典iris数据集时,可能会需要做数据预处理,比如归一化,并且修改代码相关函数即可。
摘要由CSDN通过智能技术生成

今天我们介绍数据挖掘领域最基本的一个算法,Kmeans算法,并进行算法的讲解及实现。

我们知道聚类问题属于经典问题,而对于聚类算法,也是有很多不同的种类,kmeans就是其中一种最基本的聚类算法。

它的主要算法流程是:


(1)随机的取k个点作为k个初始质心;

(2)计算其他点到这个k个质心的距离;

(3)如果某个点p离第n个质心的距离更近,则该点属于cluster n,并对其打标签,标注point p.label=n,其中n<=k;

(4)计算同一cluster中,也就是相同label的点向量的平均值,作为新的质心;

(5)迭代至所有质心都不变化为止,即算法结束。


当然实现的方法有很多,比如在选择初始质心时,可以随机选择k个,也可以随机选择k个离得最远的点等等,方法不尽相同。

对于k值,必须提前知道,这也是kmeans算法的一个缺点。当然对于k值,我们可有有很多种方法进行估计。本文中,我们采用平均直径法来进行k的估计。


也就是说,首先视所有点为一个大的整体cluster,计算所有点间距离的平均值作为该cluster的平均直径。选择初始质心的时候,先选择最远的两个点,接下来从这最两个点开始,与这最两个点距离都很远的点(远的程度为,该点到之前选择的最远的两个点的距离都大于整体cluster的平均直径)可视为新发现的质心,否则不视之为质心。


这样,我们就能估计出k的值,并且得到k个初始质心,接着,我们便根据上述算法流程继续进行迭代,直到所有质心都不变化,从而成功实现算法。


本文实现代码为最基础的实现方式,如果数据多维,可能会需要做数据预处理,比如归一化,并且修改代码相关函数即可。


下面附上代码,关键处已有注释,如有问题请留言:


附上一组测试数据,运行前请将数据copy至c:\\kmeans.txt

下面数据的意义为点坐标:


1,1
2,1
1,2
2,2
6,1
6,2
7,1
7,2
1,5
1,6
2,5
2,6
6,5
6,6
7,5
7,6


得到输出结果为:


There are 4 clusters!
1.0 1.0 belongs to cluster 1
2.0 1.0 belongs to cluster 1
1.0 2.0 belongs to cluster 1
2.0 2.0 belongs to cluster 1
6.0 1.

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值