Affinity Propagation (AP) 聚类
来源:互联网 发布:手机吉他调音软件 编辑:程序博客网 时间:2024/05/17 13:06
转载并参考了(http://blog.csdn.net/doctor_feng/article/details/18778921;http://www.cnblogs.com/huadongw/p/4202492.html,的博客)
Affinity Propagation (AP) 聚类是2007年在Science杂志上提出的一种新的聚类算法。它根据N个数据点之间的相似度进行聚类,这些相似度可以是对称的,即两个数据点互相之间的相似度一样(如欧氏距离);也可以是不对称的,即两个数据点互相之间的相似度不等。这些相似度组成N×N的相似度矩阵S(其中N为有N个数据点)。
在这里介绍几个文中常出现的名词:
exemplar:指的是聚类中心。
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:阻尼系数,主要是起收敛作用的。
AP聚类算法是基于数据点间的"信息传递"的一种聚类算法。与k-均值算法或k中心点算法不同,AP算法不需要在运行算法之前确定聚类的个数。AP算法寻找的"examplars"即聚类中心点是数据集合中实际存在的点,作为每类的代表。
算法描述:
假设
AP算法进行交替两个消息传递的步骤,以更新两个矩阵:
- 吸引信息(responsibility)矩阵R:
r(i,k) r(i,k)描述了数据对象k适合作为数据对象i的聚类中心的程度,表示的是从i到k的消息; - 归属信息(availability)矩阵A:
a(i,k) a(i,k)描述了数据对象i选择数据对象k作为其据聚类中心的适合程度,表示从k到i的消息。
两个矩阵R ,A中的全部初始化为0. 可以看成Log-概率表。这个算法通过以下步骤迭代进行:
- 首先,吸引信息(responsibility)
rt+1(i,k) rt+1(i,k)按照
的迭代。
- 然后,归属信息(availability)
at+1(i,k) at+1(i,k)按照
和
迭代。
- 对以上步骤进行迭代,如果这些决策经过若干次迭代之后保持不变或者算法执行超过设定的迭代次数,又或者一个小区域内的关于样本点的决策经过数次迭代后保持不变,则算法结束。
为了避免振荡,AP算法更新信息时引入了衰减系数
图1 算法实现过程
图2 对人脸数据库的聚类结果比较
下面就它的优缺点进行简要的叙述,不做任何理论上的解释:
[1] 与众多聚类算法不同,AP聚类不需要指定K(经典的K-Means)或者是其他描述聚类个数(SOM中的网络结构和规模)的参数。
[2] 一个聚类中最具代表性的点在AP算法中叫做Examplar,与其他算法中的聚类中心不同,examplar是原始数据中确切存在的一个数据点,而不是由多个数据点求平均而得到的聚类中心(K-Means)。
[3] 多次执行AP聚类算法,得到的结果是完全一样的,即不需要进行随机选取初值步骤。
[4] 算法复杂度较高,为O(N*N*logN),而K-Means只是O(N*K)的复杂度。因此当N比较大时(N>3000),AP聚类算法往往需要算很久。。
[*5] 若以误差平方和来衡量算法间的优劣,AP聚类比其他方法的误差平方和都要低。(无论k-center clustering重复多少次,都达不到AP那么低的误差平方和)
[*6] AP通过输入相似度矩阵来启动算法,因此允许数据呈非欧拉分布,也允许非常规的点-点度量方法。
最近在学习AP聚类算法,网上找了好多资料(http://blog.csdn.NET/dreamd1987/article/details/8923035, http://www.doc88.com/p-239796915955.html, http://www.doc88.com/p-886680412462.html),对于AP的迭代公式都不太相同,后经过验证找到了正确的迭代公式,总结一下,以后备用:
算法原理:
AP算法是一种根据数据对象之间的相似度自动进行聚类的方法,隶属于划分聚类方法的一种。数据对象之间的相似度根据不同的场景选择不同的衡量准则,如欧式距离,随相似准则的不同,数据对象之间的相似度可能是对称的,也可能是非对称的。这些相似度组成N*N(N为数据对象的数目)的相似矩阵S,利用该矩阵进行自动迭代计算。注:相似度矩阵应该是一个负值矩阵,即每个元素的值不能大于0,如果用欧式距离,那么取负值即可。
AP算法根据S对角线的数值最为某个点能否成为聚类中心的评判标准,该值越大,该点成为簇中心的可能性越大,对角线上的值称为参考度p。p的大小影响簇中心的数目,若认为每个数据对象都有可能作为簇中心,那么p就应该取相同的值(此时S对角线的值都为p),当然可以根据不同点成为簇中心的可能性大小,取不同的p值(此时S对角线上的值就会不同)。如果p等于S矩阵中所有元素的均值,那么得到的簇中心数目是中等的;如果取最小相似度,那么得到较少的聚类。
AP算法有两个重要的消息,Responsibility和Availability。R(i,k)描述了数据对象k适合作为数据对象i的聚类中心的程度,表示的是从i到k的消息;A(i,k)描述了数据对象i选择数据对象k作为其据聚类中心的适合程度,表示从k到i的消息。R(i,k)与A(i,k)越大,那么数据对象k就越有可能作为聚类的中心。AP算法就是不断迭代更新每一个数据对象的吸引度和归属度,直到迭代一定的次数,产生m个高质量的exemplar,同时将其余数据对象分配到相应的聚类中。
迭代公式:网上看到不同的版本,经过测试,公式如下:
(1)吸引度迭代公式
(2)归属度迭代公式:
当t为0时A(i,k)和R(i,k)为0.
整个AP算法的过程是先迭代R(i,k),利用迭代后的R再迭代A(i,k)。一次迭代包括R和A的迭代,每次迭代后,将R(k,k)+A(k,k)大于0的数据对象k作为簇中心。当迭代次数超过设置阈值时(如1000次)或者当聚类中心连续多少次迭代不发生改变时终止迭代(如50次)。
AP算法的迭代次数和聚类数目主要受到两个参数的影响。其中聚类数目主要受参考度p(该值为负值)的影响,该值越大,聚类数目越多。参数lamd称为阻尼系数,由公式可以看出,该值越小,那么R和A相比上一次迭代的R和A会发生较大的变化,迭代次数会减少。阻尼系数一般取值为(0,1)。
算法步骤:1)先计算数据对象之间的相似度,得到相似矩阵;2)不断迭代R和A,得到簇中心;3)根据簇中心划分数据对象。
优点:1)不需要像k-menas、k-medoids(如PAM、CLABA等)事先给出聚类数目;
缺点:1)AP算法需要事先计算每对数据对象之间的相似度,如果数据对象太多的话,内存放不下,若存在数据库,频繁访问数据库也需要时间。如果计算过程中实时计算相似度,那么计算量就上去了;2)AP算法的时间复杂度较高,一次迭代大概O(N3);3)聚类的好坏受到参考度和阻尼系数的影响。
例子:读入的文件内容为二维点:
数据对象编号\t X值\t Y值
1 0.1 0.1
2 0.3 0.1
3 0.3 0.3
4 0.1 0.3
5 0.2 0.2
6 0.5 0.5
7 0.7 0.5
8 0.7 0.7
9 0.5 0.7
10 0.6 0.6
聚类结果的簇中心为两个,分别为点(0.2,0.2)(簇编号为1)和(0.6,0.6)(簇编号为2)。
输出簇中心和聚类结果:
簇内变差:1.13137
数据对象编号\t所属的簇编号
1 1
2 1
3 1
4 1
5 1
6 2
7 2
8 2
9 2
10 2
- Affinity Propagation (AP) 聚类
- ap(affinity propagation)聚类算法
- 聚类算法Affinity Propagation(AP)
- Affinity Propagation: AP聚类算法
- 聚类 6 Affinity Propagation
- 聚类Affinity Propagation
- Affinity Propagation (AP) 聚类算法的Java实现
- 对AP(Affinity Propagation)聚类算法的理解
- python 实现 AP近邻传播聚类算法(Affinity Propagation)
- 对AP(Affinity Propagation)聚类算法的理解
- python 实现 AP近邻传播聚类算法(Affinity Propagation)
- Affinity Propagation
- 聚类(6)-- Affinity Propagation Clustering
- 谱聚类、Chameleon聚类、PCCA、SOM、Affinity Propagation
- Multi-Exemplar Affinity Propagation
- Affinity propagation for clustering
- Multi-Exemplar Affinity Propagation
- affinity propagation 近邻传播算法
- iOS 程序内存指针和对象的理解
- 【NOIP2008】【二分图染色】T4 双栈排序 题解
- 教育孩子幻想系列-对去学校学习知识的理解
- javadoc 文档注解
- 关于iOS textView文字长短限制
- Affinity Propagation (AP) 聚类
- 深度学习(五十二)变分贝叶斯自编码器(下)
- dubbo分布式项目开发____dubbo控制台管理
- iOS GPUImage研究序一:内置滤镜
- 一些面试java
- 文本框输入数字显示千位分隔符,大写提示
- HashMap HashTable和ConcurrentHashMap
- Android 带着Cookie访问一个网页
- MYSQL中GROUP BY进行数据统计