DBSCAN

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

描述

IDX= DBSCAN(X小量minpts在分区观察ñ-通过-p数据矩阵X入使用DBSCAN算法簇(见算法)。DBSCAN聚类基于针对邻域搜索半径阈值的观察(或点)小量和邻居的最小数量minpts需要找出一个核心点。该函数返回ñ×1矢量(IDX)包含的各观察簇索引。

IDX= DBSCAN(X小量minpts名称,值指定使用额外的一个或多个选项的名称 - 值对的参数。例如,您可以指定'距离', '明可夫斯基', 'P',3使用闵可夫斯基距离度量有三个在DBSCAN算法的指数。

IDX= DBSCAN(d小量minpts'距离'“预先计算”)返回簇索引的矢量用于预先计算成对距离d观测之间。d可以是输出pdist要么pdist2,或更一般的相异度矢量或矩阵符合的输出格式pdist要么pdist2, 分别。

[IDXcorepts] = DBSCAN(___还返回一个逻辑矢量corepts包含由确定的核心点DBSCAN使用任何在前面的语法输入参数组合。

例子

全部收缩

集群中使用DBSCAN与默认欧几里德距离度量2-d圆形数据集。此外,比较使用聚类DBSCAN数据集的结果,ķ-Means与平方欧氏距离度量的聚类。

生成包含两个吵圈综合数据。

RNG('默认'%用于重现数据生成的参数%N = 300;每个簇的大小%R1 = 0.5;第一圆的半径%R2 = 5;第二圆的半径%THETA = linspace(0,2 * PI,N)';X1 = R1 * [cos(THETA),SIN(THETA)] +兰特(N,1);X2 = R2 * [cos(THETA),SIN(THETA)] +兰特(N,1);X = [X1; X2];%嘈杂2-d圆形数据集

可视化数据集。

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

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

对数据进行聚类DBSCAN。指定一个小量的1和值minpts值5。

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

可视化集群。

gscatter(X(:,1),X(:,2),IDX);标题(“DBSCAN使用欧氏距离度量”

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

使用平方欧氏距离度量执行DBSCAN集群。指定一个小量的1和值minpts值5。

IDX2 = DBSCAN(X,1,5,'距离''squaredeuclidean');

可视化集群。

gscatter(X(:,1),X(:,2),IDX2);标题(“DBSCAN使用平方欧氏距离度量”

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

演出ķ-Means聚类使用的平方欧几里德距离度量。指定ķ= 2簇。

kidx = k均值(X,2);%默认距离度量欧氏距离平方

可视化集群。

gscatter(X(:,1),X(:,2),kidx);标题(“K-借助于使用平方欧氏距离度量”

使用平方欧氏距离度量,ķ-Means聚类无法正确识别所述数据集中的两个集群。

使用观测之间成对距离的矩阵执行DBSCAN聚类作为输入提供给DBSCAN功能,发现异常值和核心点的数量。该数据集是激光雷达扫描,存储为3-d点的集合,它包含围绕车辆的物体的坐标。

加载X,Y,Z物体的坐标。

加载('lidar_subset.mat')LOC = lidar_subset;

为了突出车辆周围的环境,感兴趣的区域设定为跨度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(指数,:);

可视化的数据作为2 d散点图。注释情节来突出车辆。

散射(LOC(:,1),在上述(:,2),'');注解('椭圆',[0.48 0.48 0.1 0.1],'颜色''红'

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

预先计算成对距离矩阵d通过使用观测之间pdist2功能。

d = pdist2(LOC,LOC);

通过使用群集的数据DBSCAN与成对距离。指定一个小量的2和值minpts的50值。

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

可视化效果和注释图中突出显示特定集群。

gscatter(LOC(:,1),在上述(:,2),IDX);注解('椭圆',[0.54 0.41 0.07 0.07],'颜色''红')网格

如图所示散点图,DBSCAN识别11簇和地点在一个单独的集群中的车辆。

DBSCAN受让人该组点的红色圆圈(和围绕着(3,-4)),以相同的群集(组7)作为基团中的情节的东南象限点。人们期望,这些群体应该是独立的集群。您可以尝试使用的较小值小量分裂大型集群,并进一步分区的点。

该功能还确定了一些异常值(一个IDX的价值-1)中的数据。找点的数量DBSCAN标识为离群值。

总和(IDX == -1)
ANS = 412

DBSCAN识别离群值412超出19070个观测。

找点的数量DBSCAN识别为核心点。一个corepts的价值1表示一个核心点。

总和(corepts == 1)
ANS = 18446

DBSCAN识别18446个作为观测核点。

看到确定DBSCAN参数的值更为详尽的例子。

输入参数

全部收缩

输入数据,指定为ñ-通过-p数字矩阵。的行X对应于观测(或点),并且列对应于变量。

数据类型:|

观测值之间成对距离,指定为是的输出的数字行向量pdist,数字方阵即输出pdist2的,逻辑的行向量,或逻辑方阵。d还可以是更一般的相异度矢量或矩阵符合的输出格式pdist要么pdist2, 分别。

对于前面提到的规格,下表描述格式d可以采取,给定一个输入矩阵Xñ观测(行)和p尺寸(列)。

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

  • 的距离的顺序排列(2,1),(3,1),...,(ñ1),(3,2),...,(ñ,2),...,(ññ- 1))

的数字方阵(输出pdist2(X,X)
  • 一个ñ-通过-ñ矩阵,其中d(I,J)是观测之间的距离一世ĴX

  • 具有对角元素对称矩阵等于零

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

  • 与指示的距离元件是小于或等于逻辑行向量小量

  • 要点d的顺序排列(2,1),(3,1),...,(ñ1),(3,2),...,(ñ,2),...,(ññ- 1))

逻辑方阵
  • 一个ñ-通过-ñ矩阵,其中d(I,J)表示观测之间的距离一世ĴX是小于或等于小量

注意

如果d是逻辑矢量或矩阵,则该值小量必须是空的;例如,DBSCAN(d,[],5, '距离', '预先计算')

数据类型:||合乎逻辑

一个点的Epsilon附近,指定为数字标定义围绕该点附近搜索半径。如果点的ε邻域至少包含minpts邻居,然后DBSCAN识别点作为核点。

的价值小量必须为空([]) 什么时候d是逻辑矢量或矩阵。

例:DBSCAN(X,2.5,10)

例:DBSCAN(d,[],5, '距离', '预先计算'),用于逻辑矩阵或矢量d

数据类型:|

最小的编号为核心点所需的邻居,指定为一个正整数。核心点的集群中的小量附近必须至少包含minpts邻居,而边界点的ε邻域可以包含比少的邻居minpts

例:DBSCAN(X,2.5,5)

数据类型:|

名称 - 值对参数

指定可选的用逗号分隔的对名称,值参数。名称是参数的名称和是对应的值。名称必须出现引号内。您可以按照任何顺序指定多个名称和值对参数名1,值1,...,NameN,值N

例:DBSCAN(d,2.5,5, '距离', '预先计算')指定DBSCAN聚类使用成对距离的预先计算的矩阵d观测的埃普西隆邻里之间2.5,和最小的邻居。

距离度量,指定为逗号分隔的一对组成的'距离'和字符矢量,标量的字符串,或功能句柄,在该表中所描述的。

描述
“预先计算”

预计算的距离。您必须指定此选项,如果第一个输入DBSCAN是矢量或成对距离的矩阵d

“欧几里德”

欧氏距离(默认)

'squaredeuclidean'

欧氏距离平方。(此选项被设置用于仅效率,它不满足三角不等式。)

'seuclidean'

标准化的欧氏距离。观测值之间的每个坐标差是由标准偏差的对应元件除以缩放,S =nanstd(X)。用规模指定另一个值小号

“马氏

使用的样本协方差马哈拉诺比斯距离XC =nancov(X)。用冠状病毒指定另一个值C,其中矩阵C是对称和正定的。

'城市街区'

市街区距离

“闵可夫斯基

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

“切比雪夫”

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

“余弦”

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

“相关性”

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

“汉明”

海明距离,这是坐标是不同的百分比

“捷卡”

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

“斯皮尔曼

一减观测之间的样品Spearman秩相关(作为值的序列处理的)

@distfun

自定义距离函数句柄。的距离函数具有如下形式

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

  • ZI1-通过-ñ载体含有单个观察。

  • ZJ是一个M2-通过-ñ矩阵包含多个观测。distfun必须接受一个矩阵ZJ与观测的任意数量。

  • D2是一个M2-通过-1距离的向量,并且D2(k)的是观测之间的距离ZIZJ(K,:)

如果你的数据不疏,通常可以计算距离,更迅速地通过使用内置的距离,而不是功能的手柄。

对于定义,请参阅距离度量

当您使用'seuclidean'“闵可夫斯基, 要么“马氏距离度量,您可以指定其他名称 - 值对参数'规模''P', 要么“冠状病毒”分别以控制距离度量。

例:DBSCAN(X,2.5,5, '距离', '明可夫斯基', 'P',3)指定的埃普西隆附近2.5,最低的邻居增长集群,并且随着指数使用的明氏距离度量3在进行聚类算法时。

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

这种观点仅仅当'距离'“闵可夫斯基

例:'P',3

数据类型:|

协方差矩阵的马哈拉诺比斯距离度量,指定为逗号分隔的一对组成的“冠状病毒”和对称,正定的,数字矩阵。

这种观点仅仅当'距离'“马氏

数据类型:|

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

每个维(列)的X具有在对应的值'规模';因此,'规模'是长度的p(中列的数X)。对于每个维度XDBSCAN使用在对应的值'规模'规范之间的区别X和查询点。

这种观点仅仅当'距离''seuclidean'

数据类型:|

输出参数

全部收缩

群集索引,返回一个数字列向量。IDXñ行,每行IDX表示的相应观察集群分配X。索引等于-1表示异常值(或噪声点)。

注意

使用DBSCAN算法集群分配取决于观察的顺序。因此,洗牌的行X可以导致对观察不同集群的任务。有关详细信息,请参阅算法

数据类型:

指标为核心点,返回一个ñ-通过-1指示由识别的核心点的索引逻辑矢量DBSCAN。的价值1在任一行corepts指示相应观察X是一个核心点。除此以外,corepts具有的价值0对应于不属于核心点的观测行。

数据类型:合乎逻辑

更多关于

全部收缩

核心点

集群中的核心点是具有至少邻居的最小数目的点(minpts)在他们的小量附近(小量)。每个群集必须包含至少一个核心点。

边境检查站

集群中的边界点是比邻居的核心点所需的最小数量少点(minpts)在他们的小量附近(小量)。通常,边界点的ε邻域中比一个核心点的ε邻域点显著少。

噪声点

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

提示

  • 为了提高速度迭代时超多值小量,考虑通过在d作为输入到DBSCAN。这种方法防止了功能不必计算在迭代的每个点的距离。

  • 如果您使用pdist2预先计算d,不指定“最小”要么“最大”的名称 - 值对参数pdist2选择或排序的列d。选择比少ñ距离导致一个错误,因为DBSCAN预计d是一个方阵。在分拣的每一列的距离d导致亏损的解释d而在使用时,可以给无意义的结果DBSCAN功能。

  • 对于内存使用效率,可以考虑在传递d作为逻辑矩阵而不是数字矩阵DBSCAN什么时候d大。默认情况下,MATLAB®存储在使用8个字节(64位)的数值矩阵中的每个值,并在使用1个字节(8个比特)的逻辑矩阵中的每一值。

  • 要选择一个值minpts考虑的值大于或等于所述输入数据的尺寸加一[1]的数量。例如,对于一个ñ-通过-p矩阵X,组'minpts'等于p+1或更高。

  • 一个可能的战略选择的值小量是生成ķ距离d为图X。对于每个点X,寻找到的距离ķ日最近点,和剧情分类反对这个距离点。一般而言,图中包含了膝盖。距离对应于膝盖通常是一个不错的选择小量的,因为它是其中点开始拖尾成异常值(噪声)领土[1]的区域。

算法

  • DBSCAN是被设计来发现数据集群和噪声基于密度的群集算法。该算法识别3种点:核心点,边界点,以及噪声点[1]。对于指定的值小量minpts中,DBSCAN功能实现算法如下所示:

    1. 从输入数据集X中,选择所述第一未标记的观测X1作为当前点,并初始化第一簇标签C1。

    2. 找到小量邻域内的点的集合小量当前点。这些点是邻居。

      1. 如果邻居的数量小于minpts,然后标记当前点为噪声点(或离群值)。进入第4步。

        注意

        DBSCAN可以重新分配噪声分簇如果噪声点以后满足设置的约束小量minpts从其他一些点X。重新分配点的过程发生了集群的边界点。

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

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

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

    5. 重复步骤2-4,直到所有的点X被标记。

  • 如果两个簇具有不同的密度,并且彼此靠近,即,(一个来自每个群集)两个边界点之间的距离小于小量, 然后DBSCAN可以在两个集群合并成一个。

  • 每个有效的集群可能不包含至少minpts观察结果。例如,DBSCAN可以识别属于两个簇是相互靠近边界点。在这种情况下,该算法分配边界点首次发现集群。其结果是,第二集群仍然有效的集群,但它可以比少minpts观察结果。

参考

[1]酯,M.,H.-P.克里格尔,J.桑德和X.小伟。“用于发现与噪声大的空间数据库集群基于密度的算法”。在第二次国际会议的知识发现诉讼数据库和数据挖掘,226-231。波特兰,俄勒冈:AAAI出版社,1996年。

介绍了在R2019a