Affinity Propagation聚类算法详解

Affinity Propagation简称AP, 称之为近邻传播算法, 是一种基于图论的聚类算法。将所有样本点看做是一个网络中的节点,图示如下
在样本点构成的网络中,每个样本点都是潜在的聚类中心,同时也归属于某个聚类中心点,对应这样的两面性,提出了以下两个概念

1. responsibility, 吸引度,对于(i, k)而言,定量描述样本k作为样本i的聚类中心的程度

2. availability,归属度,对于(i, k)而言,定量描述样本i支持样本k作为其聚类中心的程度

具体的定义方式如下

1. Similarity

相似度,这里的定量方式是欧氏距离的负数,公式如下

之所以如此定义,是为了对称性的考量,图这个数据结构的最常见表示方式就是邻接矩阵了,图示如下

基于相似度,我们可以得到样本点之间的相似度矩阵。在该相似度矩阵中,对角线的值为样本自身的距离,理论上是0,但是为了后续更好的应用相似度来更新吸引度和归属度,引入了preference参数。

这个参数就是定义相似度矩阵中对角线上的值,是认为设定的,比如可以取相似度的均值或者中位数。在scikit-learn中,默认用的就是中位数。

这个参数会影响聚类的类别数目,该值越大,聚类的类别数越多。

2. Responsibility

吸引度,公式如下

3. Availability

归属度,公式如下

对于网络中的所有节点,借助邻接矩阵的思想,我们可以计算得到吸引度矩阵R和归属度矩阵A。

AP算法通过迭代的方式来达到聚类效果,每次迭代其实就是更新上述两个矩阵的值, 在更新的时候,引入了一个叫做dumping  factor的参数来控制更新的幅度,公式如下

r(i,k)new = λ*r(i,k)old + (1-λ)*r(i,k)
a(i,k)new = λ*a(i,k)old + (1-λ)*a(i,k)

这个系数的值是需要人为指定的, 建议设置范围为0.5到1。迭代收敛之后,需要挑选作为聚类中心的样本点,选取的标准是样本点的R+A>0, 确定了聚类中心之后,在确定对应的归属点即可。

在scikit-learn中,进行AP聚类的代码如下

>>> from sklearn.cluster import AffinityPropagation
>>> import numpy as np
>>> X = np.array([[1, 2], [1, 4], [1, 0],[4, 2], [4, 4], [4, 0]])
>>> clustering = AffinityPropagation(random_state=5).fit(X)
>>> clustering
AffinityPropagation(random_state=5)
>>> clustering.labels_
array([0, 0, 0, 1, 1, 1], dtype=int32)
>>> clustering.predict([[0, 0], [4, 4]])
array([0, 1], dtype=int32)
>>> clustering.cluster_centers_
array([[1, 2],
       [4, 2]])

作为一种基于图论的聚类算法,该算法适用范围广,不需要事先指定聚类的类别数目K, 而且聚类效果稳定,多次运行的结果一致,但是,该算法也需要人为指定preference和dump factor两个参数,而且算法复杂度比较高,运算时间比较久。

·end·
(0)

相关推荐

  • 表达分析哪家强?层次聚类、k-means、mfuzz、WGCNA?

    表达分析是转录组数据分析中占比很大的一部分内容,可以说是转录组文章的半壁江山了.什么层次聚类.k-mean聚类.mfuzz聚类.WGCNA,什么热图.折线图.网络图,看起来花团锦簇.今天,我们就来点评 ...

  • 【機器學習】聚类算法使用小结

    聚类算法使用小结 k-means 原理 优点 缺点 sklearn 调参 凝聚聚类 原理 优点 缺点 DBSCAN 原理 优点 缺点 sklearn 调参 高斯混合聚类 原理 优点 缺点 MeanSh ...

  • 你可能用了一个"假的"Kmeans

    年三十晚,想起之前写Kmeans聚类的一些感悟. 今天在高铁上,看了一本书,书上又再次出现了这么一句话,我觉得挺好,大体意思是: 在写代码这个事情上,没有人能告诉你怎么做一定对,但是总有人能告诉你,怎 ...

  • SCCAF 单细胞聚类评估框架

    文章信息 文献标题:Putative cell type discovery from single-cell gene expression data 发表时间:2020.05.18 发表杂志:Na ...

  • 新思路!商汤开源利用无标注数据大幅提高精度的人脸识别算法

    人脸识别是最近几年计算机视觉领域取得长足进步的领域,这得益于不断进步的深度学习强大的模型拟合能力和有标注的大型数据集的建立,已经出现了用于人脸识别的有标注的百万量级的数据集. 但继续扩大规模数据集变得 ...

  • spectral-cluster聚类算法详解

    spectral clustering,称之为谱聚类算法,和近邻传播AP算法一样,也是基于图论的算法,都是将样本点两两相连,构成图这一数据结构,不同的是,谱聚类是通过切图的方式来划分不同的cluste ...

  • OPTICS聚类算法详解

    DBSCAN算法对于邻域半径eps和最小样本数minPoints这两个参数比较敏感,不同的参数取值会产生不同的聚类效果.为了降低参数设置对聚类结果造成的不稳定性,在DBSCAN算法的基础上,提出了OP ...

  • DBSCAN聚类算法详解

    DBSCAN全称如下 Density-Based Spatial Clustering of Applications with Noise 是一种基于密度的聚类算法,所谓密度,就是说样本的紧密程度对 ...

  • BIRCH聚类算法详解

    BIRCH算法全称如下 Balanced Iterative Reducing and Clustering Using Hierarchies 属于树状结构的层次聚类算法的一种,其树状结构的构建是自 ...

  • Kmeans聚类算法详解

    输入:样本集 D = { x 1 , x 2 , x 3 , . . . , x m } D=\left \{ x_{1},x_{2},x_{3},...,x_{m} \right \} D={x1​ ...

  • CTC算法详解

    和其它文章初衷一样,网上解释很多,但是讲的不是很明白,在看完几篇参考博客后特此记录 简介 先拿语音识别任务来说,如果现在有一个包含剪辑语音和对应的文本,我们不知道如何将语音片段与文本进行对应,这样对于 ...

  • 十大排序算法详解,基本思想+动画演示+C语言实现,太肝了!

    下面的99%的代码都是手动敲出来的,参考了诸多资料,已经经过测试,可以放心食用. 1.冒泡排序 基本思想 冒泡排序基本思想是依次比较两个相邻的元素,如果顺序(如从大到小.首字母从Z到A)错误就把他们交 ...

  • 道路识别算法详解

    本文详细描述了当前代码中(git 版本: 16b521b12d2e3bdc00bd996acafe4526f1d1cb9a)道路识别的算法. 如果没有特殊说明,下文中所说的"算法" ...

  • 木工、架子工、材料用量算法详解,干货满满

    建筑工程人 11篇原创内容 公众号 一模板的计算 一.根据混凝土量快速估算模板用量 1.适用情况:一般用于工程开工前期,在已知混凝土用量的情况下估算模板用量,以初步估算工程周转材料成本投入数量,为筹措 ...