基于DBSCAN聚类算法的研究与实现
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
随机访问 ,这样 ,单元格的编号就是索引指针数组的下标 。
具体算法为 :
while (1) {
/ / 找出连通分支
for (long i = 0 ;i < subUnitsCount ;i + + )
{
if (pUnitsFlag[ i ] = = 0) break ;
} / / 找出未被访问的点
if (i = = subUnitsCount) break ; / / 所有的连通分支都已经找到
Abstract :As an analyzing method of clustering algorithm in data mining ,DBSCAN finds relatively dense regions ,which are clusters. This paper analyses localization of the traditional clustering algorithm , discusses an implementation of DBSCAN. The algorithm digs out high dimension space and deals with data form. The high accuracy and efficiency of DBSCAN clustering algorithm are shown in the experiments.
收稿日期 :2003 - 10 - 27 ;修订日期 :2003 - 12 - 22 基金项目 :国家 973 计划资助项目 ( G1998030409) 作者简介 :荣秋生 (1973 - ) ,男 ,湖南常德人 ,讲师 ,硕士 ,主要研究方向 :数据挖掘 、网络管理 ; 颜君彪 (1963 - ) ,男 ,湖南常德人 ,副教授 ,主 要研究方向 :中间件 、网络管理 ; 郭国强 (1964 - ) ,男 ,湖南常德人 ,教授 ,主要研究方向 :网络服务质量 、多媒体网络.
本文中提出的 DBSCAN 算法 (Density based spatial clustering of applications with noise ,基于高密度的聚类算法) ,利用类的高 密度连通性可以快速发现任意形状的类 。
1 传统的聚类算法及其局限性
聚类分析可作为数据挖掘算法中其它分析算法的一个预 处理步骤 。目前 ,已经提出的聚类算法有很多[2~4] 。
确定子空间的算法为 : (假定数据字段是经过排序的) (1) 令 k = 1 ,遍历目标数据库 , 找出所有的一维的密集 单元格 (dense units) ,令所组成的集合为 : D1 ; (2) 利用下面的方法 ,由 k 维的密集单元格集合 Dk 生成 k + 1 维的候选密集单元格集合 Ck+1 ; (3) 如果 Ck+1 为空 , 转 (4) ; 否则 , 再遍历目标数据库 , 计 算候选单元格中的选择率 (selectivity) ,并将非密集单元格去 掉 ,记为集合 Dk+1 ,然后 k = k + 1 并转 (2) ; (4) 算法结束 。得到包含聚类维数最高的子空间 。 该算法首先模拟 SQL 语句中的联结操作 ,要求对于描述 某一子空间中的某一单元格的结构进行查找 ,最后将我们不 再需要的单元格描述结构所占用的空间回收 。 假设存在密集单元格的最高维子空间的维数为 t ,设数据 库中记录的总数为 m , 那么一共将访问 t 次数据库 , 且对于 t 维子空间中的单元格 , 那么这 t 个维度中子集上的投影也就 产生了 ,一共有 2 t 个单元格 。综合起来 , 这一步的时间复杂度 为 O ( ct + mt) ,其中 c 为常数 。这样的时间复杂性在面对高维 的数据对象时 ,效率仍不能让人接受 。我们需要限制每一步产 生的密集单元格的个数 , 也就是说将密集单元格的个数减小 之后 ,再生成更高维的候选密集单元格 。 具体做法是 :首先将各个子空间进行排序 ,排序的依据是 该子空间中所有密集单元格中所包含点的总数 ,再将包含点 的个数多的子空间予以保留 ,少的去掉 。这样做之后可以减 少很大的计算量 。 3. 2 确定子空间中的聚类 我们将处在同一个子空间中的密集单元格集合 D 中的 单元格看成是图的顶点 ,并且如果两个单元格相邻 ,它们之间 就有一条边 。然后就可采用常见的深度优先搜索或者广度优 先搜索 ,即可找出图的连通分支 。采用图的矩阵表示方法 ,先 给输入链表中的每一个单元格编号 ,并建立一个索引以便于
Key words :data mining ;clustering ;high density ; Grid ;DBSCAN
随着数据挖掘研究领域技术的发展 ,作为数据挖掘主要 方法之一的聚类算法 ,也越来越受到人们的关注 。数据挖掘 (Data Mining) [1] ,也称知识发现 ( KDD) ,是从数据库中便捷地 抽取出以前未知的 、隐含的 、有用的信息 ,所挖掘出来的知识 可应用于信息管理 、决策支持 、过程控制和其它许多应用 。
计算机应用2004两种分类法召回率曲线通过使用改进的支持向量机与向量空间模型的权值累加法对网页进行专业分类在分类精确率和召回率上都优于使用迭代的支持向量机的多类分类方法同时由于该方法只需计算二类svm比使用迭代的svm多类分类法减少了计算量提高了分类效率能够很好地满足大量的专业网站的web知识发现的需求
(rongqs @sina. com) 摘 要 :高密度聚类作为数据挖掘中聚类算法的一种分析方法 ,它能找到样本比较密集的部分 , 并且概括出样本相对比较集中的类 。文中分析了传统的聚类算法及局限性 ,讨论了一个基于高密度 聚类算法的实现过程 ,使得算法可自动发现高维子空间 ,处理高维数据表格 ,得到较快的聚类速度和 最佳的聚类效果 。 关键词 :数据挖掘 ;聚类 ;高密度 ;网格 ;DBSCAN 中图分类号 : TP311 文献标识码 :A
pUnitsFlag[ i - 1 ] ; pStack[ 0 ] = i ;
/ / 广度优先
Low = 0 ; High = 1 ;
while (Low ! = High)
{
i = pStack[Low] ;
for (k = 0 ;k < subUnitsCount ;k + + )
{ If (pConnectMatrix[ i 3 subUnitsCount + k ] = = 1
Research and Implementation of Clustering Algorithm Based on DBSCAN
RONG Qiu2sheng , YAN J un2biao , GUO Guo2qiang
(Department of Computer Science and Technology , Hunan University of Arts and Sciences , Changde Hunan 415000 ,China)
的假设 ,处理大数据集和高维数据集时不够有效 ;另一方面它 能发现的聚类个数常常依赖于用户参数的指定 ,而这对用户 来说是很困难的 。
2 DBSCAN 聚类算法
2. 1 基本思想 所谓聚类 ,就是把大量的 d 维数据样本 ( n 个) 聚集成 k
个类 ( k , n) ,使同一类中样本的相似性最大 , 而不同类中样本 的相似性最小 。从这个角度出发 ,就可以设计一个密度函数 , 计算出每个样本附近的密度 ,从而根据每个样本附近的密度 值来找出那些样本相对比较集中的区域 ,这些区域就是我们 要找的类 。
分裂法 :给定一个有 N 个元组或者记录的数据集 ,构造 K 个分组 ,每一个分组代表一个聚类 ( K < N) 。对于给定的 K, 可以给出一个初始的分组方法 ,以后通过反复迭代来改变分 组 ,使得每一次改进之后的分组方案都较前一次好 。
层次法 :对给定的数据集进行层次似的分解 ,直到某种条 件满足为止 。初始时每一个数据纪录都组成一个单独的组 , 在接下来的迭代中 ,把那些相互邻近的组合并成一个组 ,直到 所有的记录组成一个分组或者某个条件满足为止 。
DBSCAN 算法利用类的高密度连通性 ,快速发现任意形 状的类 。其基本思想是 :对于一个类中的每个对象 ,在其给定 半径的领域中包含的对象不能少于某一给定的最小数目 。
DBSCAN 为了发现一个类 ,先从数据库对象集 D 中找到 任意一对象 P ,并查找 D 中关于 R 和 Pmin 的从 P 密度可达的 所有对象 (其中 R 为半径 , Pmin 为最小对象数) 。如果 P 是核 心对象 ,也就是说 ,半径为 R 的 P 的领域中包含的对象不少于 Pmin , 则根据算法 ,可以找到一个关于参数 R 和 Pmin 的类 。如 果 P 是一个边界点 ,则半径为 R 的 P 领域包含的对象数小于 Pmin ,即没有对象从 P 密度可达 , P 被暂时标注为噪声点 , 然 后 ,DBSCAN 处理 D 中的下一个对象 。
基于网格的方法 :首先将数据空间划分成为有限个单元 (cell) 的网格结构 ,所有的处理都是以单个的单元为对象的 , 从而使得处理速度加快 。
基于模型的方法 :给每一个聚类假定一个模型 ,然后去寻 找能够很好的满足这个模型的数据集 。这个模型可能是数据
点在空间中的密度分布函数 ,它由一系列的概率分布决定 。 上述这些算法的缺点在于对样本数据的分布进行了一定
3 算法具体实现
3. 1 确定包含聚类的子空间 如果把所有的子空间都列举出来 ,然后计算每一个单元
格中包含的点数目 。这对高维数据库对象是不可行的 。 先假定一个记录集 S 是 k 维空间中的一个聚类 , 那么对
于任何一个 k - 1 维子空间 ,将记录集 S 投影过去之后 ,仍然 组成一个聚类 。
/ / 分配结构 / / 记录点
pCluster - > unitsCount = High ; / / 将新产生的 cluster 链到空间 pOneSubspace 末尾
put-in-cluster (pOneSubspace ,pCluster) ;
}
3. 3 聚类的描述 对于聚类的描述较难 ,所以采用一个启发性原理 :寻求局
&& pUnitsFlag[ k ] = = 0
{
pStack[ High ] = k ; pUnitsFlag[ k ] = 1 ;
/ / 设置已被访问的标志
High +பைடு நூலகம்+ ;
}
}
Low + + ;
} pCluster = cluster-alloc ( High) ; for (k = 0 ;k < High ;k + + ) pCluster - > pUnitNo[ k ] = pStack[ k ] ;
4 6
计算机应用
2004 年
2. 2 算法分析 对于高维空间 ,由于点在空间中的分布比较分散 ,不太容
易形成支持度较高的聚类 。所以考虑在某一个子空间中执行 聚类分析的任务 ,而哪一个子空间会成为我们要分析的对象 , 也只能在从低维到高维的迭代过程中自动产生的 。
为了使得计算点的密度的方法简单一些 ,我们将数据空 间分割成网格 (grid) 状 (这是通过将数据空间中的每一维划分 成相同的区间数来做到的 ,这就意味着每一个单元具有相同 的“体积”,这样单元中点密度的计算可以转换成简单的点计 数) ,然后将落到某个单元中点的个数当成这个单元的密度 (density) 。这时可以指定一个数值 ,当某个单元格中点的个 数大于该数值时 ,就说这个单元格 ( unit) 是密集的 。最后 ,聚 类 (cluster) 也就定义为连通的单元格的集合 。
部的最优可以得到一个全局较优的结果 。
先找出覆盖聚类 C 中所有单元格的最大区域 ,使 C 中的 任一单元格被最大区域所覆盖 ,再将最大区域的个数最小化 ,
使得最后得到的集合仍能够覆盖 C 中的所有单元格 (如图 1) 。
第 24 卷第 4 2004 年 4 月
期
计算机应用 Computer Applications
Vol . 24 ,No. 4 Apr. ,2004
文章编号 :1001 - 9081 (2004) 04 - 0045 - 02
基于 DBSCAN 聚类算法的研究与实现
荣秋生 ,颜君彪 ,郭国强 (湖南文理学院 计算机科学与技术系 ,湖南 常德 415000)