小孩都看得懂的聚類
- 2019 年 10 月 7 日
- 筆記
預計閱讀時間 8 分鐘。
本文是「小孩都看得懂」系列的第四篇,本系列的特點是沒有公式,沒有程式碼,只有圖畫,只有故事。內容不長,碎片時間完全可以看完,但我背後付出的心血卻不少。喜歡就好!
- 小孩都看得懂的神經網路
- 小孩都看得懂的推薦系統
- 小孩都看得懂的逐步提升
- 小孩都看得懂的聚類
本文所有思路都來自 Luis Serrano 的YouTube視屏「Clustering: K-means and Hierarchical」,純純的致敬!我只是加了點場景使得內容更通俗點。
聚類是無監督學習中的最常見的方法,本帖介紹兩種聚類方法:
- K 均值聚類 (K-Means Clustering), 1-3 節
- 層次聚類 (Hierarchical Clustering), 4-6 節
1
新加坡唐人街 (Chinatown) 開了家王大爺燒烤,店裡每天生意不錯,而且還有很多人叫外賣。

今天,店裡收到很多外賣單子,如下圖灰點所示,那麼王大爺應該派多少個外賣員去送貨呢?

直觀來說,應該派 3 名送外賣的,每個人負責一區,如下圖紅、藍、黃區所示。

那麼這三個區是怎麼聚類出來的呢?
2
方法太簡單了,首先隨機選三個點作為簇心 (centroid),如下圖紅、藍、黃色五角星。為什麼選三個下節解釋,先接受它。

對每個灰點,計算它們到三個簇心的距離,離什麼顏色簇心最近,就塗成什麼顏色。

第一次「聚類」過程完畢,如下圖。

根據最新聚類結果重新計算它們的簇心,如下圖。

問題來了,有三個藍點明顯離黃色簇心更近呢。怎麼辦呢?把它們變成黃色唄。


同理,對下圖兩個紅點。


根據最新聚類結果重新計算它們的簇心,如下圖。

再繼續更正聚類錯誤的點。


根據最新聚類結果重新計算它們的簇心,直到沒有任何聚類錯誤的點,如下圖。

聚類完畢,一個值得思考的問題是到底需要多少個簇 (cluster) 呢?用肘部法則 (elbow method)。
3
實現我們是不知道有多少個簇心的,那就試著窮舉幾個,比如 1 到 6 個。按照上節的思路,做 6 次聚類過程直到收斂,如下圖。
- 1 個簇心不需要任何聚類 ...
- 3 個簇心是上節結果 ...
- 6 個簇心聚成 6 組
極限情況,我們有 22 個點,如果設 22 個簇心,那麼每個點都被塗成不同顏色,但這樣毫無意義。

在每種情況下,計算同一簇內兩點間距離最大值。

將距離值 (y) 和簇心個數 (x) 畫圖,連線,找到一個類似胳膊肘的點,就選對應的簇心個數,解釋在圖中寫出了。

4
K 均值聚類講完了,接下來看看層次聚類。這次數據用少點,因為畫著太累

。

5
層次聚類的規則不要太簡單,每次找到距離最近的兩個點,聚成一組,再重複直到。。。












直到兩點距離太遠了!!!這都能聚成一組真有點說不過去了,停了!


層次聚類完畢,一個值得思考的問題是如何決定兩點之間距離「過大」而停止繼續聚類呢?用樹形圖 (dendrogram)。
6
將數據點編號,作為樹形圖的橫軸刻度,而縱軸是距離值,如下圖所示。

按照上節的規則,找到找到距離最近的兩個點,聚成一組。記下這兩點的標號,在樹形圖上畫出其距離 (紅色半圈)。
不停的這樣做,知道把所有數據聚成一組。







畫完樹形圖後,我們可以根據「不希望兩點距離超過 d」來對其裁剪,如下圖。這樣我們得到上節的結果,把數據聚成兩類。

此外,我們還可以根據「希望聚成 4 類」來對其裁剪,如下圖。

小結
K 均值聚類和層級聚類都非常簡單,而確定它們聚類的停止條件,分別是肘部法則和樹形圖也很直觀。不管數據有多少維,肘部法則和樹形圖永遠是二維圖。
聚類方法的應用也特別多,比如多因子投資中聚類數目繁多的因子,膠囊網路裡面也有 K 均值聚類的影子等等。
這次你看懂了么?