KMeans

KMeans是一种无监督的聚类模型(不熟悉的朋友可以看这篇博客),其中,模型的求解可以用EM算法实现

我们知道,KMeans的 $ Loss function $ 为

\[ J=\sum _{n=1}^N\sum _{k=1}^K r_{nk}||x_n - u_k||^2 \]

其中,$ K $ 为聚类中心数量, $ u_k $ 为每个聚类中心的向量表示

Estep

在KMeans中,Estep主要完成对数据集的划分,也就是确定这个数据“属于”哪个聚类中心。用更数学的语言表达就是

\[ r_{nk} = { \begin{cases} 1 & if \ k = argmin_j ||x_n - u_j||^2 \\ 0 & otherwise. \\ \end{cases} } \]

Mstep

Mstep主要完成对每个聚类中心的更新。对于 $ Loss function $ 简单求导便可知:

\[ u_k = \frac{\sum _n r_{nk}x_n}{\sum _n r_{nk}} \]

将Estep和Mstep不停地迭代,直到收敛~

代码如下: https://github.com/shiyi001/EM-Algorithm/tree/master/KMeans