K-means 和 EM 比較


回顧

前幾篇對 k-means 有過理解和寫了一版偽代碼, 因為思想比較非常朴素, 就是初始化幾個中心點, 然后通過計算距離的方式, "物以類聚", 不斷迭代中心點, 最后收斂, (中心點不變化) 就搞定了, 代碼也容易實現, 算法也基本不涉及數學, 感覺就是通用的全民入門算法. 跟 KNN 這種hello world 級別是一個等級, 簡單易懂, 實用性高, 易實現.

而相對 EM 算法則有些難明白一些, 它涉及幾個核心概念: 隱變量, 參數估計, 先驗分布, 貝葉斯. 它所要解決的問題, 其實就是,當無法直接觀測到總體參數時, 但有知道它是由其他隱含因子影響着的, 再此之下, 如何進行參數估計, 其實也就是咱當年學統計學中, 用樣本來估計總體, 方法無非是,極大似然法, 全概率與貝葉斯, 高斯分布 這些基礎知識而已.

為了說明EM算法, 顯示以扔硬幣 的小案例來直觀認識 EM 算法的 E, M 步驟分別是做了什么事情, 從比較直觀來看, 然后有引入高斯混合模型 來深刻推導了一波EM算法, 同時證明了EM算法的收斂性. 推導的難點在於, **如何去定義 **

E, M步驟, 然后技巧上是用了Jensen不等式, 並引入了 concave函數的特性(全局最優解), 過程其實就用到了高斯分布, 化簡用的是全概率 與貝葉斯的關系, 也就是全概率, 聯合分布, 條件概率..這些基礎知識, 嗯. 總體來說還是不難的, 可能寫代碼實現有點小復雜, 后面試着整一整, 這里主要重點整透理論, 代碼會copy 就差不多行了.

K-means 與 EM

其實, 不難發現, 高斯混合模型(Mixture of Gaussian) EM 算法與 K-means 是相似的. K-means 從 EM 視角來看,

  • Expectation : 每一個點賦值(概率為1)一個 cluster
  • Maximization: 更新每一個 cluster 的中心

由此可得到:K-means 算法其實是EM算法的一種特殊情況.

K-means 選擇將一個數據點歸為一個 cluster (概率100%, hard decision); 而 EM 算法選擇將一個數據點看作是多個cluster (或分布) 的混合物(soft decision).

case: 人的氣質類型

(補一下性格的本質: 是習慣, 習慣決定性格, 性格決定命運, 是有科學性滴)

記得以前學心理學的時候, 談到氣質類型的章節, 一種經典的體液分法(5世紀前), 認為人體有四種液體, 不同的體液比例混合形成了四種典型氣質類型:

  • 多血質: 活潑, 敏感, 好動, 反應快, 喜歡交往...., 典型人物: 王熙鳳, 姚明, 科比, 詹姆斯
  • 膽汁質: 直率, 熱情, 沖動, 情緒化... 典型人物: 張飛, 魯智深, 奧尼爾, 恩比德
  • 粘液質: 安靜, 穩重, 反應慢, 沉默寡言, 善於忍耐, 典型人物: 魯肅, 司馬懿, 鄧肯, 卡哇伊
  • 抑郁質: 孤僻, 行動遲緩, 體驗深刻, 多愁善感, 善於察覺細節... 典型人物: 林黛玉, 羅斯

需求: 如何通過一個的性格(行為習慣) 來判斷小陳同學的氣質類型

  • K-means: 小陳同學比較孤僻, 沉默寡言, 總沉浸在自己的世界... 但偶爾也活潑好動..嗯, 就判定為抑郁型
  • EM: 綜合來看, 小陳同學有 30%是多血的, 50%是粘液的, 抑郁, 膽汁各10%, 嗯...大概率, 偏向粘液質一點.

從偏理論來看

E-步驟

K-means\(r_{nk}\) 判斷每個樣本屬於對應的類別 k

def \(r_{nk}\) :

​ IF \(k = arg \ min_j \ ||x_n - u_k||^2\) :

​ return 1

​ ELSE:

​ return 0

就是逐個計算每個樣本到各中心距離, 離哪個近,就歸為該類, 復雜度是 O(kn)

就相當於咱之前推導高斯混合里面的 \(w_j^{(i)}\)

EM 的判別則為:

\(p^{(i)} (k|n) = \frac {p_k^{(i)} g(x_n; m_k^{(i)} \sigma_k^{(i)})}{\sum \limits _{m=1}^K p_k^{(i)} g(x_n; m_k^{(i)} \sigma_k^{(i)})}\)

就是一個全概率下的貝葉斯嘛.

def $P(k|n) $ :

​ IF \(k = arg \ max _s \ p(s| x_n, m_k, \sigma_k)\) :

​ return 1

​ ELSE:

​ return 0

M-步驟

K-means 就是在遍歷完一輪后, 進行中心點的更新

\(\mu_k = \frac {\sum \limits _{n} r_{nk} x_n}{\sum \limits _{n} r_{nk}}\)

就是將當前該類別下的所有點, 加起來, 再求平均, 得到中心

EM 也是做一樣的事情呀

\(m_k^{(i+1)} = \frac {\sum \limits _{n=1}^N p^{(i)}(k|n)x_n} {\sum \limits _{n=1}^N p^{(i)}(k|n)}\)

就到這里吧, 這篇主要是回憶和小結一波 k-means 和 EM算法, 感覺EM算法整明白了對自信心提升還是蠻大的, 因為它涉及概率分布, 參數估計, 最大似然, 貝葉斯等, 這些都是概率論的核心知識點呀, 是需要一定功力的哦.


免責聲明!

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



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