主页 > 军事 > 简单一文助你理解DBSCAN是什么【hth华体会】

简单一文助你理解DBSCAN是什么【hth华体会】

hth华体会 军事 2011年01月21日
本文摘要:一般来说,说到聚类算法,大多数人会想到K-means算法,但K-means算法一般局限于凹样本集,必须提前原始K值。DBSCAN聚类既可以作为凹样本集,也可以作为非凸样本集,不需要提前原始聚类族的数目。凹面样品组的描述如下图和右图所示。 关于DBSCAN聚类,是基于密度的,聚类一般是通过样本之间的贴近度来进行的,把一类紧密相连的样本变成一类,然后迭代所有的样本点。而DBSCAN集群有以下定义。1.-邻域:以采样点x1为中心,半径为 2的范围。

hth华体会

一般来说,说到聚类算法,大多数人会想到K-means算法,但K-means算法一般局限于凹样本集,必须提前原始K值。DBSCAN聚类既可以作为凹样本集,也可以作为非凸样本集,不需要提前原始聚类族的数目。凹面样品组的描述如下图和右图所示。

关于DBSCAN聚类,是基于密度的,聚类一般是通过样本之间的贴近度来进行的,把一类紧密相连的样本变成一类,然后迭代所有的样本点。而DBSCAN集群有以下定义。1.-邻域:以采样点x1为中心,半径为 2的范围。

min _ sample(大于样本点数):样本点x1的-邻域内所有样本点n的总数;如果n >=min _ sample,则采样点成为核心点,否则为非核心点。而非核心分为边界点和噪声点。他们的区别在于他们的-邻域是否没有核心点,如果没有核心点就是边界点,否则就是噪声点。3.密度往返:如果样本点x1位于x2的-邻域内,x2为核心点,则称x1密度往返于x2。

4.密度可约性:如果一个样本点x1位于x2的-邻域内,且x1和x2都是核心点,则称为x1和x2密度可约性。5.密度连接:如果非核心点x1和x2在核心点x3的-邻域内,称为x1和x2密度连接。

所有密度相连的样本点构成一个子集。上图中的红点为核心点,黑点为非核心点(包括边界点和噪声点)。有两组可约密度。

第一组(左)有7个核心点,它的子集还包括7个核心点和每个-邻域内的所有边界点。第二组(右)有5个核心点,它的子集还包括5个核心点和每个-邻域内的所有边界点。当所有非噪声点都在不同的子集中时,聚类结束。

hth华体会

所以DBSCAN聚类的过程可以定义为:有数据集x={x1,x2,xn}和min_sample,并设置邻域半径值。1.迭代数据集,将每个样本点之间的距离保存成矩阵;2.迭代数据集,找出每个核心点邻域内的所有核心点和样本点;3.如果核心点之间的距离大于半径值,则将两个核心点连接在一起;最后不会形成几个集群;4.将所有边界点指定给最近的核心点;5.之后所有非噪声点都分配好了,算法就完成了。Python是用sklearn库自带的数据集-make _ circles构建的。

散点图如下。按照上面定义的流程,开始写代码。第一步是获取各采样点之间的距离:defdis(self,va,VB):s=(va-VB)f=sqrt(s * s . t)returnf[0,0] deflate _ distance (self,dataset): m,n=shape (dataset) [0]。

shape(dataset)[1]dataset=mat(dataset)dis=mat(zeros((m,m))for iin range(m):for Jin range(I,m): dis [I,j]=self。数据集[1],数据集 deffind_core_point(self,dis矩阵):core _ point=[]core _ point _ dict={ m=shape(dis矩阵)[0]对于iin range(m):ind=[]对于Jin range(m):ifdis矩阵[I,j]=self。

min _ sample:core _ point。追加(I)core _ point _ dict[str(I)]=indcore _ point _ core={ forkey,valueincore_point_dict()。其中核心点是一个列表,存储所有的核心点核心点是一个字典,键为核心点,值为该核心点邻域内的所有样本点子集核心点核心是一个字典,键为核心点,值为该核心点邻域内所有核心点子集接下来就是找到密度往返点子集,也就是在邻域内的核心点子集defjoin_core_point(self,core_point,core_point_dict,core _ point _ core):labels=array(zeross((1,len(core _ point))))num=1 result={ } result[str(num)]=core _ point _ core[str(core _ point[0])(1,len(core_point)):q=[]forkey,valuein result。

items():r=self。get _ same(core _ point _ core[str(core _ point[I])),value copy()n . extend(core _ point _ core[str(core _ point[I]))for line range(1,len(q)):n . extend(result[q[I]])del result[q[I]]result[q[0]=list(set(n)),else:num=num 1 result[str(num)]=core _ point _ core[str(core[I])]返回结果再行将所有边界点区分到其最近的核心点一簇并所画出有defddbscan(self,data,label):m=shape(data)[0]dismatrix=self。get _ distance(data)type=array(zeross((1,m)))number=1core_point,core_point_dict,core _ point _ core=self。

find _ core _ point(dis matrix)iflen(core _ point):core _ result=self。join _ core _ point(core _ point,core_point_dict,core _ point)forkey,valueincore_result.items():k最后的结果图如下:虽然效果不俗,但自己写出的就是较为辣鸡,一共用了10.445904秒;如果知道要用这个算法的话,不引荐大家用自己写出的,事实上sklearn库就有DBSCAN这个函数,只必须0.0284941秒。

效果如上右图。而且代码也只有几行。

代码被复制到(http://itendex.net/detail/58485-81% 9a % E7 % B1 % BB-AE % 97% E6 % B3 % 95-DBSCAN)defskdbscan(self,data,label):data=array(data)db=DBscan(EPS=self . EPS,min_samples=self.min_sample,metric='euclidean ')。fit(data)Core _ samples _ mask=zero _ like(db . labels _,dtype=bool)Core _ samples _ mask[db . Core _ sample _ indexs _]=Truelabels=db . labels _ n _ clusters _=len(set(labels))-(1if-1 inlabel sel se 0)unique _ labels=set(labels)co lors=[' r ',' b ',' g ',' y ',' c ',' m ',' orange']fork,colinzip(unique_labels,colors):ifk=-1:col=' k-邻域内样本数的阈值其他参数:度量:度量模式,配置文件为欧氏距离,可以使用的距离度量参数有:欧式距离“欧氏”曼哈顿距离“曼哈顿”Tobyshev距离“Chebyshev”Minkowski距离“Minkowski”wminkowski“标准化欧式距离”seuci dean“mahalanobis”Mahalanobis距离“Mahalanobis”自行定义距离函数算法Ithm:有四种方法求解邻接算法:“蛮力”构建“KD _ tree”KD树构建“球”以上三种算法都要权衡,可以自由选择数值最差的拟合算法。Leaf_size:用于“ball_tree”或“KD _ tree”时,暂停子树p构建的叶节点数阈值:仅作为Minkowski距离和加权Minkowski距离中p值的自由选择,其中p=1为曼哈顿距离,p=2为欧氏距离。如果欧氏距离用于配置文件,则此参数不是必需的。

hth华体会

n _ jobs:CPU段数。如果取值为-1,DBSCAN集群的优缺点可以被所有CPU扩展:噪声点可以很好的发现,但不脆弱;具有给定形状的密集数据可以被聚类。缺点:1。

min_sample和eps必须是原创的;不同的群体差别很大;2.当数据量相当大时,效率不会特别低,发散时间会很长;3.对于密度分布不均匀的数据集,簇间差距大的数据集效果差。最后给大家发一张基于DBSCAN聚类的笑脸。

可以去这个网站自己试试。文章就在这里继续告一段落。你的朋友很有钱吗?。


本文关键词:简单,hth华体会,一文,助你,理解,DBSCAN,是什么,【,hth,华

本文来源:hth华体会-www.ruijia-china.com

标签: 是什么   助你   DBSCAN   hth   简单       一文   理解