AP聚类(Affinity Propagation Clustering)是一种基于消息传递的聚类算法,由Brendan J. Frey和Delbert Dueck于2007年提出。与传统的聚类算法(如K-Means)不同,AP聚类不需要预先指定聚类数量,而是通过数据点之间的相似度自动确定聚类中心和聚类数量。
相似度矩阵:
责任矩阵(Responsibility):
可用性矩阵(Availability):
消息传递:
聚类中心:
以下是使用 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]])
# 创建AP聚类模型
af = AffinityPropagation(preference=-50).fit(X)
# 获取聚类结果
cluster_centers_indices = af.cluster_centers_indices_
labels = af.labels_
print("聚类中心索引:", cluster_centers_indices)
print("聚类标签:", labels)
preference
:
preference
为所有相似度的中位数。damping
:
max_iter
:
AP聚类是一种强大的聚类算法,特别适合中小规模数据集和不需要预先指定聚类数量的场景。然而,它的计算复杂度较高,不适合处理大规模数据。在实际应用中,可以根据数据特点选择合适的聚类算法。
我来给你简单介绍一下 AP 聚类,也叫 Affinity Propagation 聚类(亲和传播聚类)。
由两位学者 Brendan J. Frey 和 Delbert Dueck 在 2007 年提出。
每个点都可以是潜在的聚类中心。
点之间互相传递两种消息:
归属度(Responsibility):点 i 认为点 k 作为它的簇中心的适合程度。
可用度(Availability):点 k 认为自己作为点 i 簇中心的适合程度。
算法通过迭代更新这两个值,直到收敛。
不需要提前指定簇数量。
能自动选择代表点。
对异常值不敏感。
适用于复杂的样本分布。
缺点
时间复杂度较高,一般是 O(N²),适合中小规模数据。
相似度矩阵要提前计算,内存消耗大。
图像处理与图像分割
基因数据聚类
推荐系统
python
复制
编辑
from sklearn.cluster import AffinityPropagation
from sklearn import datasets
import matplotlib.pyplot as plt
X, y = datasets.make_blobs(random_state=42)
ap = AffinityPropagation(random_state=0)
ap.fit(X)
plt.scatter(X[:, 0], X[:, 1], c=ap.labels_)
plt.scatter(ap.cluster_centers_[:, 0], ap.cluster_centers_[:, 1], c=‘red’, marker=‘x’)
plt.title(‘Affinity Propagation Clustering’)
plt.show()
AP(Affinity Propagation)聚类是一种基于“消息传递”(Message Passing)的聚类算法,其核心思想是不需要预先指定簇的数量,而由数据点间的相似度自动决定聚类中心。下面介绍其主要数学推导公式及其含义:
一、基本概念
相似度函数
(
,
)
s(i,k)
表示数据点
i 与候选聚类中心
k 之间的相似度。
一般来说,常用的定义是负距离:
−
∥
−
∥
2
s(i,k)=−∥x
i
−x
k
∥
2
i=k(也就是把自己作为中心),还会引入一个偏好值
p(preference),该值控制簇的数量。通常,所有数据点的偏好值设为相同值。
责任值
(
,
)
r(i,k)
表示数据点
i “认为”数据点
k 作为簇中心的合适程度,相当于 i 选择 k 的论据。
可用度
(
,
)
a(i,k)
表示数据点
k “适合”被
i 选择作为簇中心的支持程度。
注意:两者都是通过“消息”传递机制在所有数据点之间迭代更新的。
二、消息传递更新公式
(
,
)
←
(
,
)
−
max
′
≠
{
(
,
′
)
+
(
,
′
)
}
r(i,k)←s(i,k)−
k
′
=k
max
{a(i,k
′
)+s(i,k
′
)}
解释:
(
,
)
s(i,k) 表示
i 与
k 的直接相似度。
max
′
≠
{
(
,
′
)
+
(
,
′
)
}
max
k
′
=k
{a(i,k
′
)+s(i,k
′
)} 则是除了
k 之外的所有候选中心中,能给予
i 的最大支持(可用度加上相似度)。
因此,责任值表示
i 与
k 的相似度相对于其它候选中心的优势。
当
≠
i
=k(非自引用)时:
(
,
)
←
min
{
0
,
(
,
)
+
∑
′
∉
{
,
}
max
(
0
,
(
′
,
)
)
}
a(i,k)←min
⎩
⎨
⎧
0,r(k,k)+
i
′
∈
/
{i,k}
∑
max(0,r(i
′
,k))
⎭
⎬
⎫
解释:
(
,
)
r(k,k) 表示候选点
k 作为自身作为簇中心的自信程度。
∑
′
∉
{
,
}
max
(
0
,
(
′
,
)
)
∑
i
′
∈
/
{i,k}
max(0,r(i
′
,k)) 累计了其他所有数据点对
k 的正面反馈(责任值非负部分)。
取两者之和与 0 的较小值,确保当负反馈过大时,可用度不会超过 0,避免对不适合做中心的数据点给予过高可用度。
i=k(自引用)时:
(
,
)
←
∑
′
≠
max
(
0
,
(
′
,
)
)
a(k,k)←
i
′
=k
∑
max(0,r(i
′
,k))
解释:
自可用度是所有其他数据点对
k 的正面责任值的累计和,反映了
k 作为聚类中心的总体吸引力。
三、算法流程简述
初始化:
通常先将所有责任值
(
,
)
r(i,k) 和可用度
(
,
)
a(i,k) 设置为 0。
消息传递迭代:
交替更新责任值和可用度,反复迭代直到收敛或达到迭代次数上限。
确定聚类中心:
对于每个数据点
i,计算
(
,
)
+
(
,
)
a(i,k)+r(i,k);令
k
∗
=i,则数据点
i 被选为聚类中心;否则,
i 分配到
∗
k
∗
对应的簇中。
四、总结
AP 聚类不需要预先指定聚类数,而是基于数据点之间的相似度、责任值和可用度的相互作用来自适应地确定聚类中心和簇的数量。
关键公式为责任值和可用度的更新公式,其中责任值反映了某点认为另一个点适合作为中心的优势,可用度反映了候选点对其他点的吸引力。
迭代更新这些消息,最终就能得到每个数据点对应的聚类分配。
这些公式和流程构成了 AP 聚类的数学基础。希望这个详细讲解对你理解 AP 聚类有所帮助