數學雜記2 - 從高斯混合EM推導K-means

為了IA9內容的完整性,我還是趕快把如何從高斯混合EM過渡到K-means的證明補齊吧,免得時間一久不但忘了也懶了😂
 讓我們從置信度開始,它是這樣表示的 γ(znk)=πkN(xn|μk,σ2k)kπkN(xn|μk,σ2k) 用來闡明該點xn是屬於第k群的可能性,注意分母的k是個dummy variable,並且在上式中的參數捨去了粗體寫法,讀者必須知道它們都可以直接推廣到向量的形式。所以我們便可以計算出第k群的中心位置μk: μk=1Nknγ(znk)xnNk=nγ(znk). 由於高斯分佈完整的形式為 N(xn|μk,σ2k)=12πσkexp[(xnμk)22σ2k] 並將它代入Eq. (1)稍做整理後得到 γ(znk)=βkexp(β2k2nk)kβkexp(β2k2nk), 其中標準差的倒數βk=1/σk稱做…啊不好意思,是剛度 (stiffness) 而nk即歐氏距離(xnμk)2,又由於πk是個常量 (zk出現的先驗機率) 和我們在意的變數都沒有直接關聯,所以我將他等式中移除並不影響。
 現在我們就證明當剛度趨近無限大時,上述的高斯混合EM會變成K-mean的形式,故有對第k群而言 limβkβkexp(β2k2nk)kβkexp(β2k2nk)=limβkeβ2k2nk(12β2k2nk)eβ2k2nk(12β2k2nk)=1. 最左邊取極限時整個式子變成了×0×0=undetermined,所以我們使用羅必達法則 (L'Hôpital's rule) 將分子分母同時對βk微分 /βk,但注意在分母只有啞變數k=k才有微分後不等於0。
 Vola! 最終我們得到了 γ(xn)={1,k=k,0,kk. 這個結論告訴我們了只有當xn屬於k=k群時它才有置信度等於1,其它都是0,而z在這裡已經無關緊要了。所以Eq. (2)變成 μk=1Nknkxn 然後原本Eq. (3)的Nk現在就只是單純數有幾個點xn是屬於第k群而已。至於怎麼在K個群中決定xn要屬於誰,就只能用 ˆk=argmin nkargmin (xnμk)2. 距離μk有最小變屬於那群!這也就是K-means算法!
 一些comments,在於當我們將βk時也正對應了標準差趨近於0,整個高斯分佈變成一根尖尖細細的delta function,中心圍繞著μk,故原本所有分佈的性質變消失了,比如當處在兩群中的點原本可以利用它對某一群的pdf比較大來決定它比較靠近誰變成單純的只能用和中心點μk的距離來決定了,這不僅僅大大的降低了分類的彈性,也使得資料集x數據分佈的狀態與形式在計算中被遺失了,所以最終才會衍生出IA9中所呈現K-means對一類狹長形的資料分佈並不能很好的分類的狀況。
 這個情況可以直接從做圖的方式看出 (1D-case就足夠了),不過有點懶😬,有數學底子或可以操作Mathematica或Matlab之類的讀者應該可以自己試著畫畫看,這不用用python,我覺得用python demo這個很麻煩XD!

留言

這個網誌中的熱門文章

PS2 — 因果本無心,天機皆可洩: 統計!

物理雜記3 - Ising模型與模擬退火

IA9b - K-means分群與EM算法: 實作