Clustering

使用距離矩陣進行聚類

  • September 16, 2010

我有一個(對稱)矩陣M,表示每對節點之間的距離。例如,

ABCDEFGHIJKL
0 20 20 20 40 60 60 60 100 120 120 120
B 20 0 20 20 60 80 80 80 120 140 140 140
C 20 20 0 20 60 80 80 80 120 140 140 140
D 20 20 20 0 60 80 80 80 120 140 140 140
E 40 60 60 60 0 20 20 20 60 80 80 80
F 60 80 80 80 20 0 20 20 40 60 60 60
G 60 80 80 80 20 20 0 20 60 80 80 80
H 60 80 80 80 20 20 20 0 60 80 80 80
100 120 120 120 60 40 60 60 0 20 20 20
Ĵ 120 140 140 140 80 60 80 80 20 0 20 20
K 120 140 140 140 80 60 80 80 20 20 0 20
120 140 140 140 80 60 80 80 20 20 20 0

是否有任何方法可以從中提取集群M(如果需要,可以固定集群的數量),以便每個集群包含它們之間距離小的節點。在示例中,集群將(A, B, C, D)(E, F, G, H)(I, J, K, L)

我已經嘗試過 UPGMA 和k-means 但生成的集群非常糟糕。

距離是隨機遊走者從 nodeA到 node B( != A) 並返回 node的平均步數A。可以保證這M^1/2是一個指標。要運行k-means,我不使用質心。我將節點n簇之間的距離定義為 中所有節點c之間的平均距離。n``c

非常感謝 :)

有多種選擇。

k-中心點聚類

首先,您可以嘗試圍繞中心點 (pam) 進行分區,而不是使用 k-means 聚類。這個更健壯,並且可以提供更好的結果。Van der Laan 重新設計了算法。如果您要自己實現它,他的文章值得一讀。

對於大型數據集,有一個特定的 k-medoids 聚類算法。該算法在 R 中稱為 Clara,並在“ *查找數據組:聚類分析簡介”的第 3 章中進行了描述。*Kaufman, L 和 Rousseeuw, PJ (1990)。

層次聚類

除了 UPGMA,您可以嘗試其他一些層次聚類選項。首先,當你使用層次聚類時,一定要正確定義分區方法。這種劃分方法本質上是如何計算觀測值和聚類之間的距離。我主要使用 Ward 的方法或完整的鏈接,但其他選項可能是您的選擇。

不知道您是否嘗試過,但在系統發育應用中,單鏈接方法或鄰居連接通常優於 UPGMA。如果你還沒有嘗試過,你也可以試一試,因為它通常會產生非常好的結果。


在 R 中,您可以查看包cluster。所有描述的算法都在那裡實現。參見 ?pam, ?clara, ?hclust, … 檢查 ?kmeans 中算法的不同實現。有時選擇另一種算法可以顯著改善聚類。


編輯:只是想到了一些事情:如果您使用圖形和節點等,您也應該看看馬爾可夫聚類算法。例如,它用於根據爆炸相似性對序列進行分組,並且表現得非常好。它可以為你做聚類,或者給你一些關於如何解決你關注的研究問題的想法。事實上,在不知道任何事情的情況下,我想他的結果絕對值得一看。如果我可以這樣說,我仍然認為 Stijn van Dongen 的這種方法是我遇到過的最好的聚類結果之一。

http://www.micans.org/mcl/

引用自:https://stats.stackexchange.com/questions/2717

comments powered by Disqus

相關問答