主要内容

dbscan

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

描述

例子

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

例子

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

例子

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

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

集群可视化。

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

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

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

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

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

集群可视化。

G箭头(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-mease使用Squared euclidean距离度量'

图中包含一个坐标轴。使用平方欧几里德距离度量的标题K均值的轴包含2个类型的型号。这些对象代表1,2。

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

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

加载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(指数:);

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

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

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

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

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

d = pdist2(loc,loc);

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

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

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

g箭头(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)是观察之间的距离jX

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

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

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

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

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

请注意

如果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 =性病(X, omitnan).用规模为指定另一个值年代

“mahalanobis”

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

“cityblock”

城市街区的距离

'minkowski'

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

“chebychev”

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

的余弦

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

“相关”

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

“汉明”

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

“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).对于每个维度Xdbscan使用中对应的值'规模'将两者的区别标准化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,选择第一个未标记的观察x1作为当前点,并初始化第一个集群标签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