本发明涉及一种聚类方法,具体地,涉及一种结合类内紧致性和类间分离性的增量模糊聚类方法,属于数据挖掘领域。
背景技术:
聚类算法将相似度高的数据对象划分为一个簇,将相异度高的数据对象划分为不同的簇。迄今为止,针对聚类算法的研究成果丰硕,根据数据对象在聚类中的积聚规则不同,这些算法可划分为硬聚类和模糊聚类。在硬聚类中,每个数据对象只能完全隶属于某一个簇;而模糊聚类则要求每个数据对象以不同的概率隶属于多个簇。相比较而言,两类算法各有所长,硬聚类算法简单高效,而模糊聚类算法更符合人们对客观世界的认知。
无论是硬聚类还是模糊聚类,大部分聚类算法只考虑类内紧致性,而忽略类间分离性,因此fcs(fuzzycompactnessandseparation)算法被提出。fcs算法保证了类内紧致性最小的同时,类间分离性最大,且具有硬聚类和模糊聚类的特性,能够有效提升聚类精度与聚类效率。
然而fcs算法无法有效处理大规模数据与流数据,因此,本发明提出一种新的结合类内紧致性和类间分离性的增量方法。该方法通过将数据分为连续的数据块,并按顺序进行处理,使本发明可以处理大规模数据和数据流。
技术实现要素:
为了解决现有技术中存在的问题,本发明提出一种结合类内紧致性和类间分离性的增量模糊聚类方法,该方法包括以下步骤:
(1)将整个数据集分成d块,并为每块数据中的每个数据点分配权重1;
(2)对数据块进行聚类处理;
(3)对每个数据块循环执行步骤(2),直到所有数据块处理完毕,获取每一数据块的聚类结果[ui1,ui2,...,uit,...,uic]和聚类质心[ai1,ai2,...,ait,...,aic],其中0<t≤c,uic表示第i个数据块的第c类,aic表示第i个数据块的第c个质心;为每一个质心ait赋予权重值wt,wt为整个数据块中的数据点隶属于聚类uit的隶属度之和;若最后一个数据块小于聚类个数c,则不进行聚类,将所有数据点作为质心,其权重全部为1。
(4)将上述赋过权重的质心作为一个新的数据块d,对新数据块d进行步骤(2)操作,得到聚类结果[u1,u2,...,ut,...,uc]和质心[a1,a2,...,at,...,ac],此质心为最终质心,每个质心原来所在类中的所有数据点都属于它现在所在的类。
更具体地,上述步骤(2)中的聚类步骤具体如下:
1)初始化β、最大误差值ε、最大迭代次数τmax和隶属度矩阵ucj,将η赋值为0到1的随机数,定义τ=1;
2)根据ηc,ucj和
3)根据ηc,ac和
4)根据β,ac和
5)更新τ=τ+1;
6)如果max(|ucj(τ)-ucj(τ-1)|)≤ε或τ=τmax,结束迭代,否则返回步骤2)。
其中c是类的个数,n是数据个数,ηc为控制第c个质心与其它质心所在类不重合的参数,ucj是第j个数据点对第c个类的隶属度,约束条件为
为了能够处理大规模数据和数据流,提出了本发明,该方法不但可以明显提高处理速度,而且不会影响聚类的精确度。与现有方法相比,本发明新提出的方法可以更快更精确的处理大规模数据和数据流。
具体实施方式
为了使用单通道增量方法,需要对fcs算法进行加权。首先,定义加权的类内矩阵sifw和类间矩阵sifb,
根据sifw与sifb,得到增量fcs算法的目标函数
根据约束条件,对jifcs(u,v,a)运用拉格朗日乘子法,构造如下新的目标函数,可求得使jifcs(u,v,a)达到最小值的必要条件
对j(u,v,a)中u求偏导并让其等于0,得
同样的,对j(u,v,a)中a求偏导并让其等于0,得
该方法包括以下步骤:
(1)将整个数据集分成d块,并为每块数据中的每个数据点分配权重1;
(2)对数据块进行聚类处理;
(3)对每个数据块循环执行步骤(2),直到所有数据块处理完毕,获取每一数据块的聚类结果[ui1,ui2,...,uit,...,uic]和聚类质心[ai1,ai2,...,ait,...,aic],其中0<t≤c,uic表示第i个数据块的第c类,aic表示第i个数据块的第c个质心;为每一个质心ait赋予权重值wt,wt为整个数据块中的数据点隶属于聚类uit的隶属度之和;若最后一个数据块小于聚类个数c,则不进行聚类,将所有数据点作为质心,其权重全部为1。
(4)将上述赋过权重的质心作为一个新的数据块d,对新数据块d进行步骤(2)操作,得到聚类结果[u1,u2,...,ut,...,uc]和质心[a1,a2,...,at,...,ac],此质心为最终质心,每个质心原来所在类中的所有数据点都属于它现在所在的类。
步骤(2)中聚类的具体步骤如下:
1)初始化β、最大误差值ε、最大迭代次数τmax和隶属度矩阵ucj,将η赋值为0到1的随机数,定义τ=1;
2)根据ηc,ucj和
3)根据ηc,ac和
4)根据β,ac和
5)更新τ=τ+1;
6)如果max(|ucj(τ)-ucj(τ-1)|)≤ε或τ=τmax,结束迭代,否则返回步骤2)。
以statlogsegmentation数据集为例,该数据集具有2310个数据点,19个属性,划分成7个类。对该数据集进行聚类方法如下:
将该数据集分成10块,每块具有231个数据点,对每个数据点分配权重1;对每个数据块分别进行聚类处理,总共得到70个类和其对应的70个质心,每个质心分配的权重为该类数据点隶属度之和;将这70个质心作为70个类的代表,当做一个新的数据块进行聚类处理,最终得到7个类和质心即为聚类结果。
该方法将数据集进行分块处理,减少了数据量即聚类迭代次数,因此提升了聚类效率,且经实验可得,本方法的f-measure值比传统的ofcm方法和ohfcm方法分别提升了15.4%和42.9%。