基本概念:

给定数据集D = {d1,d2 ,.. ,dn},p和q是D中的两个任意对象。我们使用欧氏距离来评估p和q之间的距离,表示为
dist(p,q)。 我们将首先给出k-最近邻集合和反向的定义k-最近邻集合。 尽管学术中给出了类似的定义,
我们把它们放在这里以方便读者理解我们的新算法。

下面是算法需要用到的以下定义:

  1. 定义1:(kNN) k近邻p的集合是k(k>0)的集合,由kNN(p)表示,换句话说,kNN(p)是D数据集中组成的一个集合对象。

    1. |kNN(p)| = k;
    2. '分别是的第k和第k+1最近邻,则
  2. 定义2:(反向k近邻的集合,或者简称为R-kNN).p的反向k近邻集合属于kNN包含p的集合,命名为R-kNN。
    1. 请注意在学术中,反向kNN通常是简称为RNN,这里使用的是R-kNN而不是RNN,因为每个RNN集合都是在确定的k值基础上。
    2. kNN(p)和R-kNN(p)采用双向去探索关于对象p和它的邻近集合,一方面,kNN(p)是p自身的邻近点组成的集合,另一方面,R-kNN(p)表示的邻近结合点中包含p的点。这种双向描述任意的关系物体及其邻域给出了更清晰,更准确的位置图
      在本地和全局的数据集中,这取决于k的值,而不仅仅是使用kNN。 在下文中,我们将给出一个定义对象的邻居。
  3. 定义3:(r近邻,或者简称为rNB)。得到一个真实数字r,p的近邻集合关于(其余部分简称 w.r.t)r的关系成为rNM(p),是集合对象位于以p作为圆的中心点,r为半径的范围内的点。
  4. 定义4:(k近邻,简称kNB)。对于D数据集中的每个对象p,使得.该p的k近邻被写作kNB(p),被定义为r'NB(p), kNB(p) = r'NB(p).我们称呼kNB(p)作为p的k近邻kNN(p)
    1. 定义3和定义4定义从两个不同角度定义两个不同形式的近邻:rNB(p)是被定义通过使用一个显性半径。相反,kNB(p)是被定义通过一个隐性半径,它是相当于被圆的局域给覆盖通过kNN(p)。很明显因为可能有多个物体位于邻域的边缘(圆)
  5. 定义5:(反向k近邻,简称R-kNB)。p是kNB包含p的对象集合,由R-kNB表示,可以写成
    1. 同样,
    2. 在数据集中的数据点能够被专业分类成三类:密集点、稀疏点、均匀点。直观的说,集群中的点是密集点或均匀点,集群边上上的点最可能是疏松点。离散点和噪音也是疏松点,目前,大多数基于密度的聚类算法(eg.DBSCAN)使用使用一种直观,直接的方法来测量密度,即数据对象密度是给定的邻域中包含的数据对象的数量半径。显然,这是一种绝对和全局密度。这样的密度测量使DBSCAN无法检测小的、密集的簇。来自大而稀疏的星团。本文提出了一种新的测量方法密度:基于邻域的密度因子(或简单的ndf),它将我们的新聚类算法NBC的基础。
  6. 定义6:(基于邻域的密度因子,或简称为NDF)p点的NDF求法如下:
    1. 那么NDF的定义是什么呢?让我们来理解它:|kNB(p)|是数字p的k-最近邻域中的对象,是数字包含在p的k-最近邻域中的对象。对于大多数数据对象,这个值大约是k(根据定义4,它可能会更大,但不是小于k)。 | R-KNB(P)|是p反向k近邻中包含的对象数邻域,即将p作为其成员的对象的数量k-最近的邻域。对于不同的数据点,该值非常不一致。
      直观地,更大的| R-kNB(p)|是,这意味着更多的其他对象将p作为他们k个最近邻域的成员,即更密集的p
      邻域是,或更大的NDF(p)。在这种情况下,NDF(p)> 1. 对于均匀分布的点,如果q在kNB(p)中,则p最可能在kNB(q)中,因此,kNB(p)≈  R-kNB(p),即NDF(p)≈1。因此,NDF实际上是测量任何数据对象的邻域或数据对象的密度相对(非绝对)意义上的局部密度。此外,这样的测量是直观(易于理解),简单(易于实施)和有效(存在能够找到DBSCAN无法检测到的一些集群结构)。
    2. 为了证明NDF作为局部密度测量的能力,我们
      举一个图1中的例子。图1(a)是一个包含两个簇C1、C2的数据集,
    3. 由图可看出:C1中的数据均匀分布; C2中的数据符合高斯分布分配。 图1(b)显示了数据集中所有数据点的NDF值。 如我们可以看到,集群C1内的数据点大约有NDF值等于1,而位于C1边界的数据点具有较小的NDF值。 对于群集C2,最密集的点靠近C2的质心,其具有最大的NDF值,而其他对象的NDF值较小,而且此外,从质心定位的点,它们的NDF值越小。使用NDF,在下文中,我们给出了三种类型数据的定义局部意义上的点:局部事件点,局部密集点和局部稀疏点。
  7. 定义7:(局部密集点,简称DP)对象P是局部密集点,如果它的NDF(P)大于1,我们也把p称为与kNB(p)有关的密点,NDP(p)越大,p的k邻域越密集。
  8. 定义8:(局部稀疏点,简称SP)p是局部稀疏点,如果它的NDF(p) < 1,我们称p为kNB(p)的局部稀疏点.NDP(q)越小,k近邻越稀疏。
  9. 定义9:(局部平均点,简称EP)p是局部平均点,如果它的NDF(p) = 1(或者接近于1),我们称p为kNB(p)的局部平均点
    1. 根据上面定义的概念,下面我们将介绍基于邻域的集群的概念。我们的定义遵循dbscan的方式。
  10. 定义10:(基于邻域密度直接可达)从数据集D中得到p、q点,满足一下要求,p是一个基于邻域直接可达
    1. q是一个DP或者EP
  11. 定义11:(领域可达)从数据集D中得到p、q点,p是一个领域可达来自q,如果有对象链p1,...,pn,p1=p,pn=q,这样pi可以从pi+1邻域可达
  12. 定义12:(基于邻域紧密连接)从数据集D中得到p、q点,p和q是基于邻域紧密连接,如果q是邻域可达来自p,k或者q是邻域可达来自p或者第三个对象o这样p和q都是邻域可达来自o
    1. 基于以上定义,现在我们能够定义基于领域聚类的定义
  13. 定义13:(基于领域聚类)得到一个数据集D,集群C 关于 k是D的非空子集
    1. 集群中的p、q,p和q是邻域可达
    2. 如果并且q是领域可达来自p,则
    3. 以上定义保证了簇是领域可达的最大集合对象关于k

NBC算法:NBC算法由两部分组成

1.评估NDF值。我们查找kNB和R-kNB来自目标集合,然后测量它的NDF。

2.聚类数据集。随机获取对象p(),如果p是DP或EP,则新建一个新的簇(社团),表示为p的簇,并继续找其它的领域可达的来自p关于k,涉及到所有对象属于p集群的所有对象,如果p是一个SP,那么就把它放好暂时搁置,并继续检索下一个要处理的点,这是递归操作,直到发现所有集群,更具体地说,给定一个局部密集点或者平均点来自数据库,首先找到对象直接邻域可达来自p关于k。kNB中一批对象将被移动到p的集群中,然后找到另一个直接邻域可达可以从p的簇得到每个DP或EP在p的集群中,直到那里不再有对象可以添加到p的集群中。第二、从剩下的数据集中获取另一个DP或EP已构建另一个集群。当没有更过的DP或EP来获取创建集群,算法终止。不在集群中的点属于噪声或者是异常值,下图有NBC算法的伪代码。

这里,数据集指示聚类的数据集,k是NBC中用于评估kNB和R-kNB的唯一输入参数。 k的值可以由数据库中的专家在一开始或通过实验来设置。参数k的确定将在下一小节中讨论。 DPset保留当前处理的群集的DP或EP。 DPset中的对象用于扩展相应的集群。将DP或EP的kNB移动到当前群集后,将从DPset中删除它。在那里完全检测到群集
在DPset中不是对象。当NBC算法停止时,clst no属性为NULL的未分类对象被视为噪声或异常值。
NBC算法以CalcNDF函数开始计算kNB,
数据集中每个对象的R-kNB和NDF。在传统的指数结构中,
R * -Tree和X-tree通常用于提高kNB的效率
查询处理相对较低维度的数据集。但是,很少有索引结构在高维数据集上有效地工作。为了解决这个问题,我们采用基于单元格的方法来支持kNB查询处理。
数据空间被切割成高维单元格,VA文件[3]用于组织单元格。由于篇幅限制,我们忽略了这里的细节。

//伪代码
void NBC(DataSet, k){for each object p int Dataset{p.clst_no = NULL;//初始化集合中的每个对象}CalcNDF(Dataset, k);//计算NDFNoiseSet.empty();//初始化脏数据集合Cluster_count = 0;//初始化社团数量为0for each object p int Dataset{//扫描整个库if(p.clst_no != NULL or p.ndf < 1){continue}p.clst_no = cluste_count;//标记一个新的社团DPSet.empty();//初始化DPsetfor each object q in kNB(p){//找出与p关联的社团q.clst_no = cluster_count;if(p.ndf >= 1){//ndf > 1加入DPset.add(q);}}while(Dpset != null){//继续扩展社团p = DPset.getFirstObject();for each object q int kNB(p){if(q.clst_no != NUll)continue;q.clst_no = cluster_count;if(q.ndf >= 1)DPset.add(q);}DPset.remove(p);}cluster_count++;}for each object p int Dataset{if(p.clst_no == NULL){NoiseSet.add(p);}}}
}

算法分析:

k值的意义?

k值的确定。参数k粗略地确定了
数据库中最小集群的大小。根据基于邻域的聚类概念和NBC算法的过程,找到一个聚类,我们
必须首先找到至少一个其R-kNB大于或等于其kNB的DP或EP(即,NDF的值不小于1)。假设C是最小的簇w.r.t.数据库D中的k,p是第一个扩展簇C的DP或EP。
kNB(p)中的所有对象自然地分配给C.考虑到p本身,因此C的最小尺寸是k + 1。因此,我们可以使用参数k来限制要找到的最小簇的大小。
集群是一组数据对象,显示一些相似且独特的模式。
如果群集的大小太小,则其模式不容易演示。在这种情况下,数据表现得更像异常值。在实验中,我们通常会设置
从k到10,我们可以在数据库中找到最有意义的聚类。
复杂度?

NBC算法的过程可以分为两个独立的部分:计算NDF和发现簇。最耗时的
计算NDF的工作是评估kNB查询。让N成为
d维数据集D的大小。将对象映射到适当的单元格需要O(N)时间。对于正确定位的细胞长度l的值,平均来说,细胞长度为1
搜索需要3层,每个单元包含k个对象。因此,评估kNB查询的时间复合度是O(mN),其中m = k * 5d。对于大
数据集,m小于等于 N,它变成O(N)。但是,考虑到m 1,因此CalcNDF的时间复杂度为O(mN)。发现集群的递归过程需要O(N)。因此,NBC算法的时间复杂度为O(mN)。

一种基于邻域的聚类算法相关推荐

  1. Self Organizing Maps (SOM): 一种基于神经网络的聚类算法

    转自:https://www.cnblogs.com/sylvanas2012/p/5117056.html 自组织映射神经网络, 即Self Organizing Maps (SOM), 可以对数据 ...

  2. 改进的有效边表算法_优硕微展 | 张和慧:基于邻域保持嵌入算法的间歇过程故障检测研究...

    基于邻域保持嵌入算法的 间歇过程故障检测研究 The Research on batch process fault detection based on Neighborhood Preservin ...

  3. DBSCAN聚类︱scikit-learn中一种基于密度的聚类方式

    文章目录 @[toc] 一.DBSCAN聚类概述 1.伪代码 2.优点: 3.缺点: 4.与其他聚类算法比较 二.sklearn中的DBSCAN聚类算法 1.主要函数介绍: 最重要的两个参数: 其他主 ...

  4. 机器学习-无监督学习-聚类:聚类方法(二)--- 基于密度的聚类算法【DBSCAN文本聚类算法,密度最大值文本聚类算法】

    密度聚类方法的指导思想是,只要样本点的密度大于某阀值,则将该样本添加到最近的簇中. 基于密度的聚类算法假设聚类结构能够通过样本分布的紧密程度确定,以数据集在空间分布上的稠密程度为依据进行聚类,即只要一 ...

  5. 基于密度的聚类算法(1)——DBSCAN详解

    基于密度的聚类算法(1)--DBSCAN详解 基于密度的聚类算法(2)--OPTICS详解 基于密度的聚类算法(3)--DPC详解 1. DBSCAN简介 DBSCAN(Density-Based S ...

  6. 基于网格的聚类算法STING

    基于网格的聚类算法STING STING方法简介 ① 全称 : STING , Statistical Information Grid , 统计信息网格 , 是一种 多分辨率聚类技术 ; ② 划分方 ...

  7. 基于密度的聚类算法(3)——DPC详解

    基于密度的聚类算法(1)--DBSCAN详解 基于密度的聚类算法(2)--OPTICS详解 基于密度的聚类算法(3)--DPC详解 1. DPC简介 2014年,一种新的基于密度的聚类算法被提出,且其 ...

  8. 基于密度的聚类算法:DBSCAN

    DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一个比较有代表性的基于密度的聚类算法.与划分和层次聚类方法不同, ...

  9. 聚类——基于层次的聚类算法

    基于层次的聚类算法(Hierarchical Clustering) 当不知道应该分为几类时,使用层次聚类比较适合.层次聚类会构建一个多层嵌套的分类,类似一个树状结构.可以选择一个聚类数量,根据需求对 ...

最新文章

  1. 解密人类变革时代:2018年13大科技趋势
  2. SQL Server的WAITFOR DELAY注入
  3. leetcode算法题--二叉树中和为某一值的路径
  4. nginx 反向代理跨域访问配置_nginx反向代理配置去除前缀
  5. HDUOJ1864最大报销额(01背包)
  6. linux怎么制作运行包,简单 RPM 包制作
  7. Data Collection
  8. 下半年登场!小米MIX 4概念图曝光:有望首发屏下摄像头
  9. java 浏览器信息吗_java获取浏览器信息
  10. 改变checkbox样式问题
  11. 指针05:const修饰指针
  12. oracle删除数据库中的所有数据的拼接语句
  13. 女孩必读:打死不能嫁的36种男人
  14. sql server 中某个字段值合并【转】
  15. OpenCasCade鼠标移动高亮颜色设置与选中颜色设置
  16. 如何解决stata数据管理器中变量变红的问题
  17. 2018 ps常用字体打包下载
  18. NOIP 模拟题 国际跳棋
  19. vue 使用pug(详细说明)
  20. win10自带磁盘测速工具

热门文章

  1. 现代软件工程 来自卓越大学教师的建议 (读书笔记)
  2. mysql 不需要@的变量_mysql参数变量
  3. python 计时_Python time clock()方法
  4. java selenium_selenium 常见面试题以及答案(Java版)
  5. mysql 自增id replace_MySQL--REPLACE INTO与自增
  6. python数据库操作sqlite_使用Python对SQLite数据库操作
  7. python次方运算_neg__python 魔术方法1 运算符重载
  8. python for循环1 到10_python for循环(1)
  9. 所有的图放到一个html,拖放是HTML5标准的组成部分,若想要把drag1图片放入d
  10. 【学习笔记】单例模式(枚举、校验锁、volatile、反射破坏)