直接说结论:全量聚类用 DBSCAN;无监督流式聚类用 DenStream;已知聚类数、按较大时间间隔获取聚类标签且对计算量敏感,用 CluStream.
GitHub 项目地址:stream-clustering
本文涉及的内容包括:
- 提供 DBSCAN、DenStream 和 CluStream 三种聚类算法的使用示例
- 开发对 DBSCAN 自动调参并输出聚类标签的函数 auto_dbscan
- 验证 DenStream 的推理结果(簇号)是否在学习过程中发生变化:会变
- DBSCAN、DenStream 和 CluStream 全量训练效果对比:DBSCAN 最好
- DenStream 和 CluStream 增量训练效果对比:DenStream 最好
✨ 注意:运行以下代码依赖 utils.py 文件。
一、DBSCAN
DBSCAN 是一种基于密度的聚类算法,用于从大量数据中识别出高密度区域并将其分为不同的簇。与传统的基于划分的聚类算法(如 K-means)不同,DBSCAN 不需要预先指定簇的数量,并且能够识别噪声数据和异常值。
- DBSCAN 算法介绍
- DBSCAN 的简单示例
- DBSCAN 的可选参数
- DBSCAN 自动调参:
- 基于 K 距离图选择
eps
- 选择
min_samples
的经验法则 - 使用网格搜索结合合适的评估指标
- 基于 K 距离图选择
- 使用
best_params
进行聚类 - 一站式 DBSCAN 函数
二、DenStream
DenStream 适合不知道具体的聚类数,且需要实时获取聚类标签的情况。
- DenStream 算法介绍
- DenStream 的简单示例
- DenStream 的可选参数
- 验证:推理结果是否随时间变化
- DBSCAN 与 DenStream 效果对比
- 使用 DBSCAN 优化过的
epsilon
参数
三、CluStream
CluStream 是一种需要明确指定聚类数的算法。它在一段时间内的聚类效果不错,也就是说,如果你的需求是有时间间隔的,比如每 10 分钟获取一次聚类结果,CluStream 的效果是可以接受的。
- CluStream 算法介绍
- CluStream 的简单示例
- CluStream 的可选参数
- CluStream 全量训练:
- 宏簇数量 与 真实聚类数 相等的情况
- 宏簇数量 与 真实聚类数 不等的情况
- DenStream 与 CluStream 增量训练效果对比
四、附录:轮廓系数
轮廓系数是一种用于评估聚类效果的指标,它从单个样本的角度衡量其聚类的合理性。轮廓系数综合考虑了样本与其所属簇内点的相似性(紧密度)和样本与其最近簇的点的相似性(分离度)。