机器学习K-Means

05 聚类算法 - 二分K-Means、K-Means++、K-

2018-12-07  本文已影响120人  白尔摩斯

03 聚类算法 - K-means聚类
04 聚类算法 - 代码案例一 - K-means聚类

三、K-Means算法衍生

1、二分K-Means算法

解决K-Means算法对初始簇心比较敏感的问题,二分K-Means算法是一种弱化初始质心的一种算法,具体思路步骤如下

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

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

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

公式 几何意义

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个聚类中心点的值)

几何意义

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算法

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的时候,结束循环操作。

分析步骤

注意上图中修改一个地方:
本质上,列表中离得近的元素都删了。如果节点P生成了一个新的中心节点,也应该被删除掉。因为这些点已经变成了聚簇中心。


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

几何意义

Canopy算法过程图形说明:

Canopy图形说明

Canopy算法常用应用场景:

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

优点:
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、循环迭代第二步和第三步操作,直到中心点稳定或者达到迭代次数,停止计算操作。

06 聚类算法 - 代码案例二 - K-Means算法和Mini Batch K-Means算法比较

上一篇下一篇

猜你喜欢

热点阅读