【通俗易懂】层次聚类算法的原理及实现
層次聚類(lèi)(Hierarchical Clustering)是聚類(lèi)算法的一種,通過(guò)計(jì)算不同類(lèi)別數(shù)據(jù)點(diǎn)間的相似度來(lái)創(chuàng)建一棵有層次的嵌套聚類(lèi)樹(shù)。在聚類(lèi)樹(shù)中,不同類(lèi)別的原始數(shù)據(jù)點(diǎn)是樹(shù)的最低層,樹(shù)的頂層是一個(gè)聚類(lèi)的根節(jié)點(diǎn)。創(chuàng)建聚類(lèi)樹(shù)有自下而上合并和自上而下分裂兩種方法,本篇文章介紹合并方法。
層次聚類(lèi)的合并算法
層次聚類(lèi)的合并算法通過(guò)計(jì)算兩類(lèi)數(shù)據(jù)點(diǎn)間的相似性,對(duì)所有數(shù)據(jù)點(diǎn)中最為相似的兩個(gè)數(shù)據(jù)點(diǎn)進(jìn)行組合,并反復(fù)迭代這一過(guò)程。簡(jiǎn)單的說(shuō)層次聚類(lèi)的合并算法是通過(guò)計(jì)算每一個(gè)類(lèi)別的數(shù)據(jù)點(diǎn)與所有數(shù)據(jù)點(diǎn)之間的距離來(lái)確定它們之間的相似性,距離越小,相似度越高。并將距離最近的兩個(gè)數(shù)據(jù)點(diǎn)或類(lèi)別進(jìn)行組合,生成聚類(lèi)樹(shù)。
歐幾里德距離矩陣
層次聚類(lèi)使用歐式距離來(lái)計(jì)算不同類(lèi)別數(shù)據(jù)點(diǎn)間的距離(相似度)。我們?cè)谇懊娴膸灼恼轮卸荚?jīng)介紹過(guò)歐氏距離的計(jì)算方法,本篇文章將通過(guò)創(chuàng)建一個(gè)歐式距離矩陣來(lái)計(jì)算和對(duì)比不同類(lèi)別數(shù)據(jù)點(diǎn)間的距離,并對(duì)距離值最小的數(shù)據(jù)點(diǎn)進(jìn)行組合。以下是歐式距離的計(jì)算公式。
以下為示例數(shù)據(jù),我們通過(guò)歐氏距離計(jì)算下面A到G的歐式距離矩陣,并通過(guò)合并的方法將相似度最高的數(shù)據(jù)點(diǎn)進(jìn)行組合,并創(chuàng)建聚類(lèi)樹(shù)。
創(chuàng)建歐式距離矩陣的方法很簡(jiǎn)單,將每個(gè)類(lèi)別的數(shù)據(jù)點(diǎn)分別與A-G中的每個(gè)數(shù)據(jù)點(diǎn)計(jì)算距離值,其中A—>B表示數(shù)據(jù)點(diǎn)A到數(shù)據(jù)點(diǎn)B的距離,B—>A則代表數(shù)據(jù)點(diǎn)B到數(shù)據(jù)點(diǎn)A的距離。這兩個(gè)距離值是相同的,因此歐式距離矩陣呈對(duì)角線對(duì)稱(綠色部分和藍(lán)色部分)。其中對(duì)角線的0值是數(shù)據(jù)點(diǎn)與自己的距離值。我們將所有數(shù)據(jù)點(diǎn)間的距離結(jié)果進(jìn)行對(duì)比,選擇其中距離最近的兩個(gè)數(shù)據(jù)點(diǎn)進(jìn)行組合,并迭代這一過(guò)程。下圖顯示了歐式矩陣的邏輯和計(jì)算方法。
數(shù)據(jù)點(diǎn)之間的距離 ???
對(duì)于示例中的數(shù)據(jù)點(diǎn),我們通過(guò)計(jì)算獲得了下面的歐式距離矩陣。其中數(shù)據(jù)點(diǎn)B到數(shù)據(jù)點(diǎn)C的距離在所有的距離值中最小,為1.00。以下為數(shù)據(jù)點(diǎn)間距離值的計(jì)算公式。
經(jīng)過(guò)計(jì)算數(shù)據(jù)點(diǎn)B和數(shù)據(jù)點(diǎn)C與其他數(shù)據(jù)點(diǎn)相比有最高的相似度。因此,我們將數(shù)據(jù)點(diǎn)B和數(shù)據(jù)點(diǎn)C進(jìn)行組合。并再次計(jì)算其他數(shù)據(jù)點(diǎn)間的距離。
數(shù)據(jù)點(diǎn)與組合數(shù)據(jù)點(diǎn)間的距離
將數(shù)據(jù)點(diǎn)B與數(shù)據(jù)點(diǎn)C進(jìn)行組合后,重新計(jì)算各類(lèi)別數(shù)據(jù)點(diǎn)間的距離矩陣。數(shù)據(jù)點(diǎn)間的距離計(jì)算方式與之前的方法一樣。這里需要說(shuō)明的是組合數(shù)據(jù)點(diǎn)(B,C)與其他數(shù)據(jù)點(diǎn)間的計(jì)算方法。當(dāng)我們計(jì)算(B,C)到A的距離時(shí),需要分別計(jì)算B到A和C到A的距離均值。
經(jīng)過(guò)計(jì)算數(shù)據(jù)點(diǎn)D到數(shù)據(jù)點(diǎn)E的距離在所有的距離值中最小,為1.20。這表示在當(dāng)前的所有數(shù)據(jù)點(diǎn)中(包含組合數(shù)據(jù)點(diǎn)),D和E的相似度最高。因此我們將數(shù)據(jù)點(diǎn)D和數(shù)據(jù)點(diǎn)E進(jìn)行組合。并再次計(jì)算其他數(shù)據(jù)點(diǎn)間的距離。
后面的工作就是不斷的重復(fù)計(jì)算數(shù)據(jù)點(diǎn)與數(shù)據(jù)點(diǎn),數(shù)據(jù)點(diǎn)與組合數(shù)據(jù)點(diǎn)間的距離。這個(gè)步驟應(yīng)該由程序來(lái)完成。這里由于數(shù)據(jù)量較小,我們手工計(jì)算并列出每一步的距離計(jì)算和數(shù)據(jù)點(diǎn)組合的結(jié)果。
這一步中,數(shù)據(jù)點(diǎn)A和數(shù)據(jù)點(diǎn)F的距離值在所有距離值中最小,因此我們將A和F進(jìn)行組合,生成組合數(shù)據(jù)點(diǎn)(A,F)。
到此為止除了數(shù)據(jù)點(diǎn)G以外,其他的數(shù)據(jù)點(diǎn)都已經(jīng)根據(jù)距離值(相似度)進(jìn)行了組合。聚類(lèi)樹(shù)的最底層已經(jīng)完成。下面我們將繼續(xù)計(jì)算組合數(shù)據(jù)點(diǎn)間的距離,并對(duì)相似度最高的組合數(shù)據(jù)點(diǎn)進(jìn)行合并。
兩個(gè)組合數(shù)據(jù)點(diǎn)間的距離
計(jì)算兩個(gè)組合數(shù)據(jù)點(diǎn)間距離的方法有三種,分別為Single Linkage,Complete Linkage和Average Linkage。在開(kāi)始計(jì)算之前,我們先來(lái)介紹下這三種計(jì)算方法以及各自的優(yōu)缺點(diǎn)。
Single Linkage
Single Linkage的計(jì)算方法是將兩個(gè)組合數(shù)據(jù)點(diǎn)中距離最近的兩個(gè)數(shù)據(jù)點(diǎn)間的距離作為這兩個(gè)組合數(shù)據(jù)點(diǎn)的距離。這種方法容易受到極端值的影響。兩個(gè)很相似的組合數(shù)據(jù)點(diǎn)可能由于其中的某個(gè)極端的數(shù)據(jù)點(diǎn)距離較近而組合在一起。
Complete Linkage
Complete Linkage的計(jì)算方法與Single Linkage相反,將兩個(gè)組合數(shù)據(jù)點(diǎn)中距離最遠(yuǎn)的兩個(gè)數(shù)據(jù)點(diǎn)間的距離作為這兩個(gè)組合數(shù)據(jù)點(diǎn)的距離。Complete Linkage的問(wèn)題也與Single Linkage相反,兩個(gè)不相似的組合數(shù)據(jù)點(diǎn)可能由于其中的極端值距離較遠(yuǎn)而無(wú)法組合在一起。
Average Linkage
Average Linkage的計(jì)算方法是計(jì)算兩個(gè)組合數(shù)據(jù)點(diǎn)中的每個(gè)數(shù)據(jù)點(diǎn)與其他所有數(shù)據(jù)點(diǎn)的距離。將所有距離的均值作為兩個(gè)組合數(shù)據(jù)點(diǎn)間的距離。這種方法計(jì)算量比較大,但結(jié)果比前兩種方法更合理。
我們使用Average Linkage計(jì)算組合數(shù)據(jù)點(diǎn)間的距離。下面是計(jì)算組合數(shù)據(jù)點(diǎn)(A,F)到(B,C)的距離,這里分別計(jì)算了(A,F)和(B,C)兩兩間距離的均值。
?
通過(guò)計(jì)算及對(duì)比不同組合數(shù)據(jù)點(diǎn)間間的距離。(A,F)到(B,C)的距離在所有組合數(shù)據(jù)點(diǎn)間最小,為13.25。說(shuō)明(A,F)到(B,C)相似度最高。因此,將(A,F)到(B,C)組合為(A,F,B,C)。
使用與之前相同的方法計(jì)算出組合數(shù)據(jù)點(diǎn)(D,E)和G的距離在目前所有組合數(shù)據(jù)點(diǎn)中最小。為34.70。將(D,E)和G組合為(D,E,G)。
最終,通過(guò)計(jì)算和合并,我們獲得了兩個(gè)組合數(shù)據(jù)點(diǎn)(A,F,B,C)和(D,E,G)。這也是聚類(lèi)樹(shù)的最頂層的兩個(gè)數(shù)據(jù)點(diǎn)。下面,我們按之前的計(jì)算步驟來(lái)構(gòu)建聚類(lèi)樹(shù)。
?
層次聚類(lèi)樹(shù)狀圖
將前面的每一步的計(jì)算結(jié)果以樹(shù)狀圖的形式展現(xiàn)出來(lái)就是層次聚類(lèi)樹(shù)。最底層是原始A到G的7個(gè)數(shù)據(jù)點(diǎn)。依照7個(gè)數(shù)據(jù)點(diǎn)間的相似度組合為聚類(lèi)樹(shù)的第二層(A,F),(B,C),(D,E)和G。以此類(lèi)推生成完整的層次聚類(lèi)樹(shù)狀圖。以下為簡(jiǎn)單的示意圖。
參考原文:http://bluewhale.cc/2016-04-19/hierarchical-clustering.html
Read more:?http://bluewhale.cc/2016-04-19/hierarchical-clustering.html#ixzz4iGl6Tpku
總結(jié)
以上是生活随笔為你收集整理的【通俗易懂】层次聚类算法的原理及实现的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【比较面】真核生物和原核生物的异同
- 下一篇: EEPROM和flash的区别