主要内容

dbscan

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

描述

例子

idx.= dbscan(X埃斯利昂别人的)分区观察N.-经过-P.数据矩阵X使用DBSCAN算法进入群集(参见算法).dbscan基于邻域搜索半径的阈值委托观察(或点)埃斯利昂以及最小的邻居数量别人要求识别核心点。该函数返回一个N.1向量(idx.)包含每个观察的集群指数。

例子

idx.= dbscan(X埃斯利昂别人名称,值的)使用一个或多个名称值对参数指定其他选项。例如,您可以指定'距离','minkowski','p',3在DBSCAN算法中使用指数为3的闵可夫斯基距离度量。

例子

idx.= dbscan(D.埃斯利昂别人'距离','预先汇编')返回预先计算的成对距离的群集指数的向量D.观察之间。D.可以是输出p或者PDIST2.,或更一般的不相似载体或矩阵符合输出格式p或者PDIST2., 分别。

例子

[idx.纪录] = dbscan(___的)也返回逻辑向量纪录包含所识别的核心点dbscan,使用先前语法中的任何输入参数组合。

例子

全部折叠

群集使用DBSCAN的2-D循环数据设置默认欧几里德距离度量。此外,比较使用DBSCAN群集数据集的结果K.- 与平方欧几里德距离度量集聚。

生成包含两个嘈杂圈子的合成数据。

rng (“默认”的)再现性的百分比%数据生成参数n = 300;%每个集群的大小R1 = 0.5;第一圆的%半径R2 = 5;二圆的%半径θ= linspace(0,2 * pi,n)';x1 = r1 * [cos(θ),sin(θ)] + rand(n,1);x2 = r2 * [cos(θ),sin(theta)] + rand(n,1);x = [x1; x2];%噪声2-D循环数据集

可视化数据集。

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

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

该曲线表明数据集包含两个不同的群集。

对数据进行DBSCAN集群。指定一个埃斯利昂1和a的值别人价值5。

idx = dbscan(x,1,5);%距离度量是欧几里德距离

集群可视化。

g箭偶(x(:,1),x(:,2),Idx);标题('DBSCAN使用欧几里德距离度量'的)

图中包含一个坐标轴。标题为DBSCAN Using Euclidean Distance Metric的轴包含2个类型为line的对象。这些对象代表1 2。

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

使用平方欧几里德距离度量执行DBSCAN集群。指定一个埃斯利昂1和a的值别人价值5。

idx2 = dbscan(x,1,5,'距离''squareduclidean');

集群可视化。

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

图中包含一个坐标轴。标题为DBSCAN Using Squared Euclidean Distance Metric的轴包含两个类型为line的对象。这些对象代表1 2。

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

执行K.- 使用平方欧几里德距离度量来聚类。指定K.= 2集群。

Kidx = kmeans(x,2);%默认距离度量是平方欧几里德距离

集群可视化。

G箭壳(x(:,1),x(:,2),Kidx);标题(“使用平方欧几里得距离度量的k -均值”的)

图中包含一个坐标轴。标题为K-Means Using Squared Euclidean Distance Metric的轴包含2个类型为line的对象。这些对象代表1 2。

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

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

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

加载(“lidar_subset.mat”)LOC = LIDAR_SUBSET;

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

xbound = 20;%在米ybound = 20;%在米zlowerbound = 0;%在米

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

indics = 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],'颜色''红色的'的)

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

该组点(以红色盘旋)的中心包含车辆的屋顶和罩。所有其他观点都是障碍。

预编译成对距离的矩阵D.通过使用PDIST2.功能。

D = pdist2 (loc, loc);

使用使用群集数据dbscan用成对距离。指定一个埃斯利昂2和a的值别人价值50。

[IDX,Corepts] = DBSCAN(D,2,50,'距离''预计');

可视化结果并对图进行注释,以突出显示特定的集群。

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

图中包含一个坐标轴。轴包含12个类型的12个物体。这些物体表示-1,1,2,3,4,5,6,7,8,9,10,11。

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

dbscan指定一组用红色圈起来的点(并以(3,-4))与地块东南象限的一组点(第7组)相同。预期这些组应该在单独的集群中。您可以尝试使用较小的值埃斯利昂分裂大群并进一步分区点。

该函数还标识了一些异常值(一个idx.的价值-1)在数据中。找到点数dbscan识别为异常值。

总和(IDX == -1)
ans = 412.

dbscan在19,070个观察中识别412个异常值。

找到点数dbscan标识为核心点。一个纪录的价值1表示核心点。

总和(corepts = = 1)
ans = 18446

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

确定DBSCAN参数的值下面是一个更广泛的例子。

输入参数

全部折叠

输入数据,指定为N.-经过-P.数字矩阵。行的行X对应于观察(或点),并且列对应于变量。

数据类型:单身的|双倍的

在观察之间的成对距离,指定为数字行向量,该数字是输出的p,数字方矩阵是输出的PDIST2.,逻辑行向量或逻辑方矩阵。D.也可以是符合输出格式的更一般的不相似载体或矩阵p或者PDIST2., 分别。

对于上述规范,下表描述了格式D.可以考虑输入矩阵XN.观察(行)和P.尺寸(列)。

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

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

数字方矩阵(输出pdist2(x,x)的)
  • 一个N.-经过-N.矩阵,D(i,j)观察距离是多少一世jX

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

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

  • 具有指示小于或等于的距离的元素的逻辑行向量埃斯利昂

  • 要点D.按顺序排列(2,1),(3,1),......,(N.1),(2),…, (N., 2),…, (N.N.- 1)))

逻辑方矩阵
  • 一个N.-经过-N.矩阵,D(i,j)表示观测之间的距离一世jX这小于或等于埃斯利昂

笔记

如果D.是一个逻辑矢量或矩阵,那么值埃斯利昂必须是空的;例如,DBSCAN(D,[],5,'距离','预定')

数据类型:单身的|双倍的|逻辑

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

的价值埃斯利昂必须是空的([]) 什么时候D.是逻辑矢量或矩阵。

例子:dbscan (X, 2.5, 10)

例子:DBSCAN(D,[],5,'距离','预定'),用于逻辑矩阵或向量D.

数据类型:单身的|双倍的

核心点所需的最小邻居数指定为正整数。群集中核心点的epsilon邻域必须至少包含别人邻居,而边界点的epsilon邻居可以包含少于邻居别人

例子:DBSCAN(X,2.5,5)

数据类型:单身的|双倍的

名称-值对的观点

指定可选的逗号分离对名称,值论点。姓名是参数名称和价值是相应的价值。姓名必须出现在引号内。可以以任意顺序指定多个名称和值对参数Name1, Value1,…,的家

例子:DBSCAN(D,2.5,5,'距离','预定')使用预先计算的成对距离矩阵指定DBSCAN群集D.在观测之间,邻域2.5,最少的5.邻居。

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

价值 描述
'预计'

预先计算的距离。如果第一个输入dbscan是一对距离的矢量或矩阵D.

“欧几里得”

欧几里德距离(默认)

'squareduclidean'

平方欧几里德距离。(此选项仅提供效率。它不满足三角不等式。)

'seuclidean'

标准化的欧几里德距离。观察之间的每个坐标差异通过除以标准偏差的相应元素来缩放,s = std(x,'omitnan').使用规模指定另一个值S.

'mahalanobis'

Mahalanobis距离使用样本协方差XC = COV(x,'omitrows').使用指定另一个值C,矩阵在哪里C是对称的和积极的明确。

'城市街区'

城市街区距离

闵可夫斯基的

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

'chebychev'

Chebychev距离(最大坐标差异)

'余弦'

一个减去点之间夹角的余弦(作为向量处理)

'相关性'

一个减去点之间的样本相关性(视为值序列)

'汉明'

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

'jaccard'

1减去雅卡尔系数,雅卡尔系数是不同的非零坐标的百分比

'Spearman'

一个减去样本Spearman之间的检测等级相关性(视为价值序列)

@DISTFUN

自定义距离功能手柄。距离函数有这样的形式

函数ZJ D2 = distfun(子)距离计算距离......
在哪里

  • zi.是A.1-经过-N.载体含有单个观察。

  • ZJ.是一个平方米-经过-N.矩阵包含多个观察。DISTFUN必须接受矩阵ZJ.随着任意观察。

  • D2是一个平方米-经过-1距离矢量,和D2 (k)观察距离是多少zi.zj(k,:)

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

有关定义,请参阅距离指标

当你使用的时候'seuclidean'闵可夫斯基的, 或者'mahalanobis'距离度量,您可以指定附加名称 - 值对参数“规模”'P', 或者'COV',以控制距离度量。

例子:dbscan(x,2.5,5,'距离','minkowski','p',3)指定epsilon邻居2.5最小的5.邻居培养群集,以及使用指数的Minkowski距离度量3.在执行聚类算法时。

用于Minkowski距离度量的指数,指定为包括的逗号分隔对'P'一个正标量。

此参数仅当'距离'闵可夫斯基的

例子:'P',3

数据类型:单身的|双倍的

马氏距离度量的协方差矩阵,指定为逗号分隔对,由'COV'和一个对称的积极确定的数字矩阵。

此参数仅当'距离''mahalanobis'

数据类型:单身的|双倍的

标准欧几里得距离度量的缩放因子,指定为逗号分隔对组成“规模”和正值的数字矢量。

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

此参数仅当'距离''seuclidean'

数据类型:单身的|双倍的

输出参数

全部折叠

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

笔记

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

数据类型:双倍的

核心点的指示符,返回为N.-经过-1指示所识别的核心点指数的逻辑矢量dbscan.价值1在任何一行中纪录表示相应的观察X是一个核心点。除此以外,纪录有价值0.对于对应于非核心点的观察的行。

数据类型:逻辑

更多关于

全部折叠

核心要点

群集中的核心点是至少有最少数量的邻居(别人)在他们的epsilon邻里(埃斯利昂).每个群集必须至少包含一个核心点。

边界点

集群中的边界点是指拥有少于核心点所需的最小邻居数量(别人)在他们的epsilon邻里(埃斯利昂).一般来说,边界点的邻域包含的点要比核心点的邻域少得多。

噪音点

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

提示

  • 在迭代许多值迭代时提高的速度埃斯利昂,考虑通过D.作为输入dbscan.这种方法可防止该功能必须在迭代的每个点计算距离。

  • 如果你使用PDIST2.预先执行D.,请勿指定“最小”或者“最大”名称 - 值对参数PDIST2.选择或排序列D..选择少于N.距离导致错误,因为dbscan预计D.是一个方阵。排序每一列的距离D.导致对解释的损失D.在使用时可以给出毫无意义的结果dbscan功能。

  • 为了有效的内存使用,考虑通过D.作为逻辑矩阵而不是数字矩阵dbscan什么时候D.很大。默认情况下,Matlab®将每个值存储在一个8字节(64位)的数字矩阵中,将每个值存储在一个逻辑矩阵中,使用1字节(8位)。

  • 选择一个值别人,考虑一个大于或等于输入数据的尺寸的值加上[1]。例如,对于一个N.-经过-P.矩阵X, 放'矿物'等于P.+1或更大。

  • 选择值的一种可能的策略埃斯利昂是生成一个K.- 设计图形X.对于每一点X,找到到的距离K.最接近的点,并对这个距离分类点。通常,图表包含膝盖。对应于膝盖的距离通常是一个不错的选择埃斯利昂,因为它是点开始拖延到异常值(噪声)地区[1]的区域。

算法

  • DBSCAN是一种基于密度的聚类算法,旨在发现数据中的群集和噪声。该算法识别三种点数:核心点,边界点和噪声点[1]。对于指定的值埃斯利昂别人, 这dbscan函数实现算法如下:

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

    2. 找到邻域内的点集埃斯利昂目前的点。这些点是邻居。

      1. 如果邻居数量小于别人,然后将当前点标记为噪声点(或异常值)。转到第4步。

        笔记

        dbscan如果噪声点稍后满足所设定的约束,可以重新分配噪声点到群集埃斯利昂别人从其他一些点X.群集的边界点发生重新分配点的过程。

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

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

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

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

  • 如果两个簇具有不同的密度并且彼此接近,即,两个边界点(来自每个簇的一个)之间的距离小于埃斯利昂, 然后dbscan可以将两个集群合并为一个。

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

参考文献

[1]酯,M.,H.-P。Kriegel,J. Sander和X. Xiaowei。“一种基于密度为基于密度的噪声在大型空间数据库中发现群集的算法。”在第二届数据库与数据挖掘知识发现国际会议论文集,226-231。波特兰,或:Aaai Press,1996。

在R2019A引入