主要内容

dbscan

Density-based空间聚类的应用程序与噪声(DBSCAN)

描述

例子

idx= dbscan (X,ε,minpts)分区的观察n——- - - - - -p数据矩阵X集群使用DBSCAN算法(见算法)。dbscan集群的观察(点)基于阈值附近搜索半径ε和最低数量的邻居minpts需要确定一个核心观点。这个函数返回一个n1向量(idx)包含集群每个观察的指标。

例子

idx= dbscan (X,ε,minpts,名称,值)使用一个或多个指定附加选项名称-值对参数。例如,您可以指定“距离”、“闵可夫斯基”,“P”3使用闵可夫斯基距离度量的三次方的DBSCAN算法。

例子

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

例子

(idx,corepts)= dbscan (___)还返回一个逻辑向量corepts包含核心分了dbscan,使用任何输入参数组合在前面的语法。

例子

全部折叠

集群二维圆形数据集用DBSCAN默认的欧氏距离度量。另外,比较使用DBSCAN聚类数据集的结果k——平方欧氏距离度量的聚类。

生成合成数据,包含两个吵闹的圈子。

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

可视化数据集。

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

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

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

对数据执行DBSCAN聚类。指定一个ε1的价值minpts5的价值。

idx = dbscan (X 1 5);%的违约距离度量是欧几里得距离

集群可视化。

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

图包含一个坐标轴对象。坐标轴对象标题DBSCAN使用欧氏距离度量包含2线类型的对象。这些对象代表1、2。

使用欧氏距离度量,DBSCAN正确识别两个集群的数据集。

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

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

集群可视化。

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

图包含一个坐标轴对象。坐标轴对象标题DBSCAN用平方欧氏距离度量包含2线类型的对象。这些对象代表1、2。

利用平方欧氏距离度量,DBSCAN正确地确定数据集的两个集群。

执行k——集群使用的平方欧氏距离度量。指定k= 2集群。

kidx = kmeans (X, 2);%的违约距离平方欧氏距离度量

集群可视化。

gscatter (X (: 1) X (:, 2), kidx);标题(k - means使用平方欧氏距离度量的)

图包含一个坐标轴对象。坐标轴对象标题k - means用平方欧氏距离度量包含2线类型的对象。这些对象代表1、2。

利用平方欧氏距离度量,k聚类则无法正确识别的两个集群数据集。

执行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(指数:);

可视化数据的二维散点图。注释情节突出了车辆。

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

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

点集的中心(用红笔圈出来的)包含车辆的屋顶和罩。所有其他点障碍。

预计算一个矩阵的两两距离D观察使用之间pdist2函数。

D = pdist2 (loc, loc);

通过使用集群数据dbscan成对的距离。指定一个ε2的价值minpts50的价值。

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

可视化结果和注释图强调一个特定的集群。

numGroups =长度(独特(idx));gscatter (loc (: 1), loc (:, 2), idx, hsv (numGroups));注释(“椭圆”[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)组群点东南象限的阴谋。预计这些组织应该在单独的集群。你可以尝试使用一个更小的值ε分拆大集群,进一步分区点。

也确定了一些异常值(一个功能idx的价值1)的数据。找点的数量dbscan识别异常值。

总和(idx = = 1)
ans = 412

dbscan识别异常值412 19070观察。

找点的数量dbscan识别为核心的点。一个corepts的价值1表明一个核心观点。

总和(corepts = = 1)
ans = 18446

dbscan识别18446个观测为核心。

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

输入参数

全部折叠

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

数据类型:|

两两之间的距离观察,指定为一个数字的输出行向量pdist,数字方阵的输出pdist2、逻辑行向量或逻辑方阵。D也可以是一个更一般的不同向量或矩阵的输出格式符合吗pdistpdist2,分别。

对上述规格,下面的表描述的格式D可以,给定一个输入矩阵Xn观察(行)和p维度(列)。

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

  • 距离的顺序安排(2,1),(3,1),…,(n1),(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),…,(n1),(2),…,(n,2),…,(n,n- 1))

逻辑方阵
  • 一个n——- - - - - -n矩阵,D (i, j)表示观测之间的距离jX小于或等于ε

请注意

如果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,…,以=家,在那里的名字参数名称和吗价值相应的价值。名称-值参数必须出现在其他参数,但对的顺序无关紧要。

R2021a之前,用逗号来分隔每一个名称和值,并附上的名字在报价。

例子:dbscan (2.5 D, 5‘距离’,“预算”)指定DBSCAN聚类使用一个预先计算的矩阵的两两距离D观察,一个邻域之间2.5,最少的5邻居。

距离度量,指定为逗号分隔组成的“距离”和一个特征向量,字符串标量或函数处理,如这个表所述。

价值 描述
“预算”

预先计算的距离。您必须指定这个选项如果第一个输入dbscan是一个向量或矩阵的两两距离D

“欧几里得”

欧氏距离(默认)

“squaredeuclidean”

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

“seuclidean”

标准化的欧氏距离。每个坐标差异观察是通过除以相应的扩展元素的标准差,S =性病(X, omitnan)。使用规模指定一个值年代

“mahalanobis”

而使用的样本协方差距离X,C = X (X, omitrows)。使用指定一个值C,矩阵C是对称的正定。

“cityblock”

城市街区的距离

闵可夫斯基的

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

“chebychev”

Chebychev距离(最大坐标差异)

的余弦

1 -之间的夹角的余弦值点(视为向量)

“相关”

1 -样本点之间的相关性(视为序列值)

“汉明”

汉明距离,协调不同的百分比

“jaccard”

1 - Jaccard系数,非零坐标不同的百分比

“枪兵”

1 -样本之间的斯皮尔曼等级相关的观察(视为序列值)

@distfun

自定义距离函数处理。距离函数的形式

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

  • 是一个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距离度量,指定为逗号分隔组成的“浸”对称正定,数字矩阵。

这个论点是有效的前提“距离”“mahalanobis”

数据类型:|

比例因子标准化的欧氏距离度量,指定为逗号分隔组成的“规模”和一个数字向量的积极的价值观。

每个维度(列)X有相应的价值“规模”;因此,“规模”的长度p(列的数量X)。每个维度的X,dbscan使用相应的价值“规模”标准化的区别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 [1]。例如,对于一个n——- - - - - -p矩阵X,设置“minpts”等于p+ 1或更高。

  • 一个可能的战略选择的值ε是生成一个k——远程图X。每一个点的X,找到距离kth最近的点,情节分类分这个距离。一般来说,图形包含一个膝盖。对应于膝盖的距离通常是一个不错的选择ε,因为它是地区点开始下降到离群值(噪音)[1]。

算法

  • DBSCAN是density-based聚类算法的目的是发现集群和数据中的噪声。算法识别三种点:核心点,边界点,和噪声点[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]酯,M。,H.-P。Kriegel, j·桑德,x小薇。“density-based发现算法在大型空间数据库集群的噪音。“在第二届国际研讨会论文集在数据库知识发现和数据挖掘,226 - 231。波特兰,或:AAAI出版社,1996年。

版本历史

介绍了R2019a