密度和网格结合的聚类思路,挺适合大数据集的。先把数据集网格化,根据单位格子的密度和到高密度区的距离,挑出聚类中心。逻辑不复杂,思路也清晰,和传统的DBSCAN、密度峰值聚类有点像,但运行速度快不少,尤其大数据量下挺有优势。
网格化数据集空间,避免一上来就全局点对点计算,性能提升还挺。你可以理解为先粗筛一遍,把低密度区直接忽略,只关注那些比较“热闹”的网格。
确定簇心时,算法考虑两个指标:一个是密度高不高,一个是离其它高密度区远不远。这样选出来的点,不容易被噪声干扰,聚类效果还不错。
密度划分的时候,也挺简单暴力。直接根据网格密度关系,把剩下的点归到最近的簇心里。整体聚类过程短,响应也快。执行时间对比DBSCAN、密度峰值聚类,优势挺。
如果你项目里有百万级样本点,像地理位置数据、IoT 监控数据这种,用这个算法试试,效果还蛮稳。源码可以参考下密度峰值聚类算法源码或者DBSCAN Matlab 实现密度聚类算法,改起来不难。
如果你想直接用 Python 跑,Python 密度峰值聚类算法 GUI 版也可以参考下,UI 还算友好,改参数方便。
嗯,唯一需要注意的,就是网格大小的选取,太细了运算多,太粗了聚类效果不准,调参得多试几次。