这篇日志是这个系列里算法部分的最后一篇,关注的是几个相对另类一点的聚类算法:PCCA、SOM和Affinity Propagation。PCCA是设计来专门用于马尔科夫模型的一种聚类算法;SOM是基于神经网络模型的自组织聚类;最后的Affinity Propagation则是在07年才在Science发表的一种较新颖的算法。
6、PCCA
PCCA算法的全称是Perron Cluster Cluster Analysis,名称里有两个cluster是因为这样简写就可以和PCA区分开来(无语……)。PCCA并不是设计来处理传统的聚类问题的,而是专门用于得到马尔科夫链中的cluster。当然,对于一般的聚类问题,只要根据系统特点构造出一个概率转移矩阵,也可以使用PCCA算法。
要解释马尔科夫模型中的cluster,让我们想象有一只跳蚤在了数据点间跳跃转移。它下一个时刻跳到特定数据点上的概率,只跟它当前落在哪个数据点上有关,这显然是一个经典的马尔可夫过程。再让我们假定,跳蚤在点与点之间的跃迁概率跟数据点的“距离”成反比。如果数据点可以分成几个分界明显的cluster,跳蚤大多数时间就只会在某个cluster内部的数据点间转移,在cluster之间的跳跃则相对罕见。
先解释一下马尔科夫模型的一些性质。马尔科夫模型需要的是一个转移矩阵A,元素A(i,j)表示系统从状态i转移到状态j的概率。矩阵的每一列元素之和必须为1,这是因为转移概率总和必须为1。转移矩阵有一个本征值为1的本征矢量,对应着系统的稳态,亦即系统到达这个状态后,它在各个状态的概率分布就不会再发生变化。
为了说明PCCA的原理,我们直接来考虑最为极端的情况,也就是系统由几个完全分离的cluster所构成。对于最为极端的情况,如果系统只能在cluster内部转移,而完全不会在cluster之间转移,那么转移矩阵A就会是分块矩阵的形式,比如下面的系统就可以分为两个完全不连通的cluster,如下面的矩阵。