一种面向高维数据的集成聚类算法
聚类集成已经成为机器学习的研究热点,它对原始数据集的多个聚类结果进行学习和集成,得到一个能较好地反映数据集内在结构的数据划分。很多学者的研究证明聚类集成能有效地提高聚类结果的准确性、鲁棒性和稳定性。本文提出了一种面向高维数据的聚类集成算法。该方法针对高维数据的特点,先用分层抽样的方法结合信息增益对每个特征簇选择合适数量比较重要的特征的生成新的具代表意义的数据子集,然后用基于链接的方法对数据子集上生成的聚类结果进行集成.最后在文本、图像、基因数据集上进行实验,结果表明,与集成前的K均值聚类算法及基于链接的聚类集成算法相比,该方法能有效的改善聚类结果。
关键词:分层抽样,高维数据,聚类集成,K均值聚类
1、引 言
聚类分析又称群分析,是根据“物以类聚”的道理对样品或指标进行分类的一种多元统计分析方法。它是一个将数据分到不同类或者簇的过程,所以同一个簇中的对象有很大的相似性,而不同簇间的对象有很大的相异性。聚类分析是机器学习、模式识别的一个最重要的研究方向之一,它是了解数据集的结构的一种最重要的手段,并已经成功的应用于数据挖掘、信息检索、语音识别、推荐系统等领域[2]。
现实世界中的数据集具有各种形状和结构,不存在哪一种单一的算法对任何数据集都表现的很好[3],没有一种聚类算法能准确揭示各种数据集所呈现出来的多种多样的形状和簇结构[4],每一种聚类算法都有其优缺点,对于任何给定的数据集,使用不同的算法都会有不同的结果,甚至对于同一种算法给定不同的参数都会有不同的聚类结果,自然分组概念内在的不明确性决定了没有一个通用的聚类算法能适用于任何数据集的聚类问题。此外,类存在多样性的特点,类具有不同的形状、大小、密度,而且类之间往往是相互重叠的,这样的问题在高维数据中更加明显,因为不相关的或者冗余的特征会使类的结构更加不明显。K均值算法[5]是一种应用广泛的最经典的聚类算法之一,它的特点之一就是随机选取初始的聚类中心,如果选取的中心点不同,聚类结果就可能产生很大的差异。K均值聚类算法对初始中心点的依赖性,导致K均值算法的聚类结果不稳定。在这种情况下,聚类集成应运而生,许多学者在这个领域进行了深入的研究。
聚类集成的目的在于结合不同聚类算法的结果得到比单个聚类算法更优的聚类。对聚类集体中的成员聚类的问题成为一致性函数问题,或叫做集成问题。很多学者证实通过聚类集成可以有效的提高像K均值聚类这些单一聚类算法的准确性、鲁棒性和稳定性 [6].在现有的研究中,产生基聚类结果的方法有:(1)使用同一种聚类算法,每次运行使用不同的参数和随机初始化[7];(2)使用不同的聚类算法,如K均值产生多个不同的聚类[4]; (3)对数据集的子集聚类,子集通过不同采样像bagging、Sub-sampling等方法获得[8];(4) 在数据集的不同特征子集或在数据集的不同子空间的投影上聚类得到不同聚类结果构成聚类集体[9]。我们的方法主要是对第四种聚类集成问题进行了深入研究,在数据集的不同子集上进行集成分析。对于高维数据来说,数据点为单位划分仍存在维数灾难的问题,维数灾难可能会引发这种现象,一个给定数据点与离它最近点的距离比与离它最远的数据点的距离近,所以我们引入同样的数据点但基于不同的特征子集就可能会避免这种问题。生成基聚类结果以后就是设计一致性函数对聚类结果集成,就是将聚类成员进行合并,得到一个统一的聚类结果。目前存在很多一致性函数,常用的有投票法、超图划分、基于共协矩阵的证据积累、概率积累等等,我们在文章中用了文献[1]中的方法,它是一种基于链接的方法。常规的集成方法往往基于一个由基聚类结果即这些数据基聚类结果内部的关系生成,忽略了这些结果之间的关系,所以Iam-on[10]等利用簇之间的相似度来精炼集成信息矩阵。在高维数据中,我们将数据集的局部特征子集用作聚类成员与基于链接的集成聚类方法有效结合,解决了高维数据进行集成聚类的问题。
本文组织如下:第2节对聚类集成做了一个概述,并针对于高维数据这一特殊数据集提出了自己的集成聚类方法。第3节是本文的核心部分,它讲述了对特征进行分层抽样,并基于信息增益抽取出比较重要的具有代表意义的局部特征子集的过程,此外对传统的K均值算法的具体过程进行了简要的描述,然后引出了分层抽样的概念,用分层抽样的思想确定我们选择的特征的数目,最后给出了信息增益的定义,通过这个指标最终确定我们在每一个聚类簇中选择的特征;最后把我们前面的工作抽取局部特征子集与基于链接的方法结合起来形成了自己的算法描述;第4节首先对8个实际数据集包括文本、图像、基因数据进行描述,然后在这八个数据集上比较和分析了我们的方法(SSLB)和传统K均值算法和基于链接的聚类集成算法(LB)在四个聚类评价标准上的聚类性能;第5节是对全文的总结。
2、相关工作
2.1 聚类集成概述
聚类分析是按照某种相似性测度将多维数据分割成自然分组或簇的过程。 聚类算法很多,但是没有一个万能的聚类算法能用于任何聚类问题,其原因在自然分组概念的内在不明确性以及类可以有不同的形状、大小、密度等,这个在高维数据中的问题更为明显,那些不相关的特征和冗余的特征会使类结构更加模糊。单个聚类存在的这些问题,引发了学者们对聚类集成的研究。首先由Strehl[12]等人提出”聚类集成”的概念,而后Gionis[13]等人也给出该问题的描述。杨草原等给聚类集成下了一个定义,认为聚类集成就是利用经过选择的多个聚类结果找到一个新的数据(或对象)划分,这个划分在最大程度上共享了所有输入的聚类结果对数据或对象集的聚类信息。
聚类集成的符号化形式为:假设数据集X有n个实例,X={x1,x2,…,xn},首先对数据集X使用M次聚类算法,得到M个聚类,={1,2,…,M}(下面称为聚类成员),其中i(i=1,2,…,M)为第i次聚类算法得到的聚类结果。然后用一致性函数T对的聚类结果进行集成得到一个新的数据划分’[1].
摘 要
Fig. 1: The basic process of cluster ensembles. Firstly, we obtain diverse partitions via different clustering, and then those Intermediate results are combined to establish the final result via the consensus function.
图1聚类集成的基本过程。首先对数据集使用不同的聚类算法得到不同的划分,然后对这些划分用一致性函数合并为一个聚类结果P’
由上面的聚类集成过程可知,对一个数据集进行聚类集成[11],主要有两个阶段,第一个阶段是基聚类器对原始数据进行聚类,得到基聚类结果。第二个阶段是基聚类结果集成,根据聚类集成算法对前一个阶段采集的基聚类结果进行处理,使之能够最大限度地分享这些结果,从而得到一个对原始数据最好的聚类集成结果。
2.2 面向高维数据的集成聚类
信息时代互联网成为最大的信息聚集地,像Web文档、交易数据、基因表达数据、用户评分数据等等,这些成为聚类分析的主要研究对象,而这些数据的维度成千上万,甚至更高,这给聚类分析带来了极大的挑战。高维数据的聚类集成面临更多的问题。
传统的集成学习的第一步是产生多个基聚类结果,这一阶段是对数据集或者其子集反复进行聚类算法。现有的方法主要有:使用一个聚类算法,每次运行设置不同的参数和随机初始化;使用不同的聚类算法;对数据集的子集进行聚类;将数据集的特征空间投影到数据子空间。基聚类结果生成以后就开始对基聚类结果进行集成。一致性函数是一个函数或者是一个方法,它将聚类成员进行集成,得到一个统一的聚类结果[14]。目前存在许多一致性函数,它大致可以分为: (1)基于成对相似性的方法[3],它主要考虑的是所有的数据点对的关系的重现、(2)基于超图划分的方法[15]和(3)基于特征的方法[16],它是把聚类的集成转换为类标的集成。
针对高维数据的特点,我们选择基于相似性的方法对聚类结果进行集成,凝聚层次聚类算法是最经典的基于相似性方法,我们用了文献[12]中的方法,他把SL凝聚聚类算法用来生成最终的划分。但是基于成对相似度的集成的过程都是一个比较粗糙的过程,集成的结果往往基于一个由基聚类结果即这些数据划分内部的关系生成,忽略了这些划分结果之间的关系,所以它使用了Iam-on[17]等利用簇之间的相似度来精炼集成信息矩阵,实验证明这种方法在很多数据集上表现很好,不仅增强了聚类稳定性也改善了聚类性能。由于我们研究的对象是高维数据,考虑到需要聚类的对象的维度很大,对完整的对象聚类一定会增加聚类算法的运行开销。这对基于链接的方法性能有所影响,因此,我们考虑对特征空间的局部特征子集进行聚类得到结果。经过上面的分析,我们引出自己的方法。我们对其中的基本步骤进行细化,我们的方法示意图如下:
Fig. 2 The basic process of our proposed method.it describe the steps in details, what’s more, this picture show the input and output in each step.
图2 我们方法的示意图,对聚类集成的过程进行了细化,描述了每一个过程的输入和输出
我们的方法就是针对高维数据的特点,对传统的聚类集成进行了一些改进,我们首先用前面提到的K均值算法对特征进行聚类,然后用信息增益来衡量不同簇中的特征的重要程度,而每个特征簇中的所抽取特征的数目nh由上面stratified sampling[18]的方法得到,最后利用信息增益选择top(nh)的特征。根据上述方法对特征进行降维,得到了最具代表的数据子集。数据子集的生成,变换K均值算法的k值,取 k=2,3…√N(N为数据点的数目)生成不同的具有差异的数据子集,然后沿用[1]中的方法进行聚类集成,最后把这√N-2次的聚类结果进行最后一次集成得到我们最终的聚类结果。基于局部特征子集的生成方法内容在下一章详细讲述。
看到这里,我想对于高维特征的样本的处理,就有了大概的思路,总结出来就是,首先针对特征进行聚类,而不是针对样本,这样的结果就是相似的特征最后被归为了一类特征,那么这也就达到了特征降维的目的。
接下来,再计算每个特征的信息增益,或是信息增益率,排序出前K大作为主要特征,这样进一步降维,又减小了数据处理量。这其中肯定会造成某种程度上的损失,不过速度却提高了很多,也避免了最大的困难!另外,用PCA,SVD,小波变换等降维技术,也是可以综合利用在这里的。具体效果如何,还需以后有条件做实验来进一步验证,根据实际的应用和业务了。
3、基于局部特征的数据子集生成方法
集成时使用哪种方法产生聚类成员一般从两个方面来考虑,一个是集成者的目的,一个是数据集的结构。在机器学习的实际应用中,我们面对的绝大多数都是高维数据。数据集的特征数量往往较多,可能存在不相关的特征,特征之间可能存在相互依赖,容易导致分析特征、训练模型的时间变长,甚至引发“维度灾难”,模型复杂推广能力下降。所以我们采用基于局部特征的数据子集生成方法。图3是我们生成局部特征的数据子集的示意图:
Fig. 3 The basic process of the generation of feature subset
图3 局部特征子集的生成方法
首先我们用传统的K均值算法对数据集的特征进行聚类,然后对于不同的特征簇我们用信息增益来衡量它的重要性,不同的特征簇中我们应该筛选多少特征簇呢?分层抽样很好的解决了这个问题,分层抽样的思想是计算每个实例之间的相关性(用标准差、方差来衡量),它认为类中的实例相关性比较大的可以选择较多的样本来代替当前类,类中相关性较小的就少选择一些实例来代替当前类的样本,根据分层抽样中计算出的特征簇的数目再利用信息增益这种衡量重要性的标准进行筛选后就得到了局部的特征子集。下面具体论述基于局部特征的数据子集生成方法中的关键技术。
3.1 k均值算法
K均值算法[5]是MacDueen提出的一个著名的聚类学习算法。它根据相似度距离迭代的更新向量集的聚类中心,当聚类中心不再变化或者满足某些停止条件,则停止迭代过程得到最终的聚类结果。K均值算法的具体步骤为:
(1) 随机选择k个数据项作为聚类中心;
(2) 根据相似度距离公式,将数据集中的每一项数据分配到离他最近的聚类中去;
(3) 计算新的聚类中心;
(4) 如果聚类中心没有发生改变,算法结束;否则跳转到第(2)步.
我们使用K均值算法对数据集的特征进行聚类,我们通过选取不同的k值进行特征聚类,然后用后面的分层抽样进行选择得到差异度比较明显的局部特征的数据子集作为后面的聚类集成的输入。
3.2 信息增益
对特征进行聚类后得到多个特征团,如何对它们进行特征选择,如何度量特征团中的特征的重要程度是我们面临的问题。信息增益是信息论中的一个重要概念,它被广泛应用在机器学习、数据挖掘领域,计算信息增益是针对一个特征项而言的,它通过统计某一个特征项t在类别C中出现与否的实例数来计算特征项t对类别C的信息增益,定义为[2]:
其中P(ci)表示ci类实例在数据集中出现的概率,p(t)表示数据集中包含特征项t的实例数,p(ci|t)表示实例包含特征项t时属于ci类的条件概率,p(t ̅ )表示数据集中不包含特征项t的实例数,p(c_i |t ̅ )表示实例不包含特征项t时属于ci类的概率,m为类别数。信息增益考虑特征与类别信息的相关程度,认为信息增益值越大,其贡献越大。我们的方法采用信息增益来度量特征簇中的特征的重要程度。
3.3 分层抽样(Stratified sampling)
在对特征进行聚类后对特征进行选择,我们采用信息增益来度量每个特征簇中的特征的重要程度。但是每个特征簇我们选择多少个特征比较合适,这是分层抽样解决的问题。抽样的目的是在不影响聚类效果的情况下在已经分好或者聚好类的实例中,从每个类中抽取部分的样本来代替整个类。Stratified sampling[18]方法遵循的原则是:计算每个实例之间的相关性(用标准差、方差来衡量),我们认为类中的实例相关性比较大的可以选择较小的样本来代替当前类,类中相关性较小的就多选择一些实例来代替当前类的样本。这个方法就是确定每个类中筛选的实例的数目。此方法中每个类的样本数目为:
其中nh是第h类应该抽取的实例数。n是预计抽取的总样本数,Nh是在总体样本中第h类的实例数,h是第h类的标准差。通过(1)式我们就可以得到每个类中应该选择的实例数目。提出这中抽样方法的学者还对它的精确度、置信区间进行了分析,证明了它在不影响学习效果的情况下对可以对数据降维,提高学习效率。
在本文的方法中,我们先用前面提到的k均值算法对特征进行聚类,然后用信息增益来衡量不同簇中的特征的重要程度,而每个特征簇中的所抽取特征的数目nh由上面stratified sampling的方法得到,最后利用信息增益选择top(nh)的特征。根据上述方法对特征进行降维,得到了最具代表的数据子集,进行后面的数据集的聚类集成。
4、实验结果与分析
4.1 实验数据集
本文选用了8个数据集,包括文献[1]中的两个数据集:一个人工数据集Four-Gaussian[19]和一个被用来做基因数据聚类的真实数据集Leukemia dataset[20],另外就是六个真实数据集包括两个文本数据集,两个图像数据集,两个基因数据。表1给出了这些数据集的名称以及数据的样本、属性、类别数量。
Table 1 Number of instance, features and classes of datasets
4.2 实验分析
实验中,本文对比了三种分类算法包括传统的k-means算法,文献[1]中的LB算法以及我们实现的算法SSLB。聚类性能通过下面四个评价指标来衡量,表2给出了这四个评价指标[1]的具体描述:
Table 2 Name of measures, formulas
K为聚类结果中簇的数目,nk是属于第k个簇的数据点数目,d(xi,xj)是数据点xi和xj的距离,N是数据集中数据点的总数。n11是指在两个划分’(正确的划分)和*中出现在相同簇中的数据线对的个数,n00是指在两个划分’、*中中出现在不同簇中的数据点对的个数,n01表示在划分*中属于不同簇在另一个划分’ 中属于同一个簇的数据点对数目,n10表示在划分’中属于不同簇在另一个划分*中属于同一个簇的数据点对数目。
其中CP衡量的是在同一个簇中,所有数据点的数据点对的平均距离,越小越好。CA衡量的是与已经的类标相比,聚类正确的数据点数目,CA的范围是从0到1,越大越好。RI这个指标衡量存在于相同和不同簇中的点对数目,RI的值从0到1,越大越好,AR也是越大越好。
本文对这8个数据集进行聚类集成,聚类成员由k均值对特征聚类然后分层抽样产生的局部特征子集获得,聚类中心的个数为数据集的类别数。为了增加实验的可靠性,所有的实验结果为10次结果的平均值。对比试验采用原始的K均值聚类算法、基于链接(LB)的方法,与我们实现的方法(SSLB)进行比较。在表3中,我们把关键值都突出的表现出来,在这8个数据集上,SSLB有在四个评价指标上都表现出比较大的优势。
根据表四,比较集成前的K均值算法、LB方法和SSLB方法,可以看出,在数据集Four-Gaussian上,SSLB在四种评价指标上都可以看出,其聚类性能明显优于集成前的K均值算法和LB聚类集成算法。在两种文本数据集Tr31和Tr41上,我们的方法优势不是很明显,但是在前两个指标CP和CA上还是明显好于集成前的K均值聚类,与LB算法在这两个指标上性能相当,而且在这两个文本数据上,在RI和AR上集成前的K均值算法与LB和SSLB方法相比都存在优势。在两个图像数据集上,SSLB方法在CP这个评价指标上都远远好于集成前的K均值聚类算法和LB算法,但是在第二个评价指标和第三个评价指标上就比LB算法差一点。在基因数据Colon上SSLB再第一个聚类评价指标上仍然存在很大的优势,在聚类的准确率上,我们的方法与LB方法相当,但是明显优于集成前的K均值算法。在基因数据TOX-171上,我们的方法获得了最好的聚类集成性能,在四个聚类评价指标上,都远远好于集成前的K均值算法和LB算法。
下面我们逐一在这四个聚类评价标准比较集成前的K均值算法、SSLB算法和LB算法。图四、图五、图六、以及图七分别描述了集成前的K均值聚类、LB以及我们的方法SSLB在CP、CA、RI、AR上的表现。
聚类评价指标CP衡量的是在同一个簇中,所有数据点的数据点对的平均距离,越小越好。通过图四可以看出,在所有数据集上,我们的算法SSLB都存在很大的优势,比集成前的K-means算法以及LB算法在CP这个指标上都好,此外还能看出CP在不同的数据集上的差异还是比较大的,在Four-Gaussian上明显比其他数据集上差。
聚类评价指标CA衡量的是与已知的类标相比,聚类正确的数据点数目占总的数据点数目的比例,CA的范围是从0到1,越大越好。从图五可以看出我们的算法在数据集Four-Gaussian、Tr41、Colon和TOX-171上的聚类精度比集成前的K均值算法以及LB算法都要好,但是在Tr31以及两个图像数据集上的优势不大,这这个现象值得我们关注,也是我们接下来会研究的工作。
聚类评价指标RI衡量的是存在于相同和不同簇中的点对数目,RI的值从0到1,越大越好。从图六可以看出我们的算法在人工数据集Four-Gaussian以及几个基因数据集上的表现比较突出、但是在其他数据集上就处于弱势,而且可以看出集成前的K均值算法在所有的数据集在RI上的表现都比较好。
聚类评价指标AR衡量的也是存在于相同和不同簇中的点对数目,AR的值从0到1,越大越好。从图七可以看出我们的算法SSLB在大多数数据集上存在着优势,但是在数据集Leukemia、Tr41、Colon上的超过了集成前的K均值算法和我们的算法。这些现象和结果都是我们接下来的研究的重点。
综上所述,在几乎所有数据集上,在所有的聚类评价指标上我们的聚类集成算法SSLB好于集成前K均值算法的聚类效果,而且在大多数数据集上,我们的算法比LB算法存在一定的优势,尤其是在基因数据上的表现较为突出。但是在有的数据集上优势也不够明显,我们要继续分析这些数据结构上的特点和我们的算法可能存在的问题,这也是我们接下来研究的方向。
5 结 论
本文提出了一种面向高维数据的集成聚类方法。针对高维数据的特点,对传统的聚类集成进行了一些改进,首先对特征聚类然后基于分层抽样抽取特征子集,抽取到最具代表性的特征子集后用基于链接的方法进行聚类集成。并在8个实际数据集包括文本、图像、基因数据上进行实验,在这8个数据集上分析和比较了我们的方法和集成前的K均值算法以及基于链接的聚类集成算法在四个评价标准上的聚类性能,能够看出我们的算法在聚类性能上有一定改善。