層次聚類(hierarchical clustering)
/ hy-uh-RAR-kik-ul KLUS-ter-ing /
層次聚類把資料歸類的方式,不是分成一組平鋪的箱子,而是分成一棵層層嵌套的「家族樹」,就像生物學家把生命組織成「種」嵌在「屬」裡、「屬」又嵌在「科」裡那樣。最常見的一種叫凝聚式,是從最底層起步:每一個資料點自成一個極小的簇。然後它反覆地把最近的兩個簇併成一個,再併、再併——小團併成大團——直到頂端,萬物匯入唯一的一個大簇。這整部合併的歷史,就是結果。
這段歷史被畫成一棵叫作樹狀圖(dendrogram)的樹,模樣像一張側倒過來的比賽對陣表:早早就合到一起的點,待在又短又低的枝上,因為它們極其相似;而直到接近頂端才合併的組,則由高高的長枝相連,因為它們相當不同。妙處在於,你不必像k均值逼你做的那樣,預先認定一個簇數。你只需在你喜歡的任意高度,橫著在樹上劃一條線,它穿過幾根枝,你就得到幾個簇。劃得低,得到許多細分的小組;劃得高,得到寥寥幾個寬泛的大類。
它直觀,一次就把那整幅多層次的圖景給你,也無需事先去猜k——這正是它在生物學與遺傳學裡、用來為生物或基因構建family tree(家族樹)的常用之處。它的軟肋是開銷:每一步都要把每個簇與其餘每個簇比一遍,又慢又耗記憶體,所以它擴展不到極大的資料集。你還得選定如何衡量兩個簇之間的距離(最近的一對?最遠的一對?還是平均?),而這個選擇,會悄悄地把整棵樹重新塑形。
按特徵給五種動物聚類。貓和獅子最先合併(都是貓科)。狗接著加入,形成一個「食肉動物」分支。麻雀和鷹則另成一對、歸為鳥類。樹狀圖把這一切都畫了出來;把樹切得低,你得到四個組;切得高,你只得到兩個:哺乳動物和鳥類。
樹狀圖讓你事後再來選簇數——只看你在哪兒下刀。
與k均值不同,你不必事先定死簇數——而是透過選擇在哪裡下刀,從樹上把它讀出來。代價是速度:兩兩合併開銷很大,所以它最適合中小型的資料集。