1. 程式人生 > >Andrew Ng機器學習課程筆記(十二)之無監督學習之K-means聚類演算法

Andrew Ng機器學習課程筆記(十二)之無監督學習之K-means聚類演算法

Preface

Unsupervised Learning(無監督學習)
K-means聚類演算法

Unsupervised Learning

我們以前介紹的所有演算法都是基於有類別標籤的資料集,當我們對於沒有標籤的資料進行分類時,以前的方法就不太適用了。我們對於這樣的資料集的分類叫做,聚類。對於對於這樣的資料集的學習演算法叫做,無監督學習

K-means聚類演算法

K-means聚類演算法的目標就是將給定的資料集分成 k 類。(k 由我們自己指定)

演算法內容

  1. 隨機選取n個聚類中心,μ1,μ2,...,μkRn
  2. 重複下面過程直到收斂 {
    對於每一個樣本
    i
    ,計算其應該屬於的類:
    c(i):=argminj||x(i)μj||2
    對於每一個聚類 j ,計算屬於的類的聚類中心:
    μj:=i=1m1{c(i)=j}x(i)i=1m1{c(i)=j}
    }

在上述演算法過程中,c(i) 表示樣本 i 到聚類中心點集合的最小值(表示為樣本 i 屬於取得最小值的那個聚類中心點);uj 表示為聚類中心,即為屬於這個的所有樣本的均值。

下圖為選擇k=2的聚類過程:
這裡寫圖片描述

收斂驗證

K-means 演算法面對有一個重要問題時如何保證收斂,在上述演算法內容中強調結束條件就是收斂,所以證明K-means 演算法可以收斂至關重要。
首先,我們定義畸變函式(distortion function)


J(c,μ)=i=1m||x(i)μc(i)||2

J函式表示每個樣本點到其質心的距離平方和。K-means是要將J調整到最小。假設當前J沒有達到最小值,那麼首先可以固定每個簇中心 μj,調整每個樣例的所屬的類別 c(i) 來讓J函式減少,同樣,固定 c(i) ,調整每個簇中心 μj也可以使J減小。這兩個過程就是內迴圈中使J單調遞減的過程。當J遞減到最小時, μc也同時收斂。(在理論上,可以有多組不同的 μc 值能夠使得J取得最小值,但這種現象實際上很少見)。其實整體來看,這個演算法就是座標上升演算法。

如果畸變函式J是非凸函式,意味著我們不能保證取得的最小值是全域性最小值,也就是說k-means對簇中心初始位置的選取比較敏感,但一般情況下k-means達到的區域性最優已經滿足需求。但如果你怕陷入區域性最優,那麼可以選取不同的初始值跑多遍k-means,然後取其中最小的J對應的 μc 輸出。

相關推薦

no