本篇我们将探讨的是非监督式学习的K-means聚类法


在聚类分析中,K-均值聚类算法(K-means algorithm)是无监督分类中的一种基本方法,其也称为C-均值算法,其基本思想是:通过迭代的方法,逐次更新各聚类中心的值,直至得到最好的聚类结果。


K-means算法的基础是最小误差平方和准则。其代价函数是:



表示第i个簇的质心,我们希望得到的聚类模型代价函数最小,直观的来说,各簇内的样本越相似,其与该簇质心的误差平方越小。越小表示数据点越接近于它们的质心,聚类效果也越好。



越小表示数据点越接近于它们的质心,聚类效果也越好。如下图




每一堆点到五角星的簇心的距离加总即代表J,显而易见越小表示数据点越接近于它们的质心,聚类效果也越好。



K-means聚类法步骤


先大概浏览以下公式:


(1)给定大小为n的数据集,令I=1,选取k个初始聚类中心



(2)计算每个数据对象与聚类中心的距离如果满足




  


(3)计算k个新的聚类中心:即取聚类中所有元素各自维度的算术平均数;



(4)判断:若  




,返回(2);否则算法结束。



好嘞,枯燥的公式暂时看到这里,先来看一个网友很有意思的例子!


这6个点,分成几类?怎么分?



第一步:若k=2,选P1和P2为簇心(任选2点即可),计算其他点到P1和P2的距离。如下:




组A:P1

组B:P2、P3、P4、P5、P6

B组需选个大哥出来:P哥((1+3+8+9+10)/5,(2+1+8+10+7)/5)=(6.2,5.6)。


第二步:计算其他点到P1和P哥的距离。如下:




这时可以看到P2、P3离P1更近,P4、P5、P6离P哥更近,所以第二次站队的结果是:

组A:P1、P2、P3

组B:P4、P5、P6(虚拟大哥这时候消失


第三步:按照前面的方法选出两个新的虚拟大哥:P哥1(1.33,1) P哥2(9,8.33),计算这6个点到P哥1、 P哥2的距离





这时可以看到P1、P2、P3离P哥1更近,P4、P5、P6离P哥2更近,所以第三次站队的结果还是与第二次站队一样,聚类结束。


是不是觉得超级简单明了?!没错,Python自己在里面也是如此搞滴!



这是Python的结果,同样明显p1p2p3聚成一类,p4p5p6聚成一类。如果将k=2改成k=3,则哪些点是聚在一起,有兴趣的可以玩一下。


如何将K-means聚类运用在文本上?详情请见今天发出的第一篇文章(附详细步骤及Python代码)。


如需下载本文的例子的Python代码,请关注“博易数据”(微信号:boyidata)公众号并发送“py K-means1”获取。