vlambda博客
学习文章列表

聚类算法讲解:KMEANS和DBSCAN

K-MEANS主要是用来处理无监督问题的聚类算法,是聚类算法最简单也是最实用的算法。

此算法首先需要指定K值,也就是想要将数据聚成K类、K簇。第二个概念就是质心,即均值,一簇数据在每个维度取均值即这个簇的质心。第三个概念是距离的度量,用来判断样本点的相似度,最常用的度量方式是欧式距离和余弦相似度。先对数据进行标准化,各维度的单位长度差异比较大,保证取值范围在较小范围内浮动。

优化目标:样本到各类质心的距离越小越好。样本点到质心的距离越近说明,说明此类样本点越距离,聚类越准确。

KMEANS工作流程:

1. 先设定K值

2. 随机初始化K个质心点

3. 计算每个样本点到各个质心点的距离,样本点距离哪个质心的距离最小,就归到哪一类中。

4. 所有的样本点都归类结束后,更新质心点。对每个类重新算均值,算质心。

5. 重新遍历样本点,对样本点重新计算距离并归类。

6. 直到样本点分类不在发生变化,停止更新

聚类算法讲解:KMEANS和DBSCAN


优点:简单、快速、适合常规数据集


缺点:K值难确定、复杂度与样本数量呈线性关系、很难发现不规则形状的簇


DBSCAN

首先介绍几个概念:

核心对象:若以某个点为圆心,r为半径,若此圆内点的个数不小于设定的阈值minPts,则称此圆心为核心对象。半径r和阈值minPts都需要提前指定。DBSCAN无需设定K值


直接密度可达:若点p在点q的r邻域内,且q是核心对象,则pq直接密度可达。


密度可达:若有一个点的序列q0,q1,…qk,对任意qi到qi-1都是直接密度可达,则称从q0到qk密度可达,这实际上是直接密度可达的传播。


边界点:以边界点为中心的r邻域内除了上线之外没有别的点,即有上线无下线。


噪声点:不属于任何一个簇的点,从任何一个核心对象出发都是密度不可达的。以边界点为中心的r邻域内没有点

工作流程:

1. 数据集

2. 指定半径r

3. 密度阈值


KMEANS具体工作流程如下:

  1. 随机选择一个未标记点p将其标记

  2. 如果p是核心对象,则将其添加到类C

  3. N是点p r邻域内所有点的集合

  4. 对于N内的点遍历,遍历过的都标记

  5. 并且这些点如果也是核心对象,那么把这些点r邻域内的点加到N集合中

  6. 如果这些点不属于任何类,则归到C类

  7. 直到剩下的点都是边界点

  8. 对于剩下的没被标记的,选一个点作为点p继续循环上述过程

  9. 直到所有点都被标记

半径r的确定:k距离

给定数据集P,计算出Pi到其他点的距离,将距离从小到大进行排序,若距离dk和dk+1的差距非常大,则选择突变点dk为半径r

minPts:一般取小一些。


优势:

1. 不需要指定簇的个数K值

2. 可以发现任意形状的簇

3. 擅长找到离群点,做异常检测任务

4. 两个参数即可


缺点:

1. 高维数据处理起来有点困难

2. 参数难以选择,且对结果的影响比较大

3. 效率比较慢。