专栏名称: 数学人生
欢迎关注数学人生。这里为大家提供江湖八卦,数学秘籍,科研经验,留学总结,转行咨询等各类信息。————读完博士之后,有人问我当年读博士期间一个人夜晚从办公室回宿舍的心情,我想起的不是孤单和路长,而是波澜壮阔的大海和天空闪耀的星光。
目录
相关文章推荐
超级数学建模  ·  能转弯的方形轮子,你见过吗? ·  昨天  
小学数学  ·  奥数课堂:溶液中添加溶质或溶剂 ·  3 天前  
超级数学建模  ·  限时领 | ... ·  6 天前  
超级数学建模  ·  给孩子的地理第一课,就用它了 ·  1 周前  
51好读  ›  专栏  ›  数学人生

聚类算法(二)

数学人生  · 公众号  · 数学  · 2017-05-17 10:27

正文

聚类是一种无监督学习(无监督学习是指事先并不知道要寻找的内容,没有固定的目标变量)的算法,它将相似的一批对象划归到一个簇,簇里面的对象越相似,聚类的效果越好。聚类的目标是在保持簇数目不变的情况下提高簇的质量。给定一个 m 个对象的集合。把这 m 个对象划分到 K 个区域,每个对象只属于一个区域。所遵守的一般准则是:同一个簇的对象尽可能的相互接近或者相关,而不同簇的对象尽可能的区分开。之前在文章聚类算法(一)中已经介绍过 KMeans 算法与 bisecting KMeans 算法,本文将会介绍一个流式的聚类算法。

流式聚类算法(One Pass Cluster Algorithm)

既然是流式的聚类算法,那么每个数据只能够进行一次聚类的操作。有一个简单的思路就是对于每一个未知的新样本,如果它与某个类足够相似,那么就把这个未知的新样本加入这个类;否则就自成为一个新的类。如下图所示:

基于以上思路,我们可以设计一个流式的聚类算法。假设 dataMat 是一个 m 行 n 列的一个矩阵,每一行代表一个向量,n 代表向量的维度。i.e. 在 n 维欧几里德空间里面有 m 个点需要进行聚类。

流式聚类的算法细节:

参数的设定:

 表示在聚类的过程中允许形成的簇的最大个数;

 表示距离的阀值,在这里两个点之间的距离可以使用  范数;

聚簇的质心定义为该类中所有点的平均值。i.e. 如果该类中的点是 ,那么质心就是 

第 j 个聚簇中元素个数用  表示。

方法:

Step 1:对于  而言,自成一类。i.e. 质心就是它本身 ,该聚簇的元素个数就是 ,当前所有簇的个数是 

Step 2:  对于每一个 ,进行如下的循环操作:

假设当前有  个簇,第 j 个簇的质心是 ,第 j 个簇的元素个数是 ,其中 

计算 ,其中的 Distance 可以是欧几里德空间的  范数,对应的下标是 。i.e. 

(i)如果当前  或者 ,则把  加入到第  个聚簇。也就是说:

质心更新为  +  + 

元素的个数更新为  + 

(ii)否则, 需要自成一类。i.e.  + 

注:

(1)数据的先后顺序对聚类的效果有一定的影响。

(2)该算法的时间复杂度与簇的个数是相关的,通常来说,如果形成的簇越多,对于一个新的样本与质心的比较次数就会越多。

(3)如果设置簇的最大个数是一个比较小的数字的时候,那么对于一个新的样本,它需要比较的次数就会大量减少。如果最小距离小于 D 或者目前已经达到最大簇的个数的话,那么把新的样本放入某个类。此时,可能会出现某个类由于这个新的样本导致质心偏移的情况。如果设置  很大,那么计算的时间复杂度就会增加。因此,在保证计算实时性的时候,需要考虑到  的设置问题。

效果展示:

使用一批二维数据集合,进行流式聚类算法可以得到下图:’+’ 表示的是质心的位置,其余就是数据点的位置。通过选择不同的距离阈值 ,就可以得到不同的聚类情况。其中 ‘+’ 表示该簇质心的位置,蓝色的点表示数据点。如下图所示:



相关文章推荐:

1. 聚类算法(一)


欢迎大家关注公众账号数学人生

(长按图片,识别二维码即可添加关注)