马尔科夫聚类算法
Posted 深度学习科研平台
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了马尔科夫聚类算法相关的知识,希望对你有一定的参考价值。
聚类算法分为两类:向量聚类和图聚类,而马尔科夫就是属于图聚类算法。
Random Walks:
一个图中,如果有好几个聚类,聚类中的线比较密集,而聚类之间的线比较少,那么从一个点开始随机行走,那么我们更可能待在同一个聚类中,所以这就是马尔科夫聚类算法的中心思想:通过Random Walks,我们可以发现流在哪里汇聚,这样我们就可以发现聚类了。Random Walks 是通过“Markov Chains”计算出来的。
Markov Chains:
如图,我们可以发现,从节点一,我们有33%的概率到达节点 2,3,4,到达节点5 6 7 的概率为0,同理从节点2出发有25%的概率到达1 3 4 5,根据这样的思想,我们可以得到以下矩阵A:
然后下一步操作就是
A*A=D;
D*A=C;
C*A....
直到收敛。
矩阵A的数值我们还可以根据节点间的距离来改变,通过距离来判断两个节点的亲疏关系,例子如下:
然后添加自循环(即把a[i,i]的值变为1)。
MCL
Expansion
2.1Expansion
但是,上面的例子有一个问题。就是对于奇数长度的矩阵,进行奇数次幂的扩大获得的值有很大的影响。同样,对于偶数也有影响。
要解决这个问题,需要对每个节点添加一条自循环的边。通过添加一条长度为1的路径,在计算矩阵的奇数次幂时,这个问题就不在发生。
而对于Markov Chain求幂的运算就称为“Expansion”。
2.2Inflation
同样,先看例子:
上面的变换,即求Inflation的平方运算。由此可以看出,Inflation操作就是:求矩阵中每个元素的n次幂,然后求出的结果除以所在列的所有元素之和。
标准的定义是这样的:
Inflation操作的职责是增大或减小当前概率(增大当前大概率,减小当前小概率)。同时,Inflation的参数r影响聚簇的粒度。
2.3算法
在MCL中,下面两个处理过程交替的重复执行:
Expansion(计算Markov Chain过渡矩阵的幂)
Inflation
Expansion操作的职责是让流连接图的不同区域。
Inflation操作的职责是同时增大和减小当前概率。
算法实现步骤:
输入一个无向图,Expansion的幂e和Inflation的参数r,
创建邻接矩阵,
对每个结点添加自循环(可选的),
标准化矩阵(每个元素除以所在列的所有元素之和),
计算矩阵的第e次幂,
用参数r对求得的矩阵进行Inflation处理,
重复第5步和第6步,直到状态稳定不变(收敛),
把最终结果矩阵转换成聚簇。
2.4收敛矩阵转换为聚簇
为了找到聚簇,把所有的点分为两类:Attractor,聚集其他点;Vertex,被聚集的点。其中,Attractor所在的行必须至少有一个正值。每个Attractor聚集它所在行上有正值的点。然后,Attractor和被它聚集的点被分到一个聚簇。
如上图,则分为{1,6,7,10},{2,3,5},{4,8,9,11,12}三个聚簇。一般来说,看行的正值点。
注意:重叠簇。所谓重叠簇,是指某个点被多个聚簇所共享。
当且仅当某些点等概率的分配到多个聚簇;
当且仅当簇与簇是同构的。
2.6Inflation参数
以上是关于马尔科夫聚类算法的主要内容,如果未能解决你的问题,请参考以下文章
图像聚类基于matlab GUI K-means算法图像聚类含Matlab源码 1787期
内置降维聚类等算法,时间序列数据分析Python库Deeptime
机器学习强基计划7-2:图文详解K-均值聚类(K-means)算法(附Python实现)