主要内容

dbscan

基于密度的噪声应用空间聚类(DBSCAN)

描述

例子

idx= dbscan (Xεminpts分区观测n——- - - - - -p数据矩阵X使用DBSCAN算法进入集群(参见算法).dbscan基于邻域搜索半径的阈值对观测值(或点)进行聚类ε和最少数量的邻居minpts需要识别一个核心点。函数返回n-by-1矢量(idx),包含每个观测的聚类指数。

例子

idx= dbscan (Xεminpts名称、值使用一个或多个名称-值对参数指定其他选项。例如,可以指定“距离”、“闵可夫斯基”,“P”3在DBSCAN算法中使用指数为3的Minkowski距离度量。

例子

idx= dbscan (Dεminpts“距离”“预算”)返回预先计算的成对距离的群集索引向量D之间的观察。D可以输出吗pdistpdist2,或符合输出格式的更一般的不同向量或矩阵pdistpdist2,分别。

例子

idxcorepts) = dbscan (___也返回一个逻辑向量corepts它包含由dbscan,使用前面语法中的任何输入参数组合。

例子

全部崩溃

使用带有默认欧氏距离度量的DBSCAN聚类一个2-D圆形数据集。同时,比较了使用DBSCAN和k-表示用平方欧氏距离度量聚类。

生成包含两个噪声圆的合成数据。

RNG('默认'%的再现性%数据生成的参数N = 300;%每个群集的大小r1 = 0.5;第一个圆的半径r2 = 5;%第二个圆的半径θ= linspace(0, 2 *π,N) ';X1 = r1*[cos(theta,sin)]+ rand(N,1);X2 = r2*[cos(),sin()]+ rand(N,1);X = (X1, X2);%嘈杂的二维圆形数据集

可视化数据集。

散射(X (: 1), (2):,)

图中包含一个坐标轴。坐标轴包含一个散点类型的对象。

图中显示数据集包含两个不同的集群。

对数据执行DBSCAN群集。指定ε值为1和aminpts5的价值。

idx = dbscan (X 1 5);默认的距离度量是欧氏距离

集群可视化。

gscatter (X (: 1) X (:, 2), idx);标题(“使用欧几里得距离度量的DBSCAN”

图中包含一个轴。标题为DBSCAN的轴使用欧几里德距离度量包含2个line类型的对象。这些对象表示1,2。

利用欧几里得距离度量,DBSCAN正确地识别出数据集中的两个簇。

使用平方欧氏距离度量进行DBSCAN聚类。指定一个ε值为1和aminpts5的价值。

idx2 = dbscan (X 1 5“距离”“squaredeuclidean”);

集群可视化。

gscatter(X(:,1),X(:,2),idx2);标题(使用平方欧几里得距离度量的DBSCAN

图中包含一个轴。标题为DBSCAN的轴使用平方欧几里德距离度量包含2个类型为line的对象。这些对象表示1,2。

利用平方欧氏距离度量,DBSCAN正确地识别出数据集中的两个簇。

表演k-表示使用平方欧氏距离度量进行聚类。指定k=2簇。

kidx = kmeans (X, 2);默认距离度量是欧几里得距离的平方

集群可视化。

gscatter (X (: 1) X (:, 2), kidx);标题(“使用平方欧几里德距离度量的K-均值”

图中包含一个轴。标题为K-Means的轴使用平方欧几里德距离度量,包含2个类型为line的对象。这些对象表示1,2。

使用平方欧几里得距离度量,k-表示无法正确识别数据集中的两个集群。

使用观测值之间的成对距离矩阵作为数据库的输入,执行DBSCAN聚类dbscan函数,并查找异常值和核心点的数量。数据集是一个激光雷达扫描,存储为三维点的集合,其中包含车辆周围物体的坐标。

加载x, y, z物体的坐标。

负载('lidar_subset.mat') loc = lidar_子集;

为了突出车辆周围的环境,将感兴趣区域设置为车辆左右20米,车辆前后20米,以及路面以上的区域。

xBound = 20;%在米yBound = 20;%在米zLowerBound = 0;%在米

裁剪数据以只包含指定区域内的点。

指数= loc (: 1) < = xBound & loc (: 1) > = -xBound...& loc(:,2) <= yBound & loc(:,2) >= -yBound...& loc(:,3) > zLowerBound;loc = loc(指数:);

将数据可视化为二维散点图。注释该图以突出显示车辆。

散射(loc (: 1), loc (:, 2),“。”); 注释(“椭圆”,[0.48 0.48 .1 .1],“颜色”“红色”

图中包含一个坐标轴。坐标轴包含一个散点类型的对象。

点集合的中心(用红色圈出来的)包含车辆的车顶和引擎盖。其他的点都是障碍。

预先计算一个成对距离矩阵D通过使用pdist2函数。

D=pdist2(loc,loc);

使用dbscan成对的距离。指定一个ε2和a的值minpts50的价值。

[idx, corpts] = dbscan(D,2,50,)“距离”“预算”);

可视化结果并注释图形以突出显示特定簇。

gscatter(loc(:,1),loc(:,2),idx);注释(“椭圆”,[0.54 0.41 .07 .07],“颜色”“红色”网格)

图中包含一个坐标轴。轴线包含12个线型对象。这些对象代表-1 1 2 3 4 5 6 7 8 9 10 11。

如散点图所示,dbscan识别11个集群,并将车辆放在一个单独的集群中。

dbscan指定一组用红色圈起来的点(并以(3、4))到与绘图东南象限中的点组相同的簇(组7)。我们的期望是,这些组应该在单独的集群中。您可以尝试使用较小的值ε将大簇分开,并进一步分割点。

该函数还识别出一些异常值(anidx价值1)。找出那个点的个数dbscan识别异常值。

总和(idx = = 1)
ans = 412

dbscan在19070个观测值中识别出412个异常值。

找出那个点的个数dbscan标识为核心点。一个corepts价值1表示核心点。

总和(corepts==1)
ans=18446

dbscan确定18,446个观测值为核心点。

看到确定DBSCAN参数的值举一个更广泛的例子。

输入参数

全部崩溃

输入数据,指定为n——- - - - - -p数字矩阵。的行X对应观察值(或点),列对应变量。

数据类型:|

的输出的数值行向量指定为观察值之间的成对距离pdist,输出的数值方阵pdist2,逻辑行向量,或逻辑方阵。D也可以是更一般的不相似向量或矩阵,符合输出格式pdistpdist2,分别。

对于上述规范,下表描述了它们的格式D给出一个输入矩阵Xn观察(行)和p维度(列)。

规范 格式
数字行向量(数据的输出)pdist(X)
  • 一排矢量长度nn- 1) / 2,对应于X

  • 距离是按顺序排列的(2, 1),(3,1),…, (n,1), (3,2), ..., (n,2),......,(nn- 1))

数字方阵(输出pdist2 (X, X)
  • 一个n——- - - - - -n矩阵,其中D (i, j)是观测值之间的距离j在里面X

  • 对角元素等于零的对称矩阵

逻辑行向量
  • 一排矢量长度nn- 1) / 2,对应于X

  • 具有指示小于或等于距离的元素的逻辑行向量ε

  • 的元素D按顺序排列(2, 1),(3,1),…, (n,1), (3,2), ..., (n,2),......,(nn- 1))

逻辑方阵
  • 一个n——- - - - - -n矩阵,其中D (i, j)指示观测值之间的距离j在里面X小于或等于ε

请注意

如果D是逻辑向量还是矩阵,那么值呢ε必须是空的;例如,dbscan (D[] 5,“距离”,“预计”)

数据类型:||逻辑

点的ε邻域,指定为定义点周围邻域搜索半径的数值标量。如果点的ε邻域至少包含minpts邻居,然后dbscan将点标识为核心点。

价值ε必须是空的([])当D是一个逻辑向量或矩阵。

例子:DBSCAN(X,2.5,10)

例子:dbscan (D[] 5,“距离”,“预计”),对于逻辑矩阵或向量D

数据类型:|

核心点所需的最小邻居数,指定为正整数。星团核心点的邻域必须至少包含minpts邻域,而边界点的邻域包含的邻域小于minpts

例子:dbscan (X, 2.5, 5)

数据类型:|

名称-值对参数

指定可选的逗号分隔的对名称、值参数。的名字参数名和价值为对应值。的名字必须出现在引号内。您可以按任意顺序指定多个名称和值对参数,如下所示:Name1, Value1,…,的家

例子:dbscan (2.5 D, 5‘距离’,“预算”)使用预先计算的成对距离矩阵指定DBSCAN聚类D在观测之间,一个ε邻域2.5,最小值为5邻居。

距离度量,指定为逗号分隔对,由“距离”以及字符向量、字符串标量或函数句柄,如本表所述。

价值 描述
“预算”

预先计算的距离。如果第一个输入为dbscan一个向量或矩阵是成对的距离吗D

“欧几里得”

欧氏距离(默认)

“squaredeuclidean”

平方欧氏距离。(此选项仅用于提高效率。它不满足三角形不等式)

“seuclidean”

标准化的欧氏距离。观测值之间的每个坐标差除以相应的标准差,S =性病(X, omitnan). 使用规模为指定另一个值年代

“mahalanobis”

马氏距离的样本协方差XC = X (X, omitrows). 使用冠状病毒为指定另一个值C,其中矩阵C是对称的正定的。

“cityblock”

城市街区的距离

“明可夫斯基”

闵可夫斯基距离。默认指数为2。使用P指定一个不同的指数,其中P为正标量值。

“chebychev”

切比切夫距离(最大坐标差)

的余弦

1减去点之间夹角的余弦值(作为向量)

“相关”

1减去点之间的样本相关性(作为值的序列处理)

“汉明”

汉明距离,是坐标差的百分比

“jaccard”

1减去Jaccard系数,这是不同的非零坐标的百分比

“枪兵”

1减去观察值之间的样本斯皮尔曼等级相关性(作为值的序列处理)

distfun

自定义距离函数句柄。距离函数的形式为

功能D2=距离(ZI,ZJ)距离计算%...
在哪里

  • 是一个1——- - - - - -n包含单个观测值的向量。

  • ZJ是一个平方米——- - - - - -n包含多个观测值的矩阵。distfun必须接受矩阵ZJ有任意数量的观测结果。

  • D2是一个平方米——- - - - - -1距离向量D2 (k)是观测值之间的距离ZJ (k,:)

如果数据不是稀疏的,通常可以使用内置距离而不是函数句柄更快地计算距离。

定义,请参阅距离度量

当你使用“seuclidean”“明可夫斯基”,或“mahalanobis”距离度量,您可以指定附加的名称-值对参数“规模”“P”,或“浸”分别控制距离指标。

例子:dbscan (X 2.5 5,“距离”,“闵可夫斯基”,“P”,3)指定的邻域2.5,最少5,并使用闵可夫斯基距离度量的指数3.在执行聚类算法时。

闵可夫斯基距离度量的指数,指定为逗号分隔对,由“P”和一个正标量。

此参数仅在以下情况下有效:“距离”“明可夫斯基”

例子:“P”3

数据类型:|

马氏距离度量的协方差矩阵,指定为逗号分隔对,包括“浸”一个对称的,正定的,数值矩阵。

此参数仅在以下情况下有效:“距离”“mahalanobis”

数据类型:|

标准化欧几里德距离度量的比例因子,指定为逗号分隔对,包括“规模”和一个正的数值向量。

的每个维度(列)X在中具有相应的值“规模”;因此,“规模”的长度p(列的数目X).对于每个维度Xdbscan使用中对应的值“规模”标准化之间的差异X和一个查询点。

此参数仅在以下情况下有效:“距离”“seuclidean”

数据类型:|

输出参数

全部崩溃

群集指数,作为数字列向量返回。idxn行,以及每行idx中对应观测值的聚类分配X.一个指标等于1指示异常值(或噪声点)。

请注意

使用DBSCAN算法的聚类分配依赖于观测的顺序。因此,把一排排的X可以导致观察结果不同的集群分配。有关更多详细信息,请参阅算法

数据类型:

核心点的指示器,作为n——- - - - - -1逻辑向量,表示被标识的核心点的指数dbscan.的值1在任何一排corepts表示对应的观测值X是一个核心点。否则,corepts值为0对于与不是核心点的观察值对应的行。

数据类型:逻辑

更多关于

全部崩溃

核心点

集群中的核心点至少有最少数量的邻居(minpts)的邻域(ε).每个集群必须至少包含一个核心点。

边界点

群集中的边界点是具有少于核心点所需的最小邻居数的点(minpts)的邻域(ε)。通常,边界点的ε邻域包含的点明显少于核心点的ε邻域。

噪声点

噪声点是不属于任何集群的离群值。

提示

  • 的多个值迭代时的提高速度ε,考虑通过D作为输入dbscan.这种方法可以防止函数在迭代的每个点上计算距离。

  • 如果你使用pdist2预先编译D,不指定“最小的”“最大”的名称-值对参数pdist2选择或排序的列D.选择不到n距离会导致错误,因为dbscan预计D成为一个方阵。对每列中的距离进行排序D导致解释上的缺失D并且在使用时,会给出无意义的结果dbscan函数。

  • 为了有效地使用内存,请考虑传入D作为一个逻辑矩阵而不是一个数字矩阵dbscanD很大。默认情况下,MATLAB®使用8字节(64位)将每个值存储在数字矩阵中,使用1字节(8位)将每个值存储在逻辑矩阵中。

  • 选择的值minpts,考虑一个大于或等于输入数据的维数加上一个[1]的值。例如,对于ann——- - - - - -p矩阵X,设置“minpts”等于p+ 1或更高。

  • 选择值的一种可能的策略ε是生成k——远程图X.对于每个点X,求距离k最近的点,并根据这个距离画出已排序的点。通常,图中包含一个膝盖。与膝盖对应的距离通常是一个很好的选择ε,因为它是点开始拖尾到离群(噪声)区域[1]的区域。

算法

  • DBSCAN是一种基于密度的聚类算法,旨在发现数据中的聚类和噪声。该算法识别出三种点:核心点、边界点和噪声点[1]。的指定值εminpts,dbscan函数实现算法如下:

    1. 从输入数据集X,选择第一个未标记的观察x1作为当前点,并初始化第一个集群标签C为1。

    2. 找到邻域内的点集ε当前点的。这些点是相邻的。

      1. 如果邻居数量小于minpts,然后将当前点标记为噪声点(或离群值)。请转步骤4。

        请注意

        dbscan如果噪声点稍后满足由εminpts从另一个点X.这种重新分配点的过程发生在集群的边界点上。

      2. 否则,将当前点标记为属于集群的核心点C

    3. 迭代每个邻居(新的当前点)并重复步骤2,直到没有发现可以标记为属于当前集群的新邻居C

    4. 选择下一个未标记的输入点X作为当前点,并将集群计数增加1。

    5. 重复步骤2-4,直到所有点都到位X已经标记出来。

  • 如果两个星团密度不同且彼此接近,即两个边界点(每个星团一个)之间的距离小于ε,然后dbscan可以将两个集群合并为一个。

  • 每个有效的集群可能不包含至少minpts观察。例如,dbscan可以识别属于两个相互靠近的群集的边界点。在这种情况下,算法将边界点分配给第一个发现的群集。因此,第二个群集仍然是有效群集,但其数量可以少于minpts观察。

参考

[1] Ester, M., h . p .克里格尔,J.桑达,肖伟。“一种基于密度的算法,用于在有噪声的大型空间数据库中发现集群。”在数据库和数据挖掘中第二次知识发现国际会议的诉讼程序, 226 - 231。波特兰,奥尔特:AAAI出版社,1996。

介绍了R2019a