1. 程式人生 > >聚類演算法---層次聚類

聚類演算法---層次聚類

 假設有N個待聚類的樣本,對於層次聚類來說,步驟:
1.(初始化)把每個樣本歸為一類,計算每兩個類之間的距離,也就是樣本與樣本之間的相似度;
2.尋找各個類之間最近的兩個類,把他們歸為一類(這樣類的總數就少了一個);
3.重新計算新生成的這個類和各個舊類之間的相似度;
4.重複2和3直到所有的樣本點都歸為一類,結束

 

整個聚類過程其實是建立了一棵樹,在建立的過程中,可以通過在第二步上設定一個閾值,
當最近的兩個類的距離大於這個閾值,則認為迭代可以終止。另外關鍵的一步就是第三步,
如何判斷兩個類之間的相似度有不少種方法。這裡介紹一下三種:
1.SingleLinkage:又叫做 nearest-neighbor ,就是取兩個類中距離最近的兩個樣本的距離作為這兩個集合的距離,
也就是說,最近兩個樣本之間的距離越小,這兩個類之間的相似度就越大。容易造成一種叫做 Chaining 的效果,
兩個 cluster 明明從“大局”上離得比較遠,但是由於其中個別的點距離比較近就被合併了,並且這樣合併之後 Chaining 效應會進一步擴大,
最後會得到比較鬆散的 cluster 。
2.CompleteLinkage:這個則完全是 Single Linkage 的反面極端,取兩個集合中距離最遠的兩個點的距離作為兩個集合的距離。
其效果也是剛好相反的,限制非常大,兩個 cluster 即使已經很接近了,但是隻要有不配合的點存在,就頑固到底,老死不相合並,
也是不太好的辦法。這兩種相似度的定義方法的共同問題就是指考慮了某個有特點的資料,而沒有考慮類內資料的整體特點。
3.Average-linkage:這種方法就是把兩個集合中的點兩兩的距離全部放在一起求一個平均值,相對也能得到合適一點的結果。
average-linkage的一個變種就是取兩兩距離的中值,與取均值相比更加能夠解除個別偏離樣本對結果的干擾。