最近在整理一些聚类算法,还想顺便把FCM、SVM梳理一下的说,反正flag立在这里吧先,比较我的flag老是立了又倒,倒了又立。
介绍一下AP聚类,来也~~~
Affinity Propagation聚类算法
简称AP,是一个在07年发表在Science上面比较新的算法。
AP算法的基本思想是将全部样本看作网络的节点,然后通过网络中各条边的消息传递计算出各样本的聚类中心。聚类过程中,共有两种消息在各节点间传递,分别是吸引度( responsibility)和归属度(availability) 。AP算法通过迭代过程不断更新每一个点的吸引度和归属度值,直到产生m个高质量的Exemplar(类似于质心),同时将其余的数据点分配到相应的聚类中。
在AP算法中有一些特殊名词:
Exemplar:指的是聚类中心,K-Means中的质心。
Similarity:数据点i和点j的相似度记为s(i, j),是指点j作为点i的聚类中心的相似度。一般使用欧氏距离来计算,一般点与点的相似度值全部取为负值;因此,相似度值越大说明点与点的距离越近,便于后面的比较计算。
Preference:数据点i的参考度称为p(i)或s(i,i),是指点i作为聚类中心的参考度。一般取s相似度值的中值。
Responsibility:r(i,k)用来描述点k适合作为数据点i的聚类中心的程度。
Availability:a(i,k)用来描述点i选择点k作为其聚类中心的适合程度。
Damping factor(阻尼系数):主要是起收敛作用的。
在实际计算应用中,最重要的两个参数(也是需要手动指定)是Preference和Damping factor。前者定了聚类数量的多少,值越大聚类数量越多;后者控制算法收敛效果。
算法流程:
1)算法初始化,计算初始相似度矩阵s;s(i,k)是数据点i和k 之间的相似度矩阵[欧式距离]。点与点的相似度值全部取负,即相似度值越大说明点与点之间的距离越近
2)选取p的值;参考度p(也叫偏向参数)表示数据点被选作聚类中心的倾向性, p值决定了 AP算法输出的类别。在无先验知识时,将所有数据点都视为潜在的类代表,则p 设定为S 中元素的中值。
3)计算样本点间的吸引度(responsility)值和归属度值(availabilty);核心内容在于这两个消息反复传递的过程。
吸引度r(i,k)表示数据点k 适合作为数据点i的类代表的吸引程度;
归属度a(i,k)表示数据点i选择点k 作为它的类代表的归属程度。
4)更新r和a,下标t 和t+1分别代表上一次和本次更新消息的最终结果。lam[0.5,1)为阻尼系数,用于调节算法收敛速度和迭代过程的稳定性.
5)确定聚类中心.公式中若i=k,则i是聚类中心;若i≠k,则k是i的聚类中心.
6)如果迭代次数超过设定的最大值或者当聚类中心在若干次迭代中不发生改变时停止计算,确定类 中 心 及 各 类 的 样 本 点;否 则 返 回 (3)继 续计算
AP算法进行交替两个消息传递的步骤,以更新两个矩阵:
· 吸引信息(responsibility)矩阵R:r(i,k)描述了数据对象k适合作为数据对象i的聚类中心的程度,表示的是从i到k的消息;
· 归属信息(availability)矩阵A:a(i,k)描述了数据对象i选择数据对象k作为其据聚类中心的适合程度,表示从k到i的消息。
· 首先,吸引信息(responsibility)按照
· 然后,归属信息(availability),按照
· 对以上步骤进行迭代,如果这些决策经过若干次迭代之后保持不变或者算法执行超过设定的迭代次数,又或者一个小区域内的关于样本点的决策经过数次迭代后保持不变,则算法结束。
为了避免振荡,AP算法更新信息时引入了衰减系数λ。每条信息被设置为它前次迭代更新值的λ倍加上本次信息更新值的1-λ倍。其中,衰减系数λ是介于0到1之间的实数。即第t+1次的迭代值:
关于其算法流程,知乎上kael 用户将AP聚类过程比喻为选举过程:
* 所有人都参加选举(大家都是选民也都是参选人),要选出几个作为代表
* s(i,k)就相当于i对选k这个人的一个固有的偏好程度
* r(i,k)表示用s(i,k)减去最强竞争者的评分,可以理解为k在对i这个选民的竞争中的优势程度
* r(i,k)的更新过程对应选民i对各个参选人的挑选(越出众越有吸引力)
* a(i,k):从公式里可以看到,所有r(i’,k)>0的值都对a有正的加成。对应到我们这个比喻中,就相当于选民i通过网上关于k的民意调查看到:有很多人(即i’们)都觉得k不错(r(i’,k)>0),那么选民i也就会相应地觉得k不错,是个可以相信的选择
* a(i,k)的更新过程对应关于参选人k的民意调查对于选民i的影响(已经有了很多跟随者的人更有吸引力)
* 两者交替的过程也就可以理解为选民在各个参选人之间不断地比较和不断地参考各个参选人给出的民意调查。
* r(i,k)的思想反映的是竞争,a(i,k)则是为了让聚类更成功。
AP聚类算法与经典的K-Means聚类算法相比,具有很多独特之处:
1)无需指定聚类“数量”参数。AP聚类不需要指定K(经典的K-Means)或者是其他描述聚类个数(SOM中的网络结构和规模)的参数,这使得先验经验成为应用的非必需条件,人群应用范围增加。
2)明确的质心(聚类中心点)。样本中的所有数据点都可能成为AP算法中的质心,叫做Examplar,而不是由多个数据点求平均而得到的聚类中心(如K-Means)。
3)对距离矩阵的对称性没要求。AP通过输入相似度矩阵来启动算法,因此允许数据呈非对称,数据适用范围非常大。
4)初始值不敏感。多次执行AP聚类算法,得到的结果是完全一样的,即不需要进行随机选取初值步骤(还是对比K-Means的随机初始值)。
5)算法复杂度较高,为O(N*N*logN),而K-Means只是O(N*K)的复杂度。因此当N比较大时(N>3000),AP聚类算法往往需要算很久。
6)若以误差平方和来衡量算法间的优劣,AP聚类比其他方法的误差平方和都要低。(无论k-center clustering重复多少次,都达不到AP那么低的误差平方和)
AP算法相对K-Means鲁棒性强且准确度较高,但没有任何一个算法是完美的,AP聚类算法也不例外,算法缺点:
1. 虽然AP算法不用提前设置聚类中心的个数,但是需要事先设置参考度,而参考度的大小与聚类中心的个数正相关;
2. 由于AP算法每次迭代都需要更新每个数据点的吸引度值和归属度值,算法复杂度较高,在大数据量下运行时间较长。
1)AP聚类应用中需要手动指定Preference和Damping factor,这其实是原有的聚类“数量”控制的变体。
2)算法较慢。由于AP算法复杂度较高,运行时间相对K-Means长,这会使得尤其在海量数据下运行时耗费的时间很多。
综合来看,由于AP算法不适用均值做质心计算规则,因此对于离群点和异常值不敏感;
同时其初始值不敏感的特性也能保持模型的较好鲁棒性。
这两个突出特征使得它可以作为K-Means算法的一个有效补充,但在大数据量下的耗时过长,这导致它的适用范围只能是少量数据;虽然通过调整damping(收敛规则)可以在一定程度上提升运行速度(damping值调小),但由于算法本身的局限性决定了这也只是杯水车薪。