基于密度的带噪声应用程序空间聚类(DBSCAN)识别数据中任意形状的聚类和噪声(离群值)。统计与机器学习工具箱™ 作用dbscan
对输入数据矩阵或观察值之间的成对距离进行聚类。dbscan
返回集群索引和表示核心点(集群内的点)的观测值的向量。不像K-表示聚类,DBSCAN算法不需要事先知道聚类数,聚类也不一定是球状的。DBSCAN还可用于基于密度的离群点检测,因为它可以识别不属于任何聚类的点。
对于要分配给簇的点,它必须满足其ε邻域的条件(ε
)包含至少一个最小数量的邻居(明普茨
).或者,这个点可以在另一个满足的点的邻域内ε
和明普茨
条件。DBSCAN算法识别三类点:
核心点-群集中至少具有明普茨
它的邻域
边界点-群集中具有少于个边界点的点明普茨
它的邻域
噪声点-不属于任何群集的异常值
DBSCAN可与各种距离度量,您可以为您的特定应用程序定义一个自定义距离度量。距离度量的选择决定了邻域的形状。
对于给定的邻域值ε
以及最小邻居数明普茨
核心点所需的dbscan
函数实现DBSCAN,如下所示:
从输入数据集X
,选择第一个未标记的观测值x1.作为当前点,并初始化第一个簇标签C为1。
找到邻域内的点集ε
当前点的。这些点是相邻的。
如果邻居的数量小于明普茨
,然后将当前点标记为噪声点(或离群值)。请转步骤4。
笔记
dbscan
如果噪声点稍后满足由ε
和明普茨
从另一个点X
。此重新分配点的过程适用于群集的边界点。
否则,将当前点标记为属于群集的核心点C.
迭代每个邻居(新的当前点)并重复步骤2,直到没有发现可以标记为属于当前集群的新邻居C.
在中选择下一个未标记的点X
作为当前点,并将集群计数增加1。
重复步骤2-4,直到所有点都到位X
都贴上了标签。
属性的值ε
和明普茨
参数dbscan
.数据集是激光雷达扫描,存储为三维点的集合,包含车辆周围物体的坐标。
加载、预处理和可视化数据集。
加载x、 y,z物体的坐标。
装载(“lidar_subset.mat”) X = lidar_子集;
要突出显示车辆周围的环境,请将感兴趣的区域设置为车辆左右各20米,车辆前后各20米,以及道路表面上方的区域。
xBound=20;%以米为单位yBound=20;%以米为单位zLowerBound = 0;%以米为单位
裁剪数据以仅包含指定区域内的点。
索引=X(:,1)<=xBound&X(:,1)>=-xBound...&X(:,2)<=yBound&X(:,2)>=-yBound...& X(:,3) > zLowerBound;X = X(指数:);
将数据可视化为二维散点图。注释情节以突出显示车辆。
散射(X (: 1) X (:, 2),'.');注释(“椭圆”,[0.48 0.48 .1 .1],“颜色”,“红色”)
点集的中心(红色圆圈)包含车辆的车顶和发动机罩。所有其他点都是障碍物。
为其选择一个值明普茨
.
选择的值明普茨
,考虑一个大于或等于1加上输入数据[1]的维数的值。例如,对于anN
——- - - - - -P
矩阵X
,设置“明普特”
大于等于p+1
.
对于给定的数据集,指定一个明普茨
大于或等于4的值,特别是值50。
minpts = 50;%核心点的最小邻居数
为其选择一个值ε
.
一种评估价值的策略ε
就是生成一个K输入数据的距离图X
.对于每一点X
,求距离K最近的点,并根据这个距离画出已排序的点。图中包含一个膝盖。与膝盖对应的距离通常是一个不错的选择ε
,因为它是点开始拖尾到离群(噪声)区域[1]的区域。
在策划K-距离图,首先求明普茨
中观测值的最小成对距离X
,按升序排列。
kD = pdist2 (X, X,“euc”,“最小”,minpts);
画出K-距离图。
情节(排序(kD(最终,:)));标题(“k-距离图”)包含(“按第50个最近距离排序的点”) ylabel (“第50最近距离”网格)
膝盖在2左右;因此,设置值为ε
到2。
ε=2;
集群使用dbscan
.
使用dbscan
的价值明普茨
和ε
在前面的步骤中确定的。
标签= dbscan (X,ε,minpts);
可视化集群并在图中标注以突出显示特定的集群。
gscatter (X (: 1) X(:, 2),标签);标题(' = 2 and minpts = 50')栅格注释(“椭圆”,[0.54 0.41 .07 .07],“颜色”,“红色”)注释(“椭圆”,[0.53 0.85 .07 .07],“颜色”,“蓝”)注释(“椭圆”,[0.39 0.85 .07 .07],“颜色”,“黑色”)
dbscan
识别11个集群和一组噪声点。该算法还将位于集合点中心的车辆识别为一个不同的聚类。
dbscan
标识一些不同的簇,例如以黑色圈定的簇(以(–6,18)为中心)和以蓝色圈定的簇(以(2.5,18)为中心)。该函数还指定一组以红色圈出(并以红色为中心)的点(3,–4
))到与绘图东南象限中的点组相同的簇(组7)。我们的期望是,这些组应该在单独的集群中。
使用较小的值ε
将大簇分开,并进一步分割点。
epsilon2 = 1;labels2 = dbscan (X, epsilon2 minpts);
可视化集群并在图中标注以突出显示特定的集群。
gscatter (X (: 1) X (:, 2), labels2);标题(‘ε=1,minpts=50’)栅格注释(“椭圆”,[0.54 0.41 .07 .07],“颜色”,“红色”)注释(“椭圆”,[0.53 0.85 .07 .07],“颜色”,“蓝”)注释(“椭圆”,[0.39 0.85 .07 .07],“颜色”,“黑色”)
通过使用较小的ε值,dbscan
能够将以红色圈出的点组分配给不同的簇(组13)。但是,有些簇dbscan
以前正确识别的数据现在分为簇点和异常值。例如,请参见簇组2(黑色圆圈)和簇组3(蓝色圆圈)。正确的ε
值介于1和2之间。
使用ε
的价值1.55
群集数据。
epsilon3 = 1.55;labels3 = dbscan (X, epsilon3 minpts);
可视化集群并在图中标注以突出显示特定的集群。
gscatter (X (: 1) X (:, 2), labels3);标题(' = 1.55 and minpts = 50')栅格注释(“椭圆”,[0.54 0.41 .07 .07],“颜色”,“红色”)注释(“椭圆”,[0.53 0.85 .07 .07],“颜色”,“蓝”)注释(“椭圆”,[0.39 0.85 .07 .07],“颜色”,“黑色”)
dbscan
在以下情况下更好地识别集群:ε
被设置为1.55
. 例如,该函数标识以红色、黑色和蓝色(中心围绕)圈出的不同簇(3,–4
),(- 6,18)和(2.5,18))。
[1] Ester, M., h . p .克里格尔,J.桑达,肖伟。“一种基于密度的算法,用于在有噪声的大型空间数据库中发现集群。”在第二届数据库与数据挖掘知识发现国际会议论文集,226-231。波特兰,或:AAAI出版社,1996年。