主要内容

聚类算法

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

描述

实例

idx= dbscan (X,ε,明普茨)分区观测N——- - - - - -P数据矩阵X使用DBSCAN算法(请参阅算法).聚类算法基于邻域搜索半径的阈值对观测值(或点)进行聚类ε和最少数量的邻居明普茨需要识别一个核心点。函数返回N-by-1向量(idx),包含每个观测的聚类指数。

实例

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

实例

idx= dbscan (D,ε,明普茨,“距离”“预算”)返回预先计算的成对距离的群集索引向量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(theta,sin)]+ rand(N,1);X2 = r2*[cos(),sin()]+ rand(N,1);X = (X1, X2);%嘈杂的二维圆形数据集

可视化数据集。

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

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

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

对数据执行DBSCAN群集。指定ε值为1和a明普茨5的价值。

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

可视化集群。

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

图中包含一个轴对象。标题为DBSCAN(使用欧几里德距离度量)的轴对象包含2个线型对象。这些对象表示1、2。

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

使用平方欧氏距离度量进行DBSCAN聚类。指定一个ε值为1和a明普茨5的价值。

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

可视化集群。

gscatter(X(:,1),X(:,2),idx2);标题(“DBSCAN使用平方欧几里德距离度量”)

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

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

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

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

可视化集群。

gscatter (X (: 1) X (:, 2), kidx);标题(“使用平方欧几里德距离度量的K-均值”)

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

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

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

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

负载(“lidar_subset.mat”)loc=激光雷达_子集;

要突出显示车辆周围的环境,请将感兴趣的区域设置为车辆左右各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);

使用聚类算法成对的距离。指定一个ε2和a的值明普茨价值50。

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

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

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

图中包含一个Axis对象。Axis对象包含12个line类型的对象。这些对象表示-1、1、2、3、4、5、6、7、8、9、10、11。

如散点图所示,聚类算法识别11个簇并将车辆放置在单独的簇中。

聚类算法指定以红色圆圈(并以红色圆圈为中心)表示的点组(3、4))到与绘图东南象限中的点组相同的簇(组7)。我们的期望是,这些组应该在单独的集群中。您可以尝试使用较小的值ε将大簇分开,并进一步分割点。

该函数还识别出一些异常值(anidx价值1)在数据中,找到聚类算法识别异常值。

总和(idx = = 1)
ans = 412

聚类算法在19070个观测值中识别出412个异常值。

找出那个点的个数聚类算法确定为核心点。Acorepts价值1.表示核心点。

总和(corepts==1)
ans=18446

聚类算法将18446项观察确定为核心点。

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

输入参数

全部崩溃

输入数据,指定为N——- - - - - -P数字矩阵。一排X对应观察值(或点),列对应变量。

数据类型:|

观测值之间的成对距离,指定为数值行向量,该行向量是pdist,数值平方矩阵,它是pdist2、逻辑行向量或逻辑平方矩阵。D也可以是更一般的相异向量或矩阵,符合pdistpdist2分别地

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

规格 格式
数字行向量(数据的输出)pdist(X))
  • 长度的行向量N(N– 1)/2,对应于中的成对观测值X

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

数字方阵(输出pdist2 (X, X))
  • N——- - - - - -N矩阵,在哪里D (i, j)是观测值之间的距离J在里面X

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

逻辑行向量
  • 长度的行向量N(N– 1)/2,对应于中的成对观测值X

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

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

逻辑方阵
  • N——- - - - - -N矩阵,在哪里D (i, j)指示观测值之间的距离J在里面X小于或等于ε

笔记

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

数据类型:||必然的

点的ε邻域,指定为定义点周围邻域搜索半径的数值标量。如果点的ε邻域至少包含明普茨邻居,然后聚类算法将点标识为核心点。

价值ε必须是空的([])当D是一个逻辑向量或矩阵。

例子:dbscan(X,2.5,10)

例子:dbscan(D,[],5,'距离','预计算'),表示逻辑矩阵或向量D

数据类型:|

核心点所需的最小邻居数,指定为正整数。星团核心点的邻域必须至少包含明普茨邻域,而边界点的ε邻域可以包含比明普茨

例子:dbscan (X, 2.5, 5)

数据类型:|

名称值参数

指定可选的逗号分隔的字符对名称、值参数。的名字是参数名和价值为对应值。的名字必须出现在引号内。您可以按任意顺序指定多个名称和值对参数,如下所示:名称1,值1,…,名称,值

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

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

价值 描述
“预算”

预先计算的距离。如果第一个输入为聚类算法一个向量或矩阵是成对的距离吗D

“欧几里得”

欧氏距离(默认)

“squaredeuclidean”

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

“seuclidean”

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

“mahalanobis”

利用样本协方差的马氏距离X,C=cov(X,'ommitrows'). 使用冠状病毒为指定另一个值的步骤C,矩阵在哪里C是对称的正定的。

“cityblock”

城市街区的距离

“明可夫斯基”

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

“切比切夫”

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

“余弦”

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

“相关”

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

“哈明”

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

“jaccard”

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

“枪兵”

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

@distfun

自定义距离函数句柄。距离函数的形式为

作用D2=距离(ZI,ZJ)%距离计算...
在哪里

  • 是一个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”

数据类型:|

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

每个维度(列)的X在中具有相应的值“规模”因此“规模”的长度P(列的数目X).对于每个维度X,聚类算法使用中对应的值“规模”标准化X和一个查询点。

此参数仅在以下情况下有效:“距离”“seuclidean”

数据类型:|

输出参数

全部崩溃

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

笔记

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

数据类型:

核心点的指示器,作为N——- - - - - -1.逻辑向量,表示通过聚类算法.的值1.在任何一排corepts表示中的相应观察值X是一个核心点。否则,corepts值为0对于与不是核心点的观察值对应的行。

数据类型:必然的

更多关于

全部崩溃

核心点

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

边境点

群集中的边界点是具有少于核心点所需的最小邻居数的点(明普茨)的邻域(ε)。通常,边界点的ε邻域包含的点明显少于核心点的ε邻域。

噪声点

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

提示

  • 在迭代多个ε,考虑通过D作为输入到聚类算法.这种方法可以防止函数在迭代的每个点上计算距离。

  • 如果你使用pdist2预计算D,不指定“最小的”“最大”的名称-值对参数pdist2选择或排序的列D.选择少于N距离会导致错误,因为聚类算法预计D成为一个方阵。对每列中的距离进行排序D导致解释上的缺失D并且在使用时,会给出无意义的结果聚类算法作用

  • 为了有效地使用内存,请考虑通过D作为逻辑矩阵而不是数字矩阵聚类算法D很大。默认情况下,MATLAB®使用8字节(64位)将每个值存储在数字矩阵中,使用1字节(8位)将每个值存储在逻辑矩阵中。

  • 选择的值明普茨,考虑一个大于或等于输入数据的维数加上一个[1]的值。例如,对于anN——- - - - - -P矩阵X设置“明普特”等于P+1或更大。

  • 选择值的一种可能的策略ε就是生成一个K——远程图X.每一点X,求距离K最近的点,并根据这个距离画出已排序的点。通常,图中包含一个膝盖。与膝盖对应的距离通常是一个很好的选择ε,因为它是点开始拖尾到离群(噪声)区域[1]的区域。

算法

  • DBSCAN是一种基于密度的聚类算法,旨在发现数据中的聚类和噪声。该算法识别出三种点:核心点、边界点和噪声点[1]。的指定值ε明普茨这个聚类算法函数实现算法如下:

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

    2. 找到epsilon邻域内的点集ε当前点的。这些点是相邻的。

      1. 如果邻居数量小于明普茨,然后将当前点标记为噪声点(或离群值)。请转步骤4。

        笔记

        聚类算法如果噪声点稍后满足由ε明普茨从另一个角度来看X.这种重新分配点的过程发生在集群的边界点上。

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

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

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

    5. 重复步骤2-4,直到所有点都到位X都贴上了标签。

  • 如果两个星团密度不同且彼此接近,即两个边界点(每个星团一个)之间的距离小于ε然后聚类算法可以将两个集群合并为一个。

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

工具书类

[1] Ester, M., h . p .克里格尔,J.桑达,肖伟。“一种基于密度的算法,用于在有噪声的大型空间数据库中发现集群。”在第二届数据库知识发现和数据挖掘国际会议论文集,226-231。波特兰,或:AAAI出版社,1996年。

在R2019a中引入