K-mean clustering(K均值聚类算法)

 

一、聚类与分类的区别

分类:类别已知,通过对已知分类的数据进行训练和学习,找到这些不同类的特征,再对未分类的数据进行分类。是有监督学习。

聚类:事先不知道数据会分为几类,通过聚类分析将数据聚合成几个群体。聚类不需要对数据进行训练和学习。属于无监督学习。

 

二、k-means 聚类(物以类聚,人以群分)

1、首先输入 k 的值,即我们指定希望通过聚类得到 k 个分组;

2、从数据集中随机选取 k 个数据点作为初始大佬(质心);

3、对集合中每一个小弟,计算与每一个大佬的距离,离哪个大佬距离近,就跟定哪个大佬。

4、这时每一个大佬手下都聚集了一票小弟,这时候召开选举大会,每一群选出新的大佬(即通过算法选出新的质心)。

5、如果新大佬和老大佬之间的距离小于某一个设置的阈值(表示重新计算的质心的位置变化不大,趋于稳定,或者说收敛),可以认为我们进行的聚类已经达到期望的结果,算法终止。

6、如果新大佬和老大佬距离变化很大,需要迭代3~5步骤。
 

三、举例

有6个点,从图上看应该可以分成两堆。现在我手工地把 k-means 计算过程演示一下,同时检验是不是和预期一致: 

1.设定 k 值为2

2.选择初始大佬(就选 P1 和 P2)

3.计算小弟与大佬的距离:

从上图可以看出,所有的小弟都离 P2 更近,所以次站队的结果是:

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

4.召开选举大会:

A 组没什么可选的,大佬就是自己 
B 组有5个人,需要重新选大佬,这里要注意选大佬的方法是每个人 X 坐标的平均值和 Y 坐标的平均值组成的新的点,为新大佬,也就是说这个大佬是“虚拟的”。因此,B 组选出新大哥的坐标为:P 哥((1+3+8+9+10)/5,(2+1+8+10+7)/5)=(6.2,5.6)。 
综合两组,新大哥为 P1(0,0),P哥(6.2,5.6),而P2-P6重新成为小弟。

5.再次计算小弟到大佬的距离: 

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

A 组:P1、P2、P3 
B 组:P4、P5、P6(虚拟大哥这时候消失)

6.第二届选举大会: 
同样的方法选出新的虚拟大佬:P哥1(1.33,1),P哥2(9,8.33),P1-P6都成为小弟。

7.第三次计算小弟到大佬的距离: 

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

我们可以发现,这次站队的结果和上次没有任何变化了,说明已经收敛,聚类结束,聚类结果和我们最开始设想的结果完全一致。

 

四、详解

k-means算法以数据间的距离作为数据对象相似性度量的标准,因此选择计算数据间距离的计算方式对最后的聚类效果有显著的影响,常用计算距离的方式有:余弦距离、欧式距离、曼哈顿距离等。本文以欧式距离为例。

欧式距离公式:

举例:若数据为2维:

其计算欧式距离如下(可理解为D表示维度,i,j表示行数):

  通过上述公式可计算出每对数据对象间的距离,根据距离的远近进行聚类成指定的类别数K。

对每一类中的数据初步选取类心,取的方式有多种如:

    1.该类所有数据的均值;

    2.随机取k个数据作为类心;

    3.选取距离最远的k个点作为类心等。

以上方法均需要对初步的类心进行迭代,当类心变化缓慢时便可认为收敛,此时该点便为最终的类型。本文以方法1为例:

表示第k类,表示第k类中数据对象的个数。类心迭代过程如下:

通常迭代终止的条件有两种:1)达到指定的迭代次数T;2)类心不再发生明显的变化,即收敛。

 

五、缺点:

  • 聚类中心的个数K 需要事先给定,但在实际中这个 K 值的选定是非常难以估计的,很多时候,事先并不知道给定的数据集应该分成多少个类别才最合适
  • Kmeans需要人为地确定初始聚类中心,不同的初始聚类中心可能导致完全不同的聚类结果。(可以使用Kmeans++算法来解决)

针对上述第2个缺陷,可以使用Kmeans++算法来解决。

 

 

 

参考文章地址:

https://blog.csdn.net/huangfei711/article/details/78480078

https://blog.csdn.net/hanxia159357/article/details/81530361

Kmeans++算法地址:https://blog.csdn.net/zll0927/article/details/17000675


 

  • 20
    点赞
  • 64
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值