主要内容

dbscan

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

描述

示例

idx= dbscan (X.εminpts分区观察N——- - - - - -P.数据矩阵X.入使用DBSCAN算法簇(见算法).dbscan聚类基于针对邻域搜索半径阈值的观察(或点)ε和最少数量的邻居minpts要求识别核心点。该函数返回一个N1向量(idx),包含每个观测的聚类指数。

示例

idx= dbscan (X.εminpts名称,价值使用一个或多个名称-值对参数指定其他选项。例如,可以指定'距离','minkowski','p',3使用Minkowski距离度量与DBSCAN算法中的三个指数。

示例

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

示例

[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群集。指定A.ε价值1和aminpts价值5。

idx = dbscan (X 1 5);%的默认距离度量是欧几里德距离

集群可视化。

gscatter (X (: 1) X (:, 2), idx);标题('DBSCAN使用欧几里德距离度量'

使用欧几里德距离度量,DBSCAN正确地识别数据集中的两个集群。

使用平方欧氏距离度量进行DBSCAN聚类。指定A.ε价值1和aminpts价值5。

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

集群可视化。

G箭头(x(:,1),x(:,2),IDx2);标题(“DBSCAN使用平方欧氏距离度量”

使用的平方欧几里德距离度量,DBSCAN正确地识别数据集中的两个集群。

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

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

集群可视化。

gscatter (X (: 1) X (:, 2), kidx);标题('K-mease使用Squared euclidean距离度量'

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

使用观察之间的成对距离的矩阵执行DBSCAN群集作为输入dbscan功能,并找到异常值和核心点数。数据集是LIDAR扫描,存储为3-D点的集合,其包含车辆周围的物体的坐标。

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

负载(“lidar_subset.mat”)LOC = lidar_subset;

为了突出车辆周围的环境,感兴趣的区域设定为跨度20米左右的车,20米前后车辆,道路表面上方的区域。

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

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

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

将数据视为2-D散点图。注释图表以突出车辆。

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

的点的集合(红色圆圈)的中心包含车辆的车顶和发动机罩。所有其他点的障碍。

预先计算一个成对距离矩阵D.通过使用的观察之间pdist2功能。

d = pdist2(loc,loc);

使用dbscan成对的距离。指定A.ε价值2和aminpts的50值。

[IDX,corepts] = DBSCAN(d,2,50,'距离'“预算”);

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

g箭头(loc(:,1),loc(:,2),Idx);注释(“椭圆形”,[0.54 0.41 0.07 0.07],“颜色”“红色”网格)

如散点图所示,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.还可以是更一般的相异度矢量或矩阵符合的输出格式Pdist.pdist2分别。

对于上述规范,下表描述了它们的格式D.可以采取,给定一个输入矩阵X.N观测(行)和P.维度(列)。

规格 格式
数字行向量(输出pdist(x)
  • 一个长度的行向量NN- 1)/ 2中,对应于观察对X.

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

数字方阵(输出pdist2 (X, X)
  • AN.N——- - - - - -N矩阵,D (i, j)是观察之间的距离jin.X.

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

逻辑行向量
  • 一个长度的行向量NN- 1)/ 2中,对应于观察对X.

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

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

逻辑方阵
  • AN.N——- - - - - -N矩阵,D (i, j)表示观察之间的距离jin.X.是小于或等于ε

注意

如果D.是逻辑向量还是矩阵,那么值呢ε必须是空的;例如,DBSCAN(d,[],5, '距离', '预先计算')

数据类型:||逻辑

epsilon邻域的一个点,指定为数字标量,它定义了该点左右的邻居搜索半径。如果一个点的epsilon邻域至少包含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.在观察之间,epsilon邻里2.5,和最小的5.邻居。

距离度量,指定为逗号分隔对,由'距离'和字符向量,字符串标量或功能句柄,如此表格中所述。

价值 描述
“预算”

预先计算的距离。如果第一个输入,则必须指定此选项dbscan一个向量或矩阵是成对的距离吗D.

'euclidean'

欧氏距离(默认)

'squaredeuclidean'

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

“seuclidean”

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

“mahalanobis”

使用的样本协方差马哈拉诺比斯距离X.C = COV(X, 'omitrows').使用COV.为指定另一个值C.,其中矩阵C.是对称的正定的。

“cityblock”

城市街区的距离

'minkowski'

Minkowski距离。默认指数为2.使用P.指定一个不同的指数,其中P.为正标量值。

“切比雪夫”

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

“余弦”

一个减分之间的夹角的余弦(视作矢量)

“相关”

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

“汉明”

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

“jaccard”

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

“枪兵”

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

@DISTFUN

自定义距离功能句柄。距离功能具有表单

功能d2 = distfun(zi,zj)距离的计算%...
在哪里

  • 是一个1——- - - - - -N载体含有单个观察。

  • ZJ是一个M2——- - - - - -N包含多个观测值的矩阵。DISTFUN必须接受一个矩阵ZJ与观测的任意数量。

  • D2是一个M2——- - - - - -1距离的向量,并且D2 (k)是观察之间的距离ZJ (k,:)

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

定义,请参阅距离度量

当您使用“seuclidean”'minkowski',或“mahalanobis”距离度量,您可以指定附加的名称-值对参数“规模”'P',或“浸”,以控制距离度量。

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

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

此参数仅在此处有效'距离''minkowski'

例子:'P',3

数据类型:|

用于Mahalanobis距离度量的协方差矩阵,指定为逗号分隔对组成“浸”一个对称的,正定的,数值矩阵。

此参数仅在此处有效'距离'“mahalanobis”

数据类型:|

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

每个维(列)的X.有相应的价值“规模”;因此,“规模”是长度P.(列的数目X.).对于每个维度X.dbscan使用中对应的值“规模”将两者的区别标准化X.和一个查询点。

此参数仅在此处有效'距离'“seuclidean”

数据类型:|

输出参数

崩溃

作为数字列向量返回的群集索引。idxN行和每行idx表示的相应观察集群分配X..索引等于1表示异常值(或噪声点)。

注意

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

数据类型:

核心点的指标,作为一个返回N——- - - - - -1指示由识别的核心点的索引逻辑矢量dbscan.的值1在任何一排corepts指示相应观察X.是一个核心点。否则,corepts值为0.对于与不是核心点的观察值对应的行。

数据类型:逻辑

更多关于

崩溃

核心点

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

边境检查站

群集中的边界点是少于核心点所需的最小邻居数量的点(minpts)的邻域(ε).通常,边界点的epsilon邻域含有比核心点的epsilon邻域的点少得多。

噪声点

噪声点是不属于任何集群异常。

提示

  • 为了提高速度迭代时超多值ε,考虑通过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.中,选择所述第一未标记的观测X.1作为当前点,并初始化第一个集群标签C.为1。

    2. 查找epsilon街区内的一组点ε当前点的。这些点是相邻的。

      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介绍