主要内容

DBSCAN

DBSCAN概论

基于密度的带噪声应用程序空间聚类(DBSCAN)识别数据中任意形状的聚类和噪声(离群值)。统计与机器学习工具箱™ 作用dbscan对输入数据矩阵或观察值之间的成对距离进行聚类。dbscan返回集群索引和表示核心点(集群内的点)的观测值的向量。不像K-表示聚类,DBSCAN算法不需要事先知道聚类数,聚类也不一定是球状的。DBSCAN还可用于基于密度的离群点检测,因为它可以识别不属于任何聚类的点。

对于要分配给簇的点,它必须满足其ε邻域的条件(ε)包含至少一个最小数量的邻居(明普茨).或者,这个点可以在另一个满足的点的邻域内ε明普茨条件。DBSCAN算法识别三类点:

  • 核心点-群集中至少具有明普茨它的邻域

  • 边界点-群集中具有少于个边界点的点明普茨它的邻域

  • 噪声点-不属于任何群集的异常值

DBSCAN可与各种距离度量,您可以为您的特定应用程序定义一个自定义距离度量。距离度量的选择决定了邻域的形状。

算法描述

对于给定的邻域值ε以及最小邻居数明普茨核心点所需的dbscan函数实现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.数据集是激光雷达扫描,存储为三维点的集合,包含车辆周围物体的坐标。

加载、预处理和可视化数据集。

加载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最近距离”网格)

图中包含一个轴对象。标题为k-距离图的轴对象包含一个类型为line的对象。

膝盖在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],“颜色”,“黑色”)

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

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],“颜色”,“黑色”)

图中包含一个Axis对象。标题为epsilon=1和minpts=50的Axis对象包含17个line类型的对象。这些对象表示-1、1、2、3、4、5、6、7、8、9、10、11、12、13、14、15、16。

通过使用较小的ε值,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],“颜色”,“黑色”)

图中包含一个轴对象。标题为epsilon = 1.55和minpts = 50的axes对象包含16个类型为line的对象。这些物体代表-1,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15。

dbscan在以下情况下更好地识别集群:ε被设置为1.55. 例如,该函数标识以红色、黑色和蓝色(中心围绕)圈出的不同簇(3,–4),(- 6,18)和(2.5,18))。

参考文献

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

相关的话题