1. 程式人生 > >Andrew Ng 機器學習筆記 12 :聚類

Andrew Ng 機器學習筆記 12 :聚類

在監督式學習中,我們針對一組標記的訓練資料提出一個適當的假設。相比之下,在無監督學習案例中,我們面對的是一組無標記的訓練資料,使用演算法分析出資料的結構。

K均值 (K-means)演算法

在聚類問題中,我們有未加標籤的資料。我們希望有一個演算法能夠自動的把這些資料分成有緊密關係的子集,或是簇。K均值 (K-means)演算法是現在最為廣泛使用的聚類方法。

K均值是一個迭代方法,它要做兩件事情:

  1. 簇分配。
  2. 移動聚類中心。

K-Means 第1步:簇分配:

  • 遍歷所有的樣本。
  • 計算每一個點最接近的中心,將其分配到最近的聚類中心。

K-Means 第2步:移動聚類中心:

  • 找出屬於每個聚類中心的點,計算出它們的均值位置。
  • 把聚類中心移動到當前的均值位置。

K-Means 第3步:重複執行上面兩步

  • 一直迭代下去,聚類中心和樣本簇不再改變時,K均值方法就收斂了。

K-Means的規範化描述

K均值演算法接受兩個輸入:

  • 引數K:從資料中聚類出的簇的個數。
  • 訓練集: x ( 1 )
    , x ( 2 ) , , x ( m )

因為這是非監督學習,我們的資料集中不需要y,同時在非監督學習的 K均值演算法裡,我們約定 x ( i ) 是一個n維向量,這就是“訓練樣本是n維而不是n+1維”的原因(按照慣例,排除 x 0 = 1 這一項)。

K均值演算法:

第一步:隨機初始化 K 個聚類中心,記作 μ 1 , μ 2 一直到 μ k

第二步:

K均值內部迴圈執行以下步驟:

  • 簇分配

    首先對於每個訓練樣本,我們用變數 c ( i ) 表示K個聚類中心中最接近 x ( i ) 的那個中心的下標(具體的類別),這就是簇分配。

    大寫的 K 表示所有聚類中心的個數,小寫的 k 則表示某個聚類中心的下標。

    我們希望的是:在所有 K 箇中心中,找到一個k使得 x i μ k 的距離是 x ( i ) 到所有的聚類中心的距離中最小的那個,這就是計算 c ( i ) 的方法。

    這裡還有另外的表示 c ( i ) 的方法:我用範數的形式 | | x ( i ) μ k | | 來表示,這是第 i 個訓練樣本到聚類中心 μ k 的距離。

    接下來我要做的是找出k的值,讓這個式子 | | x ( i ) μ k | | 最小,然後將 c ( i ) 賦值為 k

    出於慣例,人們更喜歡用距離的平方 | | x ( i ) μ k | | 2 來表示 x ( i ) 距聚類中心 μ k 的距離。

  • 移動聚類中心

    對於每個聚類中心: k 從1迴圈到 K ,將 μ k 賦值為這個簇的均值。

異常情況

如果存在一個沒有點分配給它的聚類中心,通常在這種情況下,我們就直接移除那個聚類中心,並重新隨機找一個聚類中心。(但是直接移除那個中心,是更為常見的方法。不過在實際過程中,這個問題不會經常出現。)

K均值的代價函式

以下便是K均值演算法需要最小化的代價函式:

J ( c ( 1 ) , , c ( m )