学习笔记——Canopy + K-means的聚类算法

聚类和分类

聚类

聚类算法是将一系列文档聚团成多个子集或簇,聚类的结果是要求簇内的文档之间要尽可能相似,而簇间的文档要尽可能不相似。
聚类是无监督学习的一种最普遍的形式,无监督意味着不存在对文档进行类别标注。

分类

分类是监督学习的一种形式,其目标是对人类赋予数据的类别差异进行学习或复制。
而在以聚类为代表的无监督学习中,并没有这样的人来对类别的差异进行引导。

K-means算法

K-均值算法是最重要的扁平聚类算法,它的目标是最小化文档到其簇中心的欧氏距离平方的平均值。

步骤

1、随机选取k个初始质心
2、计算所有点离质心的距离,将每个点划分到最近的质心中成为聚类
3、计算每个聚类的平均值,并作为新的质心
4、重复2-3,直到这k个质心不再变化(收敛了),或执行了足够多的迭代

示例

声明:以下标号并不是顺序标号,而是对应上文的步骤标号,这样方理解。

首先我选定了这6个点作为示范

学习笔记——Canopy + K-means的聚类算法_第1张图片

他们在坐标上的分布如下图

学习笔记——Canopy + K-means的聚类算法_第2张图片

1、选取P1、P2作为初始质心(当然其他的也可以)

学习笔记——Canopy + K-means的聚类算法_第3张图片
学习笔记——Canopy + K-means的聚类算法_第4张图片

2、算出每个点距离初始质心的距离,选择离他最近的初始质心成为一个类

学习笔记——Canopy + K-means的聚类算法_第5张图片
学习笔记——Canopy + K-means的聚类算法_第6张图片

一类:P1
二类:P2、P3、P4、P5、P6
3、重新计算新的质心(这个质心可以是虚拟的,意思就是不是之前存在的点)
红色标记为新的质心

学习笔记——Canopy + K-means的聚类算法_第7张图片
学习笔记——Canopy + K-means的聚类算法_第8张图片

我们可以看到新的质心中P1还是之前存在的点,而点A是新生成的质心,并不是之前存在的点!!
一类:P1
二类:P2、P3、P4、P5、P6

质心还在变化,所以要继续进行2、3步骤

2、算出每个点距离质心距离,选择距离比较近的质心组成一个类

学习笔记——Canopy + K-means的聚类算法_第9张图片
学习笔记——Canopy + K-means的聚类算法_第10张图片

一类:P1、P2、P3
二类:P3、P4、P5
3、重新计算簇中的质心

学习笔记——Canopy + K-means的聚类算法_第11张图片
学习笔记——Canopy + K-means的聚类算法_第12张图片

质心还在变化,所以要继续进行2、3步骤

2、算出每个点距离质心距离,选择距离比较近的质心组成一个类

学习笔记——Canopy + K-means的聚类算法_第13张图片
学习笔记——Canopy + K-means的聚类算法_第14张图片

3、重新计算簇中的质心

学习笔记——Canopy + K-means的聚类算法_第15张图片
学习笔记——Canopy + K-means的聚类算法_第16张图片

4、这K个质心不再变化,聚类结束

问题

1、K如何制定?

手肘法、Canopy算法、与层次聚类结合、稳定性方法、系统演化方法...

2、初始质心如何选择?

随机的选取初始中心、使用层次聚类技术、Canopy算法

以下具体讲解Canopy算法,其他方法请参考参考文献[1]

Canopy算法

什么是Canopy算法?

与传统的聚类算法(比如K-means)不同,Canopy聚类最大的特点是不需要事先指定k值(即clustering的个数),因此具有很大的实际应用价值。与其他聚类算法相比,Canopy聚类虽然精度较低,但其在速度上有很大优势,因此可以使用Canopy聚类先对数据进行“粗”聚类,得到k值,以及大致的K个初始质心,再使用K-means进行进一步“细”聚类。所以Canopy+K-means这种形式聚类算法聚类效果良好。

步骤

我们假设每个数据用小圆点来表示。在计算机中用 List 集合存储。 Canopy 算法首先选择两个距离阈值:T1 和 T2,其中 T1 > T2
(1)原始状态下的数据还没有分类,所以从集合中取出一点 P,将 P 作为第一个类, 我们也将这个类称为 Canopy。

学习笔记——Canopy + K-means的聚类算法_第17张图片

(2)继续从集合中取点,比如R,计算R到已经产生的所有Canopy的距离,如果到某个Canopy的距离小于T1,则将R加入到该Canopy;如果R到所有Canopy中心的距离都大于T1,则将R作为一个新Canopy,如下图中的Q就是一个新的Canopy。

学习笔记——Canopy + K-means的聚类算法_第18张图片

(3)如果P到该Canopy距离小于T2,则表示P和该Canopy已经足够近,此时将P从从集合中删除,避免重复加入到其他Canopy。
(4)对集合中的点继续执行上述操作直到集合为空,算法结束,聚类完成。

以上内容搬运来源水印(参考文献[2])

以下为我个人对此算法的看法:

个人拙见,如有错误还请不吝赐教。

在我对这个算法进行学习的过程时,通过查阅资料我没有找到关于T1、T2的确定方法,所以在这方面我个人存有疑问,所以我个人采用的是如下方法:

(1)首先我们确定一个T(取值方法下面会给出)。
(2)原始状态下的数据还没有分类,所以从集合中取出一点P,将P作为第一个类,我们也将类称为Canopy。
(3)继续从集合中取点,比如R,计算R到已经产生的所有Canopy的距离,如果到某个Canopy的距离小于T,则把该点从列表中删除;如果R到所有Canopy中心的距离都大于T,则将R从列表中取出作为一个新Canopy。
(4)对集合中的点继续执行上述操作直到集合为空,算法结束,聚类完成。

在我的方法中我仅仅使用了一个T,这个T的作用相当于上文方法中的T2,因为上文所说的方法中T1并没有起到什么作用。尽管如果有的点到质心的距离小于T1,那这个点不会从列表中删除。而循环终止的条件为列表中元素为空,所以我只用了一个T,如果距离小于T则直接把这个点划分为这个类中,把这个点从列表中删除。如果这个点大于T,则直接把这个点从列表中取出来当做质心创建一个新的类。

T的取值

学习笔记——Canopy + K-means的聚类算法_第19张图片

以这三个点为例:

对点P1

d(P1-P2)=2
d(P1-P3)=1.414213   
平均值(ave1)= 1.7071065

对点P2

d(P2-P1)=2
d(P2-P3)=1.414213
平均值(ave2)= 1.7071065

对点P3

d(P3-P1)= 1.414213
d(P3-P2)= 1.414213
平均值(ave3)= 1.414213

所以T=(ave1+ave2+ave3)/3 = 1.6094753333

思路小结

学习笔记——Canopy + K-means的聚类算法_第20张图片

参考文献

[1]从零开始实现Kmeans聚类算法:https://blog.csdn.net/u013719780/article/details/78413770
[2]Canopy聚类算法过程:https://blog.csdn.net/u011514201/article/details/53510069
[3]划分方法聚类(三) Canopy+K-MEANS 算法解析:https://blog.csdn.net/wojiaosusu/article/details/57072499
[4]Mahout之聚类Canopy分析:https://blog.csdn.net/yclzh0522/article/details/6839643

你可能感兴趣的:(机器学习,机器学习,Canopy,K均值,K-means)