吸引子传播(Affinity Propagation)算法

        AP算法诞生于2007年,由于其算法的简单性以及性能的优越性,得以广泛应用,成为K-Means外的又一大常用聚类算法;

        K-Means聚类自身的缺陷在于要人为选取聚类数量以及初始点,算法的性能也完全依赖于上述选择,与K-Means相比,AP避免了此类人工选择,将数据点对之间的相似性度量作为输入,它的核心在于“message passing信息传播”,主要目的为了找到一个样例的典型,即能够代表每一个聚类的样本。

        首先给出两个定义:

1)数据点之间的相似度表示;它表示两个点之间的匹配程度,如果两个点差别很大,比如不属于同一个聚类,那么这个相似度可以忽略或者直接置为-Inf;

2)偏好程度;它表示一个数据点对于某个样例适用性的依赖程度,通常可以通过先验知识来设置;

设有n个数据点:

每两个点之间的相似度:S(i,j);

AP算法同样利用多次迭代,并且每一次迭代都进行两个信息传播的过程,来更新两个矩阵:

1)矩阵R,元素为r(i,k),这个值用来反映相对于点i的其他样例,数据点k充当i的样例的适合程度;

传播方向:i -> k

2)矩阵A,元素为a(i,k),这个值用来反映,在其他点都偏好样例k的条件下,选择k作为数据点i的样例的可靠性;

传播方向:k -> i

初始化:两个矩阵都设为全零矩阵,按照如下方式更新:

首先,更新矩阵R:

然后,更新矩阵A:

 for   and
.

具体请看下图:

吸引子传播(Affinity Propagation)算法_第1张图片

     关于迭代终止条件,可以有多种不同的选择,比如可以当小于某一个阈值或者达到迭代最大次数等等;另外我们可以通过对两个矩阵求和得到很多有用信息:对于点i,当r(i,k)+a(i,k)有最大值时,表明k是i的样例;或者可以利用矩阵主对角线上的元素值信息,如果r(i,i)+a(i,i)>0,则点i就是一个样例。

       AP算法中,我们无需指定聚类数量,但是当我们得到的聚类达不到最优时,就需要对参数作出调节;幸运的是,在AP算法中,只需要调节偏好程度就可以改变聚类数量,偏好程度高聚类数就多,因为一个数据点对于一个确定样例适用的依赖性越高,其被其他样例介入的可能性就越低,也就不会被其他样例的聚类所吸收;反之,偏好程度越低,就会导致聚类数越少,就好比许多数据点都在对同一个样例说“不,不,你已经是一个很好的榜样了,我要加入到你的聚类中去”。一般来说,如果希望聚类数偏大,可以把偏好程度设为中等相似度,如果希望聚类数适中,那么久把偏好程度设为最小相似度,但是具体情况,还需要多次调参以满足需要。

参考:Clustering by passing messages between data points




你可能感兴趣的:(AP,吸引子传播算法)