当前位置:网站首页>基于图的 Affinity Propagation 聚类计算公式详解和代码示例
基于图的 Affinity Propagation 聚类计算公式详解和代码示例
2022-07-01 18:49:00 【deephub】
谱聚类和AP聚类是基于图的两种聚类,在这里我介绍AP聚类。
Affinity Propagation Clustering(简称AP算法)是2007提出的,当时发表在Science上《single-exemplar-based》。特别适合高维、多类数据快速聚类,相比传统的聚类算法,该算法算是比较新的,从聚类性能和效率方面都有大幅度的提升。
Affinity Propagation可以翻译为关联传播,它是一种基于数据点之间“消息传递”概念的聚类技术,所以我们称其为基于图的聚类方法。
该算法通过在数据点之间发送消息直到收敛来创建簇。它以数据点之间的相似性作为输入,并根据一定的标准确定范例。在数据点之间交换消息,直到获得一组高质量的范例。与k-means或k-medoids等聚类算法不同,传播在运行算法之前不需要确定或估计簇的数量。
公式详解
我们使用下面的数据集,来介绍算法的工作原理。

相似矩阵
相似度矩阵中的每一个单元格都是通过对参与者之间的差值平方和求负来计算的。
比如 Alice 和 Bob 的相似度,差的平方和为 (3–4)² + (4–3)² + (3–5)² + (2–1)² + (1– 1)² = 7。因此,Alice 和 Bob 的相似度值为 -(7)。

如果为对角线选择较小的值,则该算法将围绕少量集群收敛,反之亦然。因此我们用 -22 填充相似矩阵的对角元素,这是我们相似矩阵中的最小值。

吸引度(Responsibility)矩阵
我们将首先构造一个所有元素都设为0的可用性矩阵。然后,我们将使用以下公式计算吸引度矩阵中的每个单元格:

这里i指的是行,k指的是相关矩阵的列。
例如,Bob(列)对Alice(行)的吸引度是-1,这是通过从Bob和Alice的相似度(-7)中减去Alice所在行的最大相似度(Bob和Alice的相似度(-6)除外)来计算的。

在计算了其他参与者对的吸引度之后,我们得到了下面的矩阵。

吸引度是用来描述点k适合作为数据点i的聚类中心的程度。
归属度(Availability)矩阵
为了构造一个归属度矩阵,将使用对角和非对角元素的两个单独的方程进行计算,并将它们应用到我们的吸引度矩阵中。
对角线元素将使用下面的公式。

这里 i 指的是关联矩阵的行和 k 列。
该等式告诉我们沿列计算所有大于 0 的值的总和,但值等于所讨论列的行除外。例如,Alice 的对角线上元素值将是 Alice 列的正值之和,但不包括 Alice 列的值,等于 21(10 + 11 + 0 + 0)。

修改后,我们的归属度矩阵将如下所示:

现在对于非对角元素,使用以下等式更新它们的值。

通过一个例子来理解上面的等式。假设我们需要找到 Bob(列)对 Alice(行)的归属度,那么它将是 Bob 的自我归属(在对角线上)和 Bob 列的剩余积极吸引度的总和,不包括 Bob 的Alice行(-15 + 0 + 0 + 0 = -15)。
在计算其余部分后,得到以下归属度矩阵。

归属度可以理解为用来描述点i选择点k作为其聚类中心的适合程度。
准据(Criterion)矩阵
准据矩阵中的每个单元格只是该位置的吸引度矩阵和归属度矩阵相加的和。


每行中具有最高准据值的列被指定为样本。共享同一个实例的行在同一个簇中。在我们的示例中。Alice、Bob、Cary 、Doug 和 Edna 都属于同一个集群。
如果情况是这样:

那么Alice、Bob 和 Cary 构成一个簇,而 Doug 和 Edna 构成第二个簇。
Criterion被我翻译成准据也就是说明这个矩阵是我们聚类算法判断的标准和依据。
代码示例
在sklearn中已经包含了该算法,所以我们可以拿来直接使用:
import numpy as np
from matplotlib import pyplot as plt
import seaborn as sns
sns.set()
from sklearn.datasets import make_blobs
from sklearn.cluster import AffinityPropagation
从 Sklearn 生成聚类数据
X, clusters = make_blobs(n_samples=1000, centers=5, cluster_std=0.8, random_state=0)
plt.scatter(X[:,0], X[:,1], alpha=0.7, edgecolors='b')

初始化和拟合模型。
af = AffinityPropagation(preference=-50)
clustering = af.fit(X)
AP聚类应用中需要手动指定Preference和Damping factor,虽然不需要显式指定簇的数量,但是这两个参数其实是原有的聚类“数量”控制的变体:
Preference:数据点i的参考度称为p(i)或s(i,i),是指点i作为聚类中心的参考度,聚类的数量受到参考度p的影响,如果认为每个数据点都有可能作为聚类中心,那么p就应取相同的值。如果取输入的相似度的均值作为p的值,得到聚类数量是中等的。如果取最小值,得到类数较少的聚类。
Damping factor(阻尼系数):主要是起收敛作用的。
绘制聚类结果的数据点
plt.scatter(X[:,0], X[:,1], c=clustering.labels_, cmap=‘rainbow’, alpha=0.7, edgecolors=‘b’)

总结
Affinity Propagation 是一种无监督机器学习技术,特别适用于我们不知道最佳集群数量的情况。并且该算法复杂度较高,所以运行时间相对比K-Means长很多,这会使得尤其在海量数据下运行时耗费的时间很多。
https://avoid.overfit.cn/post/70c0efd697ef43a6a43fea8938afff60
作者:Sarthak Kedia
边栏推荐
- Modsim basic use (Modbus simulator)
- 一个悄然崛起的国产软件,低调又强大!
- Understand the structure in C language in one article
- List is divided into sets that meet and do not meet conditions (partitioningby)
- 【AI服务器搭建】CUDA环境
- Related concepts of cookies and sessions
- 面试题篇一
- 新增订单如何防止重复提交
- Object creation
- Win11暂停更新点不了怎么办?Win11暂停更新是灰色的如何解决?
猜你喜欢

DDR4 test-2

使用Zadig从0到1搭建持续交付平台

Regular expression =regex=regular expression

为定时器和延时器等其它情况的回调函数绑定当前作用域的this

The key to the success of digital transformation enterprises is to create value with data

Procédure de mesure du capteur d'accord vibrant par le module d'acquisition d'accord vibrant

【AI服务器搭建】CUDA环境

优质笔记软件综合评测和详细盘点(一) Notion、Obsidian、RemNote、FlowUs

Solve the problem of slow or failed vscode download

Redis installation and startup in Windows environment (background startup)
随机推荐
docker ubuntu容器中安装mysql遇到的问题
Battery simulation of gazebo robot
A quietly rising domestic software, low-key and powerful!
较真儿学源码系列-InheritableThreadLocal(逐行源码带你分析作者思路)
Unreal Engine packaging project
类加载机制
今日群里分享的面试题
【AI服务器搭建】CUDA环境
Win11快捷键切换输入法无反应怎么办?快捷键切换输入法没有反应
Oracle physical architecture
毕业季 | 华为专家亲授面试秘诀:如何拿到大厂高薪offer?
CMU AI PhD first year summary
Redo和Undo的区别
Shell advanced
JS ternary expression complex condition judgment
集合对象值改变NULL值对象
How to add transactions in JDBC
Anaconda安装虚拟环境到指定路径
Difference between redo and undo