EM算法(1):K-means 算法


目錄

EM算法(1):K-means 算法

EM算法(2):GMM訓練算法

EM算法(3):EM算法運用

EM算法(4):EM算法證明

 

          

                 EM算法(1) : K-means算法

1. 簡介

  K-means算法是一類無監督的聚類算法,目的是將沒有標簽的數據分成若干個類,每一個類都是由相似的數據組成。這個類的個數一般是認為給定的。

 

2. 原理

  假設給定一個數據集$\mathbf{X} = \{\mathbf{x}_1, \mathbf{x}_2,...,\mathbf{x}_N \}$, 和類的個數K。我們的每個類都用一個中心點$\mu_k$表示。每個數據集都應該被歸為某一個類,那么我們定義$r_{nk}$:如果$\mathbf{x}_n$屬於類k,則$r_{nk}$=1;如果$\mathbf{x}_n$不屬於類k,則$r_{nk}$=0。那么我們就可以定義一個誤差函數$\mathbf{J}$:

          $\mathbf{J} = \sum_n\sum_kr_{nk}||\mathbf{x}_n - \mu_k||^2$

  誤差函數直觀理解為每個數據點離自己類的中心點的距離之和。那么我們的目標就是 min $\mathbf{J}$。我們發現,$\mathbf{J}$中$r_{nk}$和$\mu_k$都是未知的,直接求導的話沒有閉式解。所以我們需要換一個方法,這就是所謂的k-keans算法。

  k-means算法分為兩步。第一步,假設各個類的中心$\mu_k$已知,那么所有$r_{nk}$都可以求出,計算方法采取最近鄰原則,即

          $r_{nk} = 1$  if  $k = arg\ min_j||\mathbf{x}_n - \mu_j||^2$              (1)   

          $r_{nk} = 0$  otherwise                        (2)

  第二步,假設所有$r_{nk}$都已知,將$\mathbf{J}$對$\mu_k$求導等於零,那么:

          $\frac{\partial\mathbf{J}}{\partial\mu_k}$ = $2\sum_nr_{nk}(\mathbf{x}_n-\mu_k)$ = 0

  那么很容易得到$\mu_k$的閉式解:

          $\mu_k = \frac{\sum_nr_{nk}\mathbf{x}_n}{\sum_nr_{nk}}$

  k-means有更通俗的解釋,第一步其實是給每個數據點都分類,分類方法采取最近鄰原則;第二步是根據分類的結果,將中心點重新計算,計算方式為類中所有點的中心點。

 

3. 與EM算法的關系

  這就是為什么在EM算法系列中我們要講k-means算法的原因:k-means是最簡單的EM算法。EM算法全稱為Expectation-Maximization algorithm。其也是分為兩步,第一步叫Expectation,第二步叫Maximization。

  EM算法取名是有其意義的,比如第一步Expectation,顧名思義就是計算期望。那么在k-means算法中,第一步計算$r_{nk}$其實是計算Expectation的一步。$r_{nk}$可以看做是$\mathbf{x}_n$屬於各個類的概率,只不過它們取值只有0和1,但也符合概率的定義。那么$\mathbf{x}_n$ 的誤差期望就是:$\sum_kr_nk||\mathbf{x}_n - \mu_k||^2$。那么所有點的誤差期望之和為:

          $\sum_n\sum_kr_{nk}||\mathbf{x}_n-\mu_k||^2$

  我們可以發現,這其實就是k-means算法中的$\mathbf{J}$。

  EM算法第二步就是對求得的期望求最值。那么在k-means算法中,第二步對$\mathbf{J}$求導等於零其實就是在求最值,這也正好對應EM算法的第二步。所以我們可以看到,其實k-means就是EM算法的一種。

  我們知道,用平方和來計算誤差其實就是隱性假設原數據服從高斯分布,那么后續我們會看到,我們用EM算法和高斯分布,也能推導出k-means算法。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM