機器學習系列20:K-均值演算法

  • 2019 年 10 月 7 日
  • 筆記

曾經我寫過一篇文章介紹監督學習無監督學習的區別與特點,如果沒看過的小夥伴可以看一下:

機器學習系列 1:監督學習和無監督學習

接下來介紹的K-均值演算法就是無監督學習演算法。在無監督學習中,我們會把沒有標籤的數據集交給演算法,讓它自動地發現數據之間的關係,聚類演算法(Clustering algorithm)就是一種無監督學習演算法。它會自動地將無標籤的數據集進行分類,如下圖:

它會將這個數據集劃分成兩類,每一個綠圈就是一類。

在聚類演算法中,最常見的就是 K-均值演算法(K-means algorithm),我們先來看看這個演算法在下面這個數據集中是如何進行工作的。

如果將數據集劃分成兩類的話,第一步隨機選取兩個點作為聚類中心(通常不是這麼選擇,為了更方便的理解,先這麼選,在後面我會告訴你正確應該如何去選擇)

對於每一個樣本點,離哪一個聚類中心近就會被染成相應的顏色,劃歸成相同的一類:

然後每一類都會計算出離那些數據集最近的一個位置,將聚類中心移動到那個位置:

之後再進行染色:

再移動,再染色,再移動,再染色,再移動。。。(人類的本質是什麼)

不斷地進行循環,直到聚類中心不再移動為止:

現在就成功地劃分出兩類不同的數據集了。

再回過頭來看 K-均值演算法(K-means algorithm):它需要傳入兩個參數,需要聚類的數量 K 訓練集

一開始,會根據傳入聚類的數量 K 隨機初始化聚類中心,然後不斷地去循環內部的兩個循環:

紅色部分表示每一個樣本點選擇離它最近的聚類中心染成相應的顏色,也就是簇分配,我們將每一個樣本點劃分到所屬的聚類中心。實際上就是最小化這個代價函數:

藍色部分表示不斷地去移動聚類中心使它到跟它顏色相同的樣本點的距離最小。

最後來補充一下如何初始化聚類中心。之前說過,隨機位置初始化這種方法是不可取的,正確的操作是隨機選取樣本點所在的位置作為聚類中心,為了避免陷入到局部最優解中,我們要多次選取,挑選一個代價函數最小的作為我們的選擇,這樣就會達到最優的效果。