参考1:https://blog.csdn.net/u011511601/article/details/81951939
参考2:https://blog.csdn.net/qq_32951553/article/details/80654663
1 MeanShift(均值偏移)算法
1.1 基本思想
核心概念:沿着密度上升方向寻找聚簇点(爬山算法)。
均值偏移(Mean shift)聚类算法是一种基于滑动窗口(sliding-window)的算法,它试图找到密集的数据点。它还是一种基于中心的算法,它的目标是定位每一组群/类的中心点,通过更新中心点的候选点来实现滑动窗口中的点的平均值。这些候选窗口在后期处理阶段被过滤,以消除几乎重复的部分,形成最后一组中心点及其对应的组。
1.2 算法描述
设想在一个有N个样本点的特征空间
1.初始确定一个中心点center,可以随机选取。
2.计算在设置半径为D的整个圆形空间内所有向量(即包括中心点center)的平均值,得到一个偏移均值。
3.将中心点center移动到偏移均值位置。
4.重复移动,直到满足一定条件结束。
如下图为使用许多滑动窗口完成的MeanShift聚类:
1.3 优势和缺点:
优点:
1)与K-Means聚类
相比,MeanShift聚类
不需要选择聚类的数量,因为它会自动地发现所有的类别。这是一个巨大的优势。聚类中心收敛于最大密度点的事实也是非常可取的,因为它非常直观地理解并适合于一种自然数据驱动。
缺点:
1)缺点是选择窗口大小/半径r是非常关键的,所以不能疏忽。
2 DBSCAN算法
DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一个比较有代表性的基于密度的聚类算法,类似于均值转移聚类算法,但它有几个显著的优点。
2.1基本概念
(1)Eps邻域:给定对象半径Eps内的邻域称为该对象的Eps邻域;
(2)核心点(core point):如果对象的Eps邻域至少包含最小数目MinPts的对象,则称该对象为核心对象;
(3)边界点(edge point):边界点不是核心点,但落在某个核心点的邻域内;
(4)噪音点(outlier point):既不是核心点,也不是边界点的任何点;
(5)直接密度可达(directly density-reachable):给定一个对象集合D,如果p在q的Eps邻域内,而q是一个核心对象,则称对象p从对象q出发时是直接密度可达的;
(6)密度可达(density-reachable):如果存在一个对象链 p1, …,pi,…, pn,满足p1 = p 和pn = q,pi是从pi+1关于Eps和MinPts直接密度可达的,则对象p是从对象q关于Eps和MinPts密度可达的;
(7)密度相连(density-connected):如果存在对象O∈D,使对象p和q都是从O关于Eps和MinPts密度可达的,那么对象p到q是关于Eps和MinPts密度相连的。
(8)类(cluster):设非空集合,若满足:从(a)到(b)和密度相连。则称构成一个类簇
图1红色为核心点,黄色为边界点,蓝色为噪音点,minPts = 4,Eps是图中圆的半径大小有关“直接密度可达”和“密度可达”定义实例如图2所示[5]:其中,Eps用一个相应的半径表示,设MinPts=3,请分析Q,M,P,S,O,R这5个样本点之间的关系。
图2 “直接密度可达”和“密度可达”概念示意描述。根据前文基本概念的描述知道:由于有标记的各点M、P、O和R的Eps近邻均包含3个以上的点,因此它们都是核对象;M是从P“直接密度可达”;而Q则是从M“直接密度可达”;基于上述结果,Q是从P“密度可达”;但P从Q无法“密度可达”(非对称)。类似地,S和R从O是“密度可达”的;O、R和S均是“密度相连”(对称)的。
2.2 DBSCAN算法原理
(1)DBSCAN通过检查数据集中每点的Eps邻域来搜索簇,如果点p的Eps邻域包含的点多于MinPts个,则创建一个以p为核心对象的簇;
(2)然后,DBSCAN迭代地聚集从这些核心对象直接密度可达的对象,这个过程可能涉及一些密度可达簇的合并;
(3)当没有新的点添加到任何簇时,该过程结束。
2.3 DBSCAN算法优缺点
优点:
(1)聚类速度快且能够有效处理噪声点和发现任意形状的空间聚类;
(2)与K-MEANS比较起来,不需要输入要划分的聚类个数;
(3)聚类簇的形状没有偏倚;
(4)可以在需要时输入过滤噪声的参数。
缺点:
(1)当数据量增大时,要求较大的内存支持I/O消耗也很大;
(2)当空间聚类的密度不均匀、聚类间距差相差很大时,聚类质量较差,因为这种情况下参数MinPts和Eps选取困难。
(3)算法聚类效果依赖与距离公式选取,实际应用中常用欧式距离,对于高维数据,存在“维数灾难”。
2.4. 算法描述
输入:包含n个对象的数据库,半径,最少数目MinPts
输出:所有生成的簇,达到密度要求
(1) Repeat
(2) 从数据库中抽取一个未处理的点
(3) IF抽取的点是核心点THEN找出所有从该点密度可达的对象,形成一个簇
(4) ELSE抽出的点是边缘点,跳出本次循环,寻找下一点
(5) UNTIL所有的点都被处理