使用Python实现为测井而生的聚类算法,基于图的多分辨率聚类算法(MRGC)
前言
基于图的多分辨率聚类算法(Multi-Resolution Graph-based Clustering, 简称MRGC)原本是专为石油中测井的数据分析设计的算法,不过由于其出色的表现,它也可以被应用到别的邻域中。
聚类是一种常用的无监督数据分析手段,常用的聚类算法有K-Means、DBSCAN、层次聚类。这三个聚类算法各有千秋:K-Means虽然然简单,但是它无法识别出非球形类簇,而且在使用前需要手动指定最佳聚类数,但是确定最佳聚类数并不容易;DBSCAN虽然可以识别出任意形状的类簇,不过其聚类结果受初始参数邻域半径( ϵ \epsilon ϵ)和邻域内最小样本数(MinPts)的影响非常大;层次聚类算法虽然不用事先指定类簇的数量,但是其也难以识别非球形类簇,而且当数据量很大时,在确定划分层次时容易受到主观因素影响。
而基于图的多分辨率聚类算法(Multi-Resolution Graph-based Clustering, 简称MRGC),在保留以上三种算法的优点的基础上,还解决了以上三种算法的缺点。
算法优势
识别非球形类簇
MRGC在度量两个样本间的相似度时,并没有直接使用距离,而是使用两个样本间的相互近邻关系,如:A是B的第m个近邻,B是A的第n个近邻。在此基础上,MRGC提出了近邻指数(Neighboring Index)的概念,以此来估计数据集的局部概率密度。相互近邻关系以及近邻指数的结合,使得MRGC可以识别非球形类簇。
确定最佳聚类数
MRGC在近邻指数的基础上提出了核心代表指数(Kernel Representative Index)的概念,通过对所有样本点的核心代表指排序,并在直方图上画出前m大的核心代表指数,直方图会呈现出多处断崖式下跌的情况,每一处断崖式下跌之前的核心代表指数的数量,就是最佳聚类数。如下图所示,MRGC总共识别出了两个最佳聚类数2和4。
多分辨率
MRGC算法在识别最佳聚类数时,会识别出不止一个最佳聚类数。如上图所示,MRGC识别出了两个最佳聚类数2和4,这意味着,聚类时既可以聚2个类也可以聚4个类,但这两个结果并非是相互独立的,聚4个类的结果其实是从聚2个类的结果中分裂出来的。这样一来就可以根据实际情况选择合适的聚类分辨率。
受初始参数影响小
MRGC的聚类结果受初始聚类参数的影响小。在实际使用中,除了设置聚类数,几乎不用设置其他参数,在仅使用默认值的情况下就能取得很好的效果。
效果展示
为了方便演示,这里使用的是随机数据集。
球形类簇
-
数据集
-
聚类结果
非球形类簇
-
数据集
-
聚类结果
最后
MRGC原论文地址:https://onepetro.org/SPWLAALS/proceedings/SPWLA-2000/All-SPWLA-2000/SPWLA-2000-PP/27122
Python代码获取方式:https://mbd.pub/o/bread/ZZmXlJZv