數學雜記2 - 從高斯混合EM推導K-means
讓我們從置信度開始,它是這樣表示的
γ(znk)=πkN(xn|μk,σ2k)∑k′πk′N(xn|μk′,σ2k′)
用來闡明該點xn是屬於第k群的可能性,注意分母的k′是個dummy variable,並且在上式中的參數捨去了粗體寫法,讀者必須知道它們都可以直接推廣到向量的形式。所以我們便可以計算出第k群的中心位置μk:
μk=1Nk∑nγ(znk)xn
和
Nk=∑nγ(znk).
由於高斯分佈完整的形式為
N(xn|μk,σ2k)=1√2πσkexp[−(xn−μk)22σ2k]
並將它代入Eq. (1)稍做整理後得到
γ(znk)=βkexp(−β2kℓ2nk)∑k′βk′exp(−β2k′ℓ2nk′),
其中標準差的倒數βk=1/σk稱做肛…啊不好意思,是剛度 (stiffness) 而ℓnk即歐氏距離√(xn−μk)2,又由於πk是個常量 (zk出現的先驗機率) 和我們在意的變數都沒有直接關聯,所以我將他等式中移除並不影響。
現在我們就證明當剛度趨近無限大時,上述的高斯混合EM會變成K-mean的形式,故有對第k群而言 limβk→∞βkexp(−β2kℓ2nk)∑k′βk′exp(−β2k′ℓ2nk′)=limβk→∞e−β2kℓ2nk(1−2β2kℓ2nk)e−β2kℓ2nk(1−2β2kℓ2nk)=1. 最左邊取極限時整個式子變成了∞×0∞×0=undetermined,所以我們使用羅必達法則 (L'Hôpital's rule) 將分子分母同時對βk微分 ∂/∂βk,但注意在分母只有啞變數k′=k才有微分後不等於0。
Vola! 最終我們得到了 γ(xn)={1,k′=k,0,k′≠k. 這個結論告訴我們了只有當xn屬於k′=k群時它才有置信度等於1,其它都是0,而z在這裡已經無關緊要了。所以Eq. (2)變成 μk=1Nk∑n∈kxn 然後原本Eq. (3)的Nk現在就只是單純數有幾個點xn是屬於第k群而已。至於怎麼在K個群中決定xn要屬於誰,就只能用 ˆk′=argmin ℓnk≡argmin (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!
現在我們就證明當剛度趨近無限大時,上述的高斯混合EM會變成K-mean的形式,故有對第k群而言 limβk→∞βkexp(−β2kℓ2nk)∑k′βk′exp(−β2k′ℓ2nk′)=limβk→∞e−β2kℓ2nk(1−2β2kℓ2nk)e−β2kℓ2nk(1−2β2kℓ2nk)=1. 最左邊取極限時整個式子變成了∞×0∞×0=undetermined,所以我們使用羅必達法則 (L'Hôpital's rule) 將分子分母同時對βk微分 ∂/∂βk,但注意在分母只有啞變數k′=k才有微分後不等於0。
Vola! 最終我們得到了 γ(xn)={1,k′=k,0,k′≠k. 這個結論告訴我們了只有當xn屬於k′=k群時它才有置信度等於1,其它都是0,而z在這裡已經無關緊要了。所以Eq. (2)變成 μk=1Nk∑n∈kxn 然後原本Eq. (3)的Nk現在就只是單純數有幾個點xn是屬於第k群而已。至於怎麼在K個群中決定xn要屬於誰,就只能用 ˆk′=argmin ℓnk≡argmin (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!
留言
張貼留言