带有成对约束半监督聚类算法C-DBSCAN的设计与实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2012年第·10
期
太原城市职业技术学院学报
Journal of TaiYuan Urban Vocational college期
总第135期
Oct2012
[摘要]DBSCAN是一种经典的基于密度聚类算法,能够自动确定簇的数量,对任意形状的簇都能有效处理。但是,在半监督聚类中有些是以成对约束信息作为先验信息来引导聚类过程,而传统的
DBSCAN算法并未充分利用这些信息。因此,论文在基于密度的聚类中使用成对约束,对DB-
SCAN算法进行改进并最终实现了C-DBSCAN算法。实验表明,该算法有效地提高了聚类的质量。
[关键词]DBSCAN;成对约束;C-DBSCAN;聚类
[中图分类号]F59[文献标识码]A[文章编号]1673-0046(2012)10-0175-03
带有成对约束半监督聚类算法C-DBSCAN的设计与实现
闫军
(太原旅游职业学院,山西太原030032)
一、概述
数据挖掘作为一种从大量数据中发现感兴趣信息
的技术,已经得到日益广泛的应用。而聚类是一种重要的数据挖掘技术,其任务是将数据集分成若干个簇。同一个簇中的数据具有较高的相似性,而不同簇中的数据之间的相似性较低。
目前已经存在的聚类算法大致可以分为四种类型:(1)基于划分的聚类算法。如k-means、k-medoids 等。这种算法需要设定簇的数量,根据对象间的相似性将每个对象划归最近的簇。这种算法能够发现超球状的簇。(2)层次聚类算法。层次聚类可以从两个方向产生,第一是凝聚,首先将所有对象标记为簇,然后逐次合并距离最小的簇;第二是分裂,先将整个数据集视为一个簇,然后逐次分裂样本较多的簇。层次聚类需要人为设定终止条件,即凝聚或分裂到何种程度为止。根据簇相似性的不同定义,层次聚类算法有Ward方法、BIRCH 和CURE等。(3)基于统计模型的算法。如期望最大化(EM)算法。这类算法基于数理统计理论,假定数据集是由一个统计过程产生的,并通过找出最佳拟合模型来描述数据集。(4)基于密度的算法。其中心思想是寻找数据集中被低密度区域隔开的高密度区域,并将每个独立的高密度区域作为一类。根据对密度的不同定义,典型算法有DBSCAN、OPTICS、DENCLULDE等。
基于密度的聚类方法以数据集在空间分布上的稠密程度为依据进行聚类,无需预先设定簇的数量,因而特别适合于对未知内容的数据集进行聚类。DBSCAN是一种经典的基于密度聚类算法,它以超球状区域内数据对象的数量来衡量此区域密度的高低。DBSCAN算法能够发现任意形状的簇,并有效识别离群点,但聚类之前需要人工选择邻域半径Eps和类内最小数据对象个数MinPts这两个参数。
基于密度的算法,例如DBSCAN算法得到结果仅仅是局部最佳的,因此在Carlos等人的研究中,提出了在基于密度的聚类中使用成对约束,对DBSCAN算法进行改进并最终提出了C-DBSCAN算法,即对DB-SCAN聚类算法的一种带约束的改进。并且,该算法为了将成对约束引入聚类过程中,还使用KD-Tree将数据划分为最小单位的叶子结点。
本文的组织结构如下:第两部分介绍DBSCAN算法、成对约束和KD-Tree的相关内容;第三部分详细描述算法;第四部分通过实验验证算法的有效性;最后是全文的小结。
二、相关工作
1.DBSCAN算法
DBSCAN算法是一种经典的基于密度的聚类算法,该算法计算每个数据对象的Eps领域,通过把密度可达的数据对象聚成一个类簇来得到聚类结果。DBSCAN可以自动确定类簇的个数,发现任意形状的类簇,且对噪声数据不敏感。DBSCAN中的定义如下:
定义1(数据对象p的邻域):数据对象的邻域定义为以为核心,为半径的维超球体区域内包含的点的集合,即,其中,为维空间上的数据集,表示中点和之间的距离。
定义2(核心数据对象):给定和,对于数据对象,如果邻域内包含的对象个数满足,则称为核心数据对象。
定义3(直接密度可达):给定和,对于数据对象,如果满足且这两个条件,则称从关于直接密度可达的。直接密度可达不满足对称性。
定义4(密度可达):给定和,对于数据对象,如果有一个数据对象序列,其中,并且是从直接密度可达的,则称从关于密度可达的。密度可达也不满足对称性。
定义5(密度相连):给定和,对于数据对象,如果存在一个数据对象使得和都是从密度可达的,则称和关于密度相连的。密度相连满足对称性。
当给定和时,DBSCAN算法的简要流程如下:选择任一未划分的数据对象,判断其是否为核心数据对象,
175
··
若是,寻找所有与其密度可达的数据对象,将这些数据对象标记为一类;若不是,则进行噪声数据对象判断,若是噪声,则对其进行标记,若不是噪声,则不对该对象处理,如此重复直至所有的数据对象都被划分。
2.成对约束
半监督聚类中一般以成对约束信息作为先验信息来引导聚类过程,而成对约束信息包含must-link和cannot-link两种(简记为ML和CL),分别表示两个点必须属于同一类的和必须是不同类的,这些信息能提高聚类效果。其中,must-link约束规定:如果两个样本属于该类约束,那么这两个样本在聚类时必须被分配到同一个聚类中;cannot-link约束则相应地规定:如果两个样本属于该类约束,那么这两个样本在聚类时必须被分配到不同聚类中。而约束信息的质量是有差异的,约束并不是越多越好,应该用尽量少的约束来得到尽量好的聚类结果。
3.KD-Tree
KD-Tree是一种对k维空间中的实例点进行存储以便对其进行快速检索的树形数据结构。KD-Tree是二叉树,表示对k维空间的一个划分。构造KD-Tree相当于不断地用垂直于坐标轴的超平面将k维空间切分,构成一系列的k维超矩形区域。KD-Tree的每个结点对应于一个k维超矩形区域。
构造KD-Tree的方法如下:构造根结点,使根结点对应于k维空间中包含所有实例点的超矩形区域;通过下面的递归方法,不断地对k维空间进行切分,生成子结点。在超矩形区域(结点)上选择一个坐标轴和在此坐标轴上的一个切分点,确定一个超平面,这个超平面通过选定的切分点并垂直于选定的坐标轴,将当前超矩形区域切分为左右两个子区域(子结点);这时,实例被分到两个子区域。这个过程直到子区域内没有实例时终止(终止时的结点为叶结点)。在此过程中,将实例保存在相应的结点上。
三、带约束半监督聚类算法C-DBSCAN
1.算法中的相关定义
局部聚类:遍历由KD-Tree得到的每一个叶子结点,在每一个叶子结点内部,所有密度可达的点被聚为一类。当遍历结束后会得到很多聚类,需要强调的是,这样得到的每一个聚类中包含的点都是同一个叶子结点中的数据点,这里用“局部聚类”来表示这些初步的聚类结果。
聚类:每一对M ust-Link约束都涉及到两个数据点,对于每一对M ust-Link约束,找到包含这两个点的类,并将这两个类合并为一类,这里用“聚类”来表示合并后的聚类结果。
2.改进后的C-DBSCAN算法步骤
第一步,在KD-Tree的帮助下,将原数据空间划分为一些子空间,每个子空间都是KD-Tree的一个叶子结点,而且每一个叶子结点都将包含至少MinPts个数据点。
第二步,分别考虑每一个叶子结点中的数据点,在满足Cannot-Link约束的情况下建立初始的局部聚类。
第三步,在M ust-Link的指导下,合并上一步得到的局部聚类得到聚类。
第四步,在满足Cannot-Link约束的情况下,将距离聚类最近的局部聚类合并到该聚类中,直到局部聚类的个数不再变化为止。
此时得到的聚类和仍旧留下的局部聚类就是最后得到的聚类结果。
3.改进后的C-DBSCAN算法详细描述
输入:数据集D,M ust-Link约束集,Cannot-Link约束集,邻域半径Eps,类内最小对象个数MinPts;
输出:满足ML和CL的聚类结果。
Begin
Step1:用KD-Tree对数据集D进行划分;
Step2:在构造得到的KDTree上建立局部聚类
For(每一个叶子结点and每一个未标记点)do
if()then
将点标记为噪音点
elseif(在中存在满足CL约束的点对)then
点以及中的每一个点都单独成为一个局部聚类
else
将点标记为核心点
所有中的点成为一个局部聚类
end
end
Step3a:利用M L约束合并聚类结果
For(约束集ML中的每一对约束)do
点和是一对满足约束条件的点
找到聚类和使得以及
将和合并为,并将合并后的类标记为聚类
end
Step3b:建立最后的聚类结果
While(局部聚类的数目减少)do
For(每一个局部聚类C)do
聚类为从聚类密度可达的所有聚类中距离聚类最近的聚类
if(聚类和中的点不存在满足CL约束的点对)then 将聚类合并入聚类中,
end
end
end
将每一个聚类以及仍旧剩余的局部聚类作为返回值返回
End
4.C-DBSCAN
算法举例
(b)数据集中的成对约束
(实线为M L,虚线为CL)(a)数据集
176··