聚类算法 - K-Means、二分K-Means、K-Means 、K-Means||、Canopy、Mini Batch K-Means算法

K-Means 系列:K-Means,二分K-Means,K-Means++,K-Meansll,canopy算法,MiniBatchK-Means算法。

K-Means系列聚类算法原理: https://www.cnblogs.com/pinard/p/6164214.html

用scikit-learn学习K-Means聚类https://www.cnblogs.com/pinard/p/6169370.html

  • 一个是传统的K-Means算法,对应的类是KMeans。
  • 另一个是基于采样的Mini Batch K-Means算法

聚类算法 一句话概括:

  • K-means:(1)初始化K个类别中心,(2)用样本均值更新类别中心
  • 二分K-means:不断选择较大的簇,用k-means一分为二
  • K-means++:任选一个节点为第一个簇中心,然后依次选择距离已有簇较远的点为下一个簇中心。
  • Canopy:列表获取节点,根据大小圈,判断是否属于某一个簇,不属于就新建一个簇。
  • Mini-Batch-K-means:采样一部分样本用k-means进行聚类,然后不断批量添加新样本,对簇中心进行更新。

K-means 和KNN 的区别:

        k-means是聚类(无监督学习),先定好k个类别,然后随机确定k个坐标(聚类中心),各点离哪个坐标近就算做哪类,然后不停算平均值求出中心,直到稳定,聚类完成。有训练的过程。
        knn = k nearest neighbor是分类(监督学习),定好k直接把待分类点周边最近的k个点计数,数量多的那类定为待分类点的类别。Ref:https://blog.csdn.net/Saphon/article/details/98357271

一、传统K-Means算法

1. 步骤

2. 优缺点

二、K-Means算法衍生

1、二分k-means算法

  二分k-means算法是分层聚类(Hierarchical clustering)的一种,分层聚类是聚类分析中常用的方法。
分层聚类的策略一般有两种:

  • 聚合。这是一种自底向上的方法,每一个观察者初始化本身为一类,然后两两结合
  • 分裂。这是一种自顶向下的方法,所有观察者初始化为一类,然后递归地分裂它们

  二分k-means算法是分裂法的一种。

(1)优点:

    二分k-means算法是k-means算法的改进算法,解决K-Means算法对初始簇心比较敏感的问题,二分K-Means算法是一种弱化初始质心的一种算法,相比k-means算法,它有如下优点:

  • 二分k-means算法可以加速k-means算法的执行速度,因为它的相似度计算少了???
  • 能够克服k-means收敛于局部最小的缺点

(2)思路步骤:

  • 将所有样本数据作为一个簇放到一个队列中。
  • 从队列中选择一个簇进行K-means算法划分,划分为两个子簇,并将子簇添加到队列中。
  • 循环迭代第二步操作,直到中止条件达到(聚簇数量、最小平方误差、迭代次数等)。
  • 队列中的簇就是最终的分类簇集合。

从队列中选择划分聚簇的规则一般有两种方式;分别如下:

  • 对所有簇计算误差和SSE(SSE也可以认为是距离函数的一种变种),选择SSE最大的聚簇进行划分操作(优选这种策略)。
  • 选择样本数据量最多的簇进行划分操作:

  以上过程隐含着一个原则是:因为聚类的误差平方和能够衡量聚类性能,该值越小表示数据点越接近于它们的质心,聚类效果就越好。
所以我们就需要对误差平方和最大的簇进行再一次的划分,因为误差平方和越大,表示该簇聚类越不好,越有可能是多个簇被当成一个簇了,所以我们首先需要对这个簇进行划分。

(3) 二分k-means的源码分析

参考: [机器学习]二分k-means算法详解_二分k-means聚类算法_图解AI的博客-CSDN博客

           01 聚类算法 - 大纲 - 简书

2、K-Means++算法

解决K-Means算法对初始簇心比较敏感的问题,K-Means++算法和K-Means算法的区别主要在于初始的K个中心点的选择方面,K-Means算法使用随机给定的方式,K-Means++算法采用下列步骤给定K个初始质点:

1、从数据集中任选一个节点作为第一个聚类中心。
2、对数据集中的每个点x,计算x到所有已有聚类中心点的距离和D(X),基于D(X)采用线性概率选择出下一个聚类中心点(距离较远的一个点成为新增的一个聚类中心点)。
3、重复步骤2直到找到k个聚类中心点。

缺点:由于聚类中心点选择过程中的内在有序性,在扩展方面存在着性能方面的问题(第k个聚类中心点的选择依赖前k-1个聚类中心点的值)

另一种选择簇中心的方法:  https://www.cnblogs.com/pinard/p/6164214.html

       虽然k-means++算法可以确定地初始化聚类中心,但是从可扩展性来看,它存在一个缺点,那就是它内在的有序性特性:得到 k 个聚类中心必须遍历数据集 k 次,下一个中心点的选择依赖于已经选择的中心点。 针对这种缺陷,k-means||算法提供了解决方法。

3、K-Means||算法 ()

解决K-Means++算法缺点而产生的一种算法;主要思路是改变每次遍历时候的取样规则,并非按照K-Means++算法每次遍历只获取一个样本,而是每次获取K个样本,重复该取样操作O(logn)次(n是样本的个数),然后再将这些抽样出来的样本聚类出K个点,最后使用这K个点作为K-Means算法的初始聚簇中心点。实践证明:一般5次重复采用就可以保证一个比较好的聚簇中心点。

梳理步骤:

  • 1、在N个样本中抽K个样本,一共抽logn次,形成一个新的样本集,一共有Klogn个数据。
  • 2、在新数据集中使用K-Means算法,找到K个聚簇中心。
  • 3、把这K个聚簇中心放到最初的样本集中,作为初始聚簇中心。
  • 4、原数据集根据上述初始聚簇中心,再用K-Means算法计算出最终的聚簇。

4、Canopy算法

(1)步骤:Canopy算法属于一种“粗”聚类算法,执行速度较快,但精度较低,算法执行步骤如下:

  • 1、给定样本列表L=x1,x,2...,xm以及先验值r1和r2(r1>r2);(先验值 - 自己猜的,人为定义的值)
  • 2、从列表L中获取一个节点P,计算P到所有聚簇中心点的距离(如果不存在聚簇中心,那么此时点P形成一个新的聚簇),并选择出最小距离D(P,aj);
  • 3、如果距离D小于r1,表示该节点属于该聚簇,添加到该聚簇列表中。
  • 4、如果距离D小于r2,表示该节点不仅仅属于该聚簇,还表示和当前聚簇中心点非常近,所以将该聚簇的中心点设置为P,并将P从列表L中删除。
  • 5、如果距离D大于r1,那么节点P形成一个新的聚簇。
  • 6、直到列表L中的元素数据不再有变化或者元素数量为0的时候,结束循环操作。

   Canopy算法得到的最终结果的值,聚簇之间是可能存在重叠的,但是不会存在某个对象不属于任何聚簇的情况。

(2)Canopy算法常用应用场景:

由于K-Means算法存在初始聚簇中心点敏感的问题,常用使用Canopy+K-Means算法混合形式进行模型构建。
1、先使用canopy算法进行“粗”聚类得到K个聚类中心点。
2、K-Means算法使用Canopy算法得到的K个聚类中心点作为初始中心点,进行“细”聚类。

(3)优缺点:
1、执行速度快(先进行了一次聚簇中心点选择的预处理);
2、不需要给定K值,应用场景多。
3、能够缓解K-Means算法对于初始聚类中心点敏感的问题。

5、Mini Batch K-Means

Mini Batch K-Means算法是K-Means算法的一种优化变种,采用小规模的数据子集(每次训练使用的数据集是在训练算法的时候随机抽取的数据子集)减少计算时间,同时试图优化目标函数;Mini Batch K-Means算法可以减少K-Means算法的收敛时间,而且产生的结果效果只是略差于标准K-Means算法。

算法步骤如下:
1、首先抽取部分数据集,使用K-Means算法构建出K个聚簇点的模型。
2、继续抽取训练数据集中的部分数据集样本数据,并将其添加到模型中,分配给距离最近的聚簇中心点。
3、更新聚簇的中心点值。
4、循环迭代第二步和第三步操作,直到中心点稳定或者达到迭代次数,停止计算操作。

参考: 05 聚类算法 - 二分K-Means、K-Means++、K-Means||、Canopy、Mini Batch K-Means算法_weixin_33726318的博客-CSDN博客


 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值