DBSCAN聚类算法介绍
1. DBSCAN是什么?
1.1初见美人
基于密度的噪声应用空间聚类(DBSCAN)是一种无监督的ML聚类算法。无监督的意思是它不使用预先标记的目标来聚类数据点。聚类是指试图将相似的数据点分组到人工确定的组或簇中。它可以替代KMeans和层次聚类等流行的聚类算法。与KMeans算法不同,它不需要确定聚类的数量,而是基于数据推测聚类的数目,它能够针对任意形状产生聚类。
1.2算法参数介绍
- 两个重要的参数:
epsilon:在一个点周围邻近区域的半径
这个值越大,聚类后的集合范围就更大,包含更多的数据点。形成的集群数目就会越小。
minPts:邻近区域内至少包含点的个数
就是上面一个参数一定半径内的最少点数。如果一定半径内,数据点小于minPts,则该范围内的数据不计入当前簇。越小的值,会产生越多的集群分类。较大的值将产生较大的集群。
例:如果“最小点”= 4,则在彼此距离内的任意4个或4个以上的点都被认为是一个簇
- 其他参数:
epsilon-neighborhood:简称(e-nbhd)表示半径为e且含有若干数据的集群,
密度空间=一定空间内的数据数/空间大小
例:图中中心点是(3,2),半径epsilon是0.5,(图片来自:FAIRY_ZHANG_)
1.3样本点的分类
- 核心点(core point):在半径Eps内含有超过MinPts数目的点。也就是,核心点在其近邻距离内至少有最少数量的样本点
- 边缘点(border point):在半径Eps内点的数量小于MinPts,但是落在核心点的邻域内的点。
- 离群点(Outlier):既不是核心点也不是边界点的点。这些点处于低密度地区,也叫做噪声点
图示:(图片来自deephub)
随机选取一个点,找到半径EPS内的数据点,与minPts比较,>则为核心点,>0&<minPts则为边界点,=0则为离群点(图片来自deephub)
再来一张图加深理解
2. 算法流程
看过上面的样本点分类,相信你聪明的脑瓜里已经有了算法的雏形。
- 随便找一个点作为起始点,根据NBHD(p,epsilon),判断点的类型
- 找到一个核心点,建立一个类,加入符合NBHD的样本点到该类中,直到该类的所有边缘点的NBHD都加入这个类中,则这个类结束
- 重复上述1,2。遍历所有的点
- 得到若干个类和离群点(噪音点)
例:(图片来自:博客园bonelee)
3. 算法的优缺点
3.1它哪里好?
- 不需要确定聚类的数量,而是根据不同的NBHD得出聚类的数量。不需要像KMeans那样预先确定集群的数量
- 可以产生任何形状的聚类,(kmeans聚类算法只能处理球形的簇)
- 异常值不敏感(噪音点)
3.2 它哪里不好
- 难以聚类高维数据(也就是NBHD如何选取)
- 参数敏感
4.代码实现
码了再来补,哈哈
5. 一个算法可视化的网站
https://www.naftaliharris.com/blog/visualizing-dbscan-clustering/
码了再来补,哈哈