AP聚類算法是基於數據點間的"信息傳遞"的一種聚類算法。與k-均值算法或k中心點算法不同,AP算法不需要在運行算法之前確定聚類的個數。AP算法尋找的"examplars"即聚類中心點是數據集合中實際存在的點,作為每類的代表。
算法描述:
假設$\{ {x_1},{x_2}, \cdots ,{x_n}\} $數據樣本集,數據間沒有內在結構的假設。令是一個刻畫點之間相似度的矩陣,使得$s(i,j) > s(i,k)$當且僅當$x_i$與$x_j$的相似性程度要大於其與$x_k$的相似性。
AP算法進行交替兩個消息傳遞的步驟,以更新兩個矩陣:
- 吸引信息(responsibility)矩陣R:$r(i,k)$描述了數據對象k適合作為數據對象i的聚類中心的程度,表示的是從i到k的消息;
- 歸屬信息(availability)矩陣A:$a(i,k)$描述了數據對象i選擇數據對象k作為其據聚類中心的適合程度,表示從k到i的消息。
兩個矩陣R ,A中的全部初始化為0. 可以看成Log-概率表。這個算法通過以下步驟迭代進行:
- 首先,吸引信息(responsibility)${r_{t + 1}}(i,k)$按照
${r_{t + 1}}(i,k) = s(i,k) - \mathop {\max }\limits_{k' \ne k} \{ {a_t}(i,k') + s(i,k')\} $
的迭代。
- 然后,歸屬信息(availability)${a_{t + 1}}(i,k)$按照
\[{a_{t + 1}}(i,k) = \mathop {\min }\limits_{} \left( {0,{r_t}(k,k) + \sum\limits_{i' \notin \{ i,k\} } {\max \{ 0,{r_t}(i',k)\} } } \right),i \ne k\]
和
\[{a_{t+1}}(k,k) = \sum\limits_{i' \ne k} {\max \{ 0,{r_t}(i',k)\} } \]
迭代。
- 對以上步驟進行迭代,如果這些決策經過若干次迭代之后保持不變或者算法執行超過設定的迭代次數,又或者一個小區域內的關於樣本點的決策經過數次迭代后保持不變,則算法結束。
為了避免振盪,AP算法更新信息時引入了衰減系數$\lambda $。每條信息被設置為它前次迭代更新值的$\lambda $倍加上本次信息更新值的1-$\lambda $倍。其中,衰減系數$\lambda $是介於0到1之間的實數。即第t+1次$r(i,k)$,$a(i,k)$的迭代值:
\[{r_{t + 1}}(i,k) \leftarrow (1 - \lambda ){r_{t + 1}}(i,k) + \lambda {r_t}(i,k)\]
\[{a_{t + 1}}(i,k) \leftarrow (1 - \lambda ){a_{t + 1}}(i,k) + \lambda {a_t}(i,k)\]
圖1 算法實現過程
圖2 對人臉數據庫的聚類結果比較