DBSCAN读作:DB Scan,是英语基于密度的噪声应用空间聚类(Density-Based Spatial Clustering of Applications with Noise)
的简写。在理解K-means聚类算法之后再来理解DBSCAN就容易多了。
DBSCAN的步骤如下:
随机从一个点开始,计算一个半径ε的圆范围内有没有另一个数据,如果有,则不断扩散,将其聚为一类。离群的点(距离其他点比较远的点)无法形成规模(可以自行设置规模)的情况下则不组成簇。用可视化的图片表示如下:
整个过程就类似于病毒“扩散”的过程,在范围内的被同种病毒传播,不在范围内的就传播不到。
在scikit-learn的聚类部分,可以看到不同数据集对应的不同聚类算法的结果:
在聚类问题中,我们要根据数据的大致形状和我们预期的结果去选择不同的聚类算法。
我们按照各个聚类算法在业界的性能、效果、普及程度和应用频率简单排一下名:
- K-Means: 最为广泛使用的聚类算法之一,特别适用于处理大型数据集。 简单、易于实现,通常用于球形簇的识别。
- 层次聚类(Hierarchical Clustering):适用于各种规模的数据集,特别是当簇的层次结构很重要时。
- 生成树状图(Dendrogram),提供了数据的层次分解。
- DBSCAN:优秀的处理噪声和发现任意形状簇的能力。不需要预先指定簇的数量。
- 谱聚类(Spectral Clustering):基于图论,适用于发现复杂结构的簇,尤其是非球形的簇。对数据集的相似性结构非常敏感。
- 高斯混合模型(Gaussian Mixture Models, GMM):软聚类方法,提供了数据点属于每个簇的概率。灵活,可以适应不同大小和不同形状的簇。
- Mean Shift:基于滑动窗口的方法,自动确定簇的数量。适用于寻找任意形状的簇。
- OPTICS(Ordering Points To Identify the Clustering Structure):类似于DBSCAN,但对于变化的密度更加灵活。
- BIRCH(Balanced Iterative Reducing and Clustering using Hierarchies):特别适合于大型数据集。适用于有明显层次结构的数据。