一种聚类算法-Affinity Propagation(AP)

motivation:

·手头有几个list,每个list中有一些对象(string),将一个list看做一个节点,两个节点(list)之间的“相似度”定义为:两个list中包含的对象的重合程度( (listA∩listB) / (listA∪listB) )。

·现在基于节点和节点之间的相似度,想现有的节点聚类(相似度更高的节点聚在一起)


算法简介:

Affinity Propagation 算法简称AP,是2007年发表在Science上的聚类算法。

Brendan J. Frey and Delbert Dueck, “Clustering by Passing Messages Between Data Points”, Science Feb. 2007

AP算法的基本思想是将全部样本看做网络的节点,然后通过网络中各条边的消息传递计算出个样本的聚类中心。聚类过程中,共有两种消息在各节点间传递,分别是吸引度(responsibility)和归属度(availability)。AP算法通过迭代过程不断更新每一个点的吸引度和归属度,直到产生m个高质量的Exemplar(相当于质心),同时将其余的数据点分配到相应的聚类中。

    在实际的使用中,AP有两个需要手动设置的重要参数,preference和damping factor。前者定了聚类数量的多少,值越大聚类数量越多;后者控制算法的收敛效果

AP算法相比于K-means算法,鲁棒性强,准确度较高,但算法复杂度高,运算消耗时间多


算法使用

sklearn中已经实现了AP算法,可以直接调用(当然,首先需要安装)。

安装完成之后,导入AffinityPropagation

from  sklearn.cluster  import  AffinityPropagation

模拟输入数据为一个矩阵,M(i, j)表示i节点和j节点的相关度

M = 

[[1, 0.8, 0.1, 0.1, 0.1],

[0.8, 1, 0.1, 0.1, 0.1],

[0.1, 0.1, 1, 0.9, 0.1],

[0.1, 0.1, 0.9, 1, 0.1],

[0.1, 0.1, 0.1, 0.1, 1]]

此时,可以将矩阵M直接输入

af = AffinityPropagation(affinity='precomputed').fit(X)

label = af.fit_predict(X)

此处

affinity='precomputed'

表示AP算法设置的参数,affinity参数表示节点之间相似度的计算方法,'precomputed'表示相似度已经计算完毕,所以输入的矩阵M是相似度矩阵。当设置为'euclidean'时,输入的不是相似度矩阵,而且一个节点的list,每个节点可以通过多维坐标表示(所以是个二维list)

输出的label是一个lsit:

[1 1 0 0 1]

每一维表示一个聚类标签,长度n即为之前输入的矩阵M(n*n)的n。


至此,聚类完成!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 写在之前 因简书导入公式很麻烦,如果想获得更好的观看体验请移步https://www.zybuluo.com/ha...
    hainingwyx阅读 7,035评论 2 13
  • 一年前需要用聚类算法时,自己从一些sklearn文档和博客粗略整理了一些相关的知识,记录在电子笔记里备忘,现在发到...
    wong11阅读 44,993评论 0 19
  • 注,有疑问 加QQ群..[174225475].. 共同探讨进步有偿求助请 出门左转 door , 合作愉快 1....
    飘舞的鼻涕阅读 3,867评论 0 2
  • 前言 其实读完斯坦福的这本《互联网大规模数据挖掘》,让我感觉到,什么是人工智能?人工智能就是更高层次的数据挖掘。机...
    我偏笑_NSNirvana阅读 13,105评论 1 23
  • 这是一场令人深思的心灵对话,也许是太过复杂且深刻,就像古文明中一场暴行下的废墟,当我们逃离了那个时代,回过头...
    谈休一阅读 667评论 0 0

友情链接更多精彩内容