一种基于邻域的聚类算法

基本概念:

给定数据集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. p \notin kNN(p)
    3. o 和 o' 是第 ko'分别是p的第k和第k+1最近邻,则dist(p, o') \geq dist(p,o)
  2. 定义2:(反向k近邻的集合,或者简称为R-kNN).p的反向k近邻集合属于kNN包含p的集合,命名为R-kNN。
    1. R-kNN(p) = \{q \ \epsilon \ D \ |\ p\ \epsilon \ kNN(q)\ and \ p \neq q\}
    2. 请注意在学术中,反向kNN通常是简称为RNN,这里使用的是R-kNN而不是RNN,因为每个RNN集合都是在确定的k值基础上。
    3. 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为半径的范围内的点。
    1. rNB(p)\ =\ \{q\ \epsilon \ D|dist(q,p)\ \leqslant \ r\ and\ q\ \neq \ p\}
  4. 定义4:(k近邻,简称kNB)。对于D数据集中的每个对象p,\exists o\ \epsilon \ kNN(p),\ r'\ =\ dist(p,o)使得\forall o'\ \epsilon \ kNN(p),dist(p,o')\leqr'.该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)。很明显|kNB(p)|\ \geq \ k因为可能有多个物体位于邻域的边缘(圆)
  5. 定义5:(反向k近邻,简称R-kNB)。p是kNB包含p的对象集合,由R-kNB表示,可以写成
    1. R-kNB(p)\ = \{q\ \epsilon\ D|p\ \epsilon \ kNB(q)\ and\ p\neq q \}
    2. 同样,|R-kNB(p)|\ \geq \ |R-kNN(p)|
    3. 在数据集中的数据点能够被专业分类成三类:密集点、稀疏点、均匀点。直观的说,集群中的点是密集点或均匀点,集群边上上的点最可能是疏松点。离散点和噪音也是疏松点,目前,大多数基于密度的聚类算法(eg.DBSCAN)使用使用一种直观,直接的方法来测量密度,即数据对象密度是给定的邻域中包含的数据对象的数量半径。显然,这是一种绝对和全局密度。这样的密度测量使DBSCAN无法检测小的、密集的簇来自大而稀疏的星团。本文提出了一种新的测量方法密度:基于邻域的密度因子(或简单的ndf),它将我们的新聚类算法NBC的基础。
  6. 定义6:(基于邻域的密度因子,或简称为NDF)p点的NDF求法如下:
    1. NDF(p)\ =\ |R-kNB(p)|\ /\ |kNB(p)|
    2. 那么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无法检测到的一些集群结构)。
    3. 为了证明NDF作为局部密度测量的能力,我们
      举一个图1中的例子。图1(a)是一个包含两个簇C1、C2的数据集,
    4. 由图可看出: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
    2. p\ \epsilon\ kNB(q)
  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. 如果p\ \epsilon \ C并且q是领域可达来自p,则q\ \epsilon \ C
    3. 以上定义保证了簇是领域可达的最大集合对象关于k

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

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

2.聚类数据集。随机获取对象p(NDF(p)\ \geq \ 1),如果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)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/509014.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

博弈之威佐夫

博弈之威佐夫博弈详解 标签&#xff1a; 数学博弈游戏威佐夫algorithm2014-03-21 10:40 5330人阅读 评论(1) 收藏 举报分类&#xff1a;博弈&#xff08;6&#xff09; 版权声明&#xff1a;本文为博主原创文章&#xff0c;未经博主允许不得转载。 威佐夫博弈是博弈中的另一个经…

前缀树和后缀树

Trie树的应用: 除了本文引言处所述的问题能应用Trie树解决之外&#xff0c;Trie树还能解决下述问题&#xff08;节选自此文&#xff1a;海量数据处理面试题集锦与Bit-map详解&#xff09;&#xff1a; 3、有一个1G大小的一个文件&#xff0c;里面每一行是一个词&#xff0c;词的…

机器学习——决策树算法

机器学习——决策树算法原理及案例 标签&#xff1a; 机器学习决策树信息增益基尼指数模型评估 2016-05-04 15:31 43984人阅读 评论(1) 收藏 举报 分类&#xff1a; 机器学习&#xff08;10&#xff09; 版权声明&#xff1a;本文为博主原创文章&#xff0c;未经博主允许不…

机器学习——决策树的实现

#!/usr/bin/env python #-*-coding:utf-8-*- #决策树的建立&#xff0c;训练测试&#xff0c; from sklearn.feature_extraction import DictVectorizer import csv from sklearn import preprocessing from sklearn import tree from sklearn.externals.six import StringIO#读…

邻近算法(KNN算法)

邻近算法 锁定本词条由“科普中国”百科科学词条编写与应用工作项目 审核 。邻近算法&#xff0c;或者说K最近邻(kNN&#xff0c;k-NearestNeighbor)分类算法是数据挖掘分类技术中最简单的方法之一。所谓K最近邻&#xff0c;就是k个最近的邻居的意思&#xff0c;说的是每个样本…

KNN算法的实现

#!/usr/bin/env python #-*-coding:utf-8-*- #knn 的具体实现 import csv import random import math import operator #导入数据集 文件名&#xff0c;split区分那个集 def loadDataset(filename,split,trainintset[],testSet[]):with open(filename,rb) as csvfile:linescsv.…

支持向量机(SVM)算法

支持向量机&#xff08;SVM&#xff09;算法支持向量机(support vector machine)是一种分类算法&#xff0c;通过寻求结构化风险最小来提高学习机泛化能力&#xff0c;实现经验风险和置信范围的最小化&#xff0c;从而达到在统计样本量较少的情况下&#xff0c;亦能获得良好统计…

python文件操作以及相对路径和绝对路径问题

绝对路径&#xff1a; PROJECT_ROOT os.path.dirname(os.path.realpath(__file__))#获取项目根目录path os.path.join(PROJECT_ROOT,"data\\edge\\0_fuse.txt") #文件路径edgeMap np.loadtxt(path)相对路径&#xff1a; path "./data/edge/98_fuse.txt&quo…

神经网络NN算法

1. 背景: 1.1 以人脑中的神经网络为启发&#xff0c;历史上出现过很多不同版本1.2 最著名的算法是1980年的 backpropagation 2. 多层向前神经网络(Multilayer Feed-Forward Neural Network)2.1 Backpropagation被使用在多层向前神经网络上2.2 多层向前神经网络由以下部分组成&a…

神经网络算法实现

1. 关于非线性转化方程(non-linear transformation function) sigmoid函数(S 曲线)用来作为activation function:1.1 双曲函数(tanh)tanh是双曲函数中的一个&#xff0c;tanh()为双曲正切。在数学中&#xff0c;双曲正切“tanh”是由基本双曲函数双曲正弦和双曲余弦推导而来公式…

神经网络算法的实例

1.简单非线性关系数据集测试&#xff08;XOR)X: Y0 0 00 1 11 0 11 1 0Code:#!/usr/bin/env python #-*-coding:utf-8-*- #神经网络测试的例子 #简单非线性关系数据集测试(XOR)异或的运算 f…

线性回归模型

1. 简单线性回归模型举例&#xff1a; 汽车卖家做电视广告数量与卖出的汽车数量&#xff1a; 1.1 如何练出适合简单线性回归模型的最佳回归线/ 使sum of squares最小1.1.2 计算分子 (1-2)(14-20)(3-2)(24-20)(2-2)(18-20)(1-2)(17-20)(3-2)(27-20) 6 4 0 3 7 20分母 &…

多元线性回归模型

1. 与简单线性回归区别(simple linear regression)多个自变量(x)2. 多元回归模型yβ0&#xff0b;β&#xff11;x1β2x2 ... βpxpε其中&#xff1a;β0&#xff0c;β&#xff11;&#xff0c;β2... βp是参数ε是误差值3. 多元回归方程E(y)β0&#xff0b;β&#xff11;x…

非线性回归

1. 概率&#xff1a; 1.1 定义 概率(P)robability: 对一件事情发生的可能性的衡量1.2 范围 0 < P < 11.3 计算方法&#xff1a; 1.3.1 根据个人置信1.3.2 根据历史数据1.3.3 根据模拟数据1.4 条件概率&#xff1a;2. Logistic Regression (逻辑回归)2.1 例子2.2 基本…

层次聚类

假设有N个待聚类的样本&#xff0c;对于层次聚类来说&#xff0c;步骤&#xff1a;1、&#xff08;初始化&#xff09;把每个样本归为一类&#xff0c;计算每两个类之间的距离&#xff0c;也就是样本与样本之间的相似度&#xff1b;2、寻找各个类之间最近的两个类&#xff0c;把…

(优秀文章保存)Quartz优秀文章保存

Quartz的基本使用之入门&#xff08;2.3.0版本&#xff09; 一、Quartz可以用来做什么 Quartz是一个强大任务调度框架&#xff0c;我工作时候会在这些情况下使用到quartz框架&#xff0c;当然还有很多的应用场景&#xff0c;在这里只列举2个实际用到的 餐厅系统会在每周四晚…

cross-entropy函数

我们理想情况是让神经网络学习更快假设简单模型: 只有一个输入,一个神经元,一个输出简单模型: 输入为1时, 输出为0初始 w 0.6, b 0.9 初始预测的输出 a 0.82, 需要学习学习率: 0.15演示: 初始: w 2.0, b 2.0, 初始预测输出: 0.98, 和理想输出0差点很远演示:神经网络的学…

MyBatis之快速入门

MyBatis之快速入门 2017/9/30首先我要明确告诉大家的是MyBatis是一个java持久层框架&#xff0c;以前我们都是用jdbc来将我们的java程序与数据库相连接&#xff0c;而MyBatis是对jdbc的一个封装。 1.MyBatis框架的引入 我们来看看传统的编程方式中使用jdbc的问题: 1.数据库连接…

【使用注意】特殊中括号[]的特殊json数组

Testpublic void demo93() throws Exception {String str "[\"a\", \"b\", \"c\"]";//生成json数组JSONArray createArray new JSONArray();createArray.put("a");createArray.put("b");createArray.put("…

MyBatis之Mapper动态代理开发

MyBatis之Mapper动态代理开发 2017/9/301.SqlSession的使用范围 1.SqlSessionFactoryBuilder SqlSessionFactoryBuilder是以工具类的方式来使用:需要创建sqlSessionFactory时就new一个 SqlSessionFactoryBuilder 2.sqlSessionFactory 正常开发时&#xff0c;以单例方式管理sqlS…