-
sklearn.cluster.affinity_propagation()官方文档
sklearn.cluster.affinity_propagation(S, preference=None, convergence_iter=15, max_iter=200, damping=0.5, copy=True, verbose=False, return_n_iter=False)
Affinity Propagation 算法比较有趣的是可以根据提供的数据决定聚类的数目。 因此有两个比较重要的参数:
- preference: 参考度或称为偏好参数:是相似度矩阵中横轴纵轴索引相同的点,如s(i,i),若按欧氏距离计算其值应为0,但在AP聚类中其表示数据点i作为聚类中心的程度,因此不能为0。迭代开始前假设所有点成为聚类中心的能力相同,因此参考度一般设为相似度矩阵中所有值得最小值或者中位数,但是参考度越大则说明个数据点成为聚类中心的能力越强,则最终聚类中心的个数则越多;
- damping factor: 阻尼因子,用于减少吸引信息和归属信息以防止更新减少吸引度和归属度信息时数据振荡。
AP聚类算法主要的缺点是算法的复杂度。 AP聚类算法的时间复杂度是 O ( N 2 T ) O(N^2T) O(N2T), 其中 N 是样本的个数 , T 是收敛之前迭代的次数。如果使用密集的相似性矩阵空间复杂度是 O ( N 2 ) O(N^2) O(N2) ,如果使用稀疏的相似性矩阵空间复杂度可以降低。 这使得AP聚类最适合中小型数据集(small to medium sized datasets)。
其他参数:
damping=0.5: 阻尼系数,设置为 0.5 到 1 之间;
max_iter=200: 最大迭代次数;
convergence_iter=15: 聚类个数连续 convergence_iter 次迭代都不再改变,就停止迭代;
copy=True: 在 scikit-learn 很多接口中都会有这个参数的,就是是否对输入数据进行 copy 操作,以便不修改用户的输入数据;
preference=None: array-like, shape (n_samples,) 或者 float,如果不指定,则都设为相似度矩阵中的中位数;
affinity=’euclidean’: string,“precomputed” 或者 “euclidean”,“euclidean” 采用负的欧几里得距离(class中的参数)
verbose=False: int 类型,是否输出详细信息
函数返回结果:
cluster_centers_indices : array, shape (n_clusters,) 聚类中心在所有数据中的索引,聚类中心是已有数据点。
labels : array, shape (n_samples,) 聚类标签,每个记录对应的种类,默认是从0开始的数字
n_iter : int 运行的迭代次数,只有 return_n_iter参数设置维True时才返回。
-
AffinityPropagation
物理意义
Affinity Propagation Clustering是2007年在Science上发表的一篇single-exemplar-based的聚类方面的文章。特别适合高维、多类数据快速聚类,相比传统的聚类算法,从聚类性能和效率方面都有大幅度的提升。
Affinity Propagation Clustering 可翻译为:仿射传播聚类,吸引子传播聚类,近邻传播聚类,相似性传播聚类,亲和力传播聚类,以下简称 AP聚类.优点有:
- 不需要指定最终聚类族的个数
- 已有的数据点作为最终的聚类中心,而不是新生成一个族中心
- 模型对数据的初始值不敏感
- 对初始相似度矩阵数据的对称性没有要求
- 相比于k-centers聚类方法,其结果的平方差误差较小
AffinityPropagation 聚类方法是通过在样本对之间发送消息直到收敛来创建聚类。 然后使用少量示例样本作为聚类中心来描述数据集, 聚类中心是数据集中最能代表一类数据的样本。
在样本对之间发送的消息表示一个样本作为另一个样本的示例样本的适合程度(suitability),适合程度值再根据通信的反馈不断更新。更新迭代直到收敛,完成聚类中心的选取,因此也给出了最终聚类。
**与其他聚类算法的不同之处是,AP在开始时,将所有节点都堪看成是潜在的聚类中心。**然后通过节点间的通信,找出最合适的聚类中心,并将其他节点划分到这些中心下去。所以,目标是找到聚类中心;手段是通过节点间通信。
AP的输入是一个节点间的相似度矩阵:S。作为算法的初始化矩阵,n个点就有由n乘n个相似度值组成的矩阵。
用S(i,k)表示节点i和节点k之间的相似度,也表明了节点k作为i的聚类中心的合适程度,这个相似度S的计算可以根据具体应用场景。
算法描述: 样本之间传递的信息有两种,r(i,k)和a(i,k)不是并列关系:
- responsibility r(i,k) : 样本 k 适合作为样本 i 的典型代表(exemplar)的累计证据,可称为吸引度。是节点i传递给节点k的信息。先前我们有相似度矩阵记录了k成为i的聚类中心的合适程度,那么这里我们只需要证明k比其他节点更合适了就可以了,那么其他节点是否合适这个如何进行衡量呢,是否合适其实就是看这两个节点是否相互认可,对于其他节点k’我们有s(i,k’)表示节点k’作为节点i的聚类中心的合适度,那么再定义一个a(i,k’)表示i对节点k’的认可程度(归属度),这两个值相加,