BSAS顺序聚类算法及Matlab代码实现
顺序算法(sequential algorithms)是一种非常简单的聚类算法,大多数都至少将所有特征向量使用一次或几次,最后的结果依赖于向量参与算法的顺序。这种聚类算法一般是不预先知道聚类数量k的,但有可能给出一个聚类数上界q。本文将主要介绍基本顺序算法(Basic Sequential Algorithmic Scheme,BSAS)和其几个变种,并给出代码实现。
首先看BSAS,这个算法方案需要用户定义参数:不相似性阈值θ和允许的最大聚类数q以及聚类顺序。算法的基本思想:由于要考虑每个新向量,根据向量到已有聚类的距离,将它分配到一个已有的聚类中,或者一个新生成的聚类中。
算法实例:
有10个模式样本点:{x1(0 0), x2(3 8), x3(2 2), x4(1 1), x5(5 3), x6(4 8), x7(6 3), x8(5 4), x9(6 4), x10(7 5)}
第一步:选任意一个模式样本作为第一个聚类中心,如z1 = x1
第二步:选距离z1最远的样本作为第二个聚类中心。
经计算,|| x6 - z1 ||最大,所以z2 = x6
第三步:逐个计算各模式样本{xi, i = 1,2,…,N}与{z1, z2}之间的距离,即
Di1= || xi - z1 ||
Di2= || xi – z2 ||
并选出其中的最小距离min(Di1, Di2),i = 1,2,…,N
第四步:在所有模式样本的最小值中选出最大距离,若该最大值达到||z1 - z2 ||的一定比例以上,则相应的样本点取为第三个聚类中心z3,即
若max{min(Di1, Di2), i = 1,2,…,N} >θ||z1 - z2 ||,则z3 = xi
否则,若找不到适合要求的样本作为新的聚类中心,则找聚类中心的过程结束。
这里,θ可用试探法取一固定分数,如1/2。
在此例中,当i=7时,符合上述条件,故z3 = x7
第五步: 若有z3存在,则计算max{min(Di1, Di2, Di3), i = 1,2,…,N}。若该值超过||z1 - z2 ||的一定比例,则存在z4,否则找聚类中心的过程结束。
在此例中,无z4满足条件。
第六步:将模式样本{xi, i = 1,2,…,N}按最近距离分到最近的聚类中心:
z1 = x1:{x1, x3, x4}为第一类
z2 = x6:{x2, x6}为第二类
z3 = x7:{x5, x7, x8, x9, x10}为第三类
最后,还可在每一类中计算个样本的均值,得到更具代表性的聚类中心。
该算法matlab实现的代码下载链接,注释很全~~下载链接