AP聚类算法使用详解(scikit-learn)

    Affinity Propagation Clustering(简称AP算法)是2007提出的,当时发表在Science上《single-exemplar-based》。特别适合高维、多类数据快速聚类,相比传统的聚类算法,从聚类性能和效率方面都有大幅度的提升。


    首先介绍一下算法原理。

    首先引入两个概念,吸引度和归属度矩阵

    吸引度(responsibility)矩阵R:其中r(i,k)描述了数据对象k适合作为数据对象i的聚类中心的程度,表示的是从i到k的消息;

    归属度(availability)矩阵A:其中a(i,k)描述了数据对象i选择数据对象k作为其据聚类中心的适合程度,表示从k到i的消息。

    Step1:算法初始,这两个矩阵均初始化为0矩阵。

    Step2:更新吸引度矩阵 


    Step3:更新归属度矩阵

AP聚类算法使用详解(scikit-learn)_第1张图片

    Step4:根据衰减系数λ对两个公式进行衰减


    重复步骤2/3/4直至矩阵稳定或者达到最大迭代次数,算法结束。补充一下S为相似度矩阵,通常S(i,j)取i,j的欧氏距离的负值,当i=j时,通常取整个矩阵的最小值或者中位数(Scikit-learn中默认为中位数),取得值越大则最终产生的类数量越多。

    最终取a+r最大的k作为聚类中心。


    原理完毕,接下来介绍一下在scikit-learn中这个算法如何使用。

    第一,惯例的import:from sklearn.cluster import AffinityPropagation

    第二,进行新建一个AP对象:AffinityPropagation(),其中可以设置的参数如下

    damping : 衰减系数,默认为 0.5
    convergence_iter : 迭代次后聚类中心没有变化,算法结束,默认为15.
    max_iter : 最大迭代次数,默认200.
    copy : 是否在元数据上进行计算,默认True,在复制后的数据上进行计算。
    preference : S的对角线上的值
    affinity :S矩阵(相似度),默认为euclidean(欧氏距离)矩阵,即对传入的X计算距离矩阵,也可以设置为precomputed,那么X就作为相似度矩阵。

    verbose : 打印信息的详细程度,默认0,不打印。

    第三,介绍一下可以调用的函数,新建AP对象后,使用fit进行训练,predict进行预测,均需传入相似度矩阵。

    最后,介绍一下可以获取的结果

    cluster_centers_indices_ : 聚类中心的位置

    cluster_centers_ : 聚类中心
    labels_ : 类标签
    affinity_matrix_ : 最后输出的A矩阵
    n_iter_ :迭代次数

你可能感兴趣的:(机器学习)