1. 程式人生 > >AP聚類演算法使用詳解(scikit-learn)

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:更新歸屬度矩陣


    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_ :迭代次數