上一篇阐述了EM算法的主要原理,这一篇来看其两大应用 —— K-means 与 高斯混合模型,主要由EM算法的观点出发。html
K-means的目标是将样本集划分为K个簇,使得同一个簇内样本的距离尽量小,不一样簇之间的样本距离尽量大,即最小化每一个簇中样本与质心的距离。K-means属于原型聚类(prototype-based clustering),原型聚类指聚类结构能经过一组原型刻画,而原型即为样本空间中具备表明性的点。在K-means中,这个原型就是每一个簇的质心 \(\boldsymbol{\mu}\) 。
从EM算法的观点来看,K-means的参数就是每一个簇的质心 \(\boldsymbol{\mu}\),隐变量为每一个样本的所属簇。若是事先已知每一个样本属于哪一个簇,则直接求平均便可获得 \(\boldsymbol{\mu}\) 。但现实中不知道的状况下,则须要运用EM的思想:
假设要k个簇,先随机选定k个点做为质心\(\{\boldsymbol{\mu_1}, \boldsymbol{\mu_2} \cdots \boldsymbol{\mu_k}\}\):算法
固定\(r_{nk}\),根据上一步的划分结果从新计算每一个簇的质心。因为咱们的目标是最小化每一个簇中样本与质心的距离,可将目标函数表示为 \(J = \sum\limits_{n=1}^N r_{nk} ||\mathbf{x}_n - \boldsymbol{\mu}_k||^2\),要最小化\(J\)则对\(\boldsymbol{\mu}_k\)求导得 \(2\sum\limits_{n=1}^N r_{nk}(\mathbf{x}_n - \boldsymbol{\mu}_k) = 0\),则
\[ \boldsymbol{\mu}_k = \frac{\sum_nr_{nk} \mathbf{x}_n}{\sum_n r_{nk}} \]
即簇中每一个样本的均值向量。函数
上面两步分别更新\(r_{nk}\)和\(\boldsymbol{\mu_k}\)就对应了EM算法中的E步和M步。和EM算法同样,K-means每一步都最小化目标函数 \(J\),于是能够保证收敛到局部最优值,但在非凸目标函数的状况下不能保证收敛到全局最优值。另外,K-means对每一个样本进行“硬分配(hard assignment)”,即只归类为一个簇,然而某些样本可能处于簇与簇的边界处,将这些样本强行分到其中一个簇可能并不能反映确信度。后文的高斯混合模型可进行“软分配(soft assignment)”, 即对每一个样本所划分的簇进行几率估计。学习
最后总结一下K-means算法的优缺点:优化
优势:spa
缺点:prototype
对离群点敏感。3d
K值难以事先选取,交叉验证不大适合,由于簇越多,目标函数 \(\sum\limits_{n=1}^N r_{nk} ||\mathbf{x}_n - \boldsymbol{\mu}_k||^2\) 就越小。常采用的方法有:1、“拐点法”,以下图 K=3 就是一个拐点。htm
没法保证收敛到全局最优值,常使用不一样的初始值进行屡次试验。也能够经过 K-means++ 算法优化,核心思想是选取与已有质心距离较远的点做为初始值。blog
只能发现球状的簇。
因为采用欧氏距离,没法直接计算类别型变量。
高斯混合模型一样多用于聚类,与K-means不一样的是其采用几率模型来表达聚类原型。
首先回顾一下高斯分布(Gaussian Distribution):对于随机变量\(x\),其几率密度函数可表示为:
\[ \mathcal{N}(x|\mu, \sigma^2) = \frac{1}{\sqrt{2\pi\sigma^2}}e^{-\frac{(x-\mu)^2}{2\sigma^2}} \]
若\(\mathbf{x}\)为n维随机向量,则多元高斯分布(Multivariate Gaussian Distribution)为:
\[ \mathcal{N}(\mathbf{x}| \boldsymbol{\mu},\mathbf{\Sigma}) = \frac{1}{(2\pi)^{\frac{n}{2}}|\Sigma|^\frac12}\,e^{-\frac12(\mathbf{x}-\boldsymbol{\mu})^T\mathbf{\Sigma}^{-1}(\mathbf{x}-\boldsymbol{\mu})} \]
其中\(\boldsymbol{\mu}\)为n维均值向量,\(\mathbf{\Sigma}\)为\(n\times n\)的协方差矩阵,\(|\mathbf{\Sigma}|\)为\(\mathbf{\Sigma}\)的行列式。
不少时候咱们发现单个高斯分布没法很好地描述数据的性质,以下图数据分红了两个簇,若是使用两个高斯分布明显能更好地描述其结构。
所以沿着这个思路就诞生了高斯混合模型(Mixture of Gaussians),本质上是k个高斯分布的线性组合,这样灵活性大增,能描述更多样的分布:
\[ p(\mathbf{x}) = \sum\limits_{k=1}^{K}\pi_k\mathcal{N}(\mathbf{x}|\boldsymbol{\mu}_k,\mathbf{\Sigma}_k) \qquad \tag{1.1} \]
其中\(0 \leqslant\pi_k\leqslant 1\)为混合系数(mixing coefficients),知足\(\sum\limits_{k=1}^{K} \pi_k= 1\) 。
因为本文的主角是EM算法,因此下面以EM算法的角度来看待高斯混合模型。
回忆EM算法是一种对含有隐变量的几率模型参数的极大似然估计。一般隐变量\(\mathbf{Z}\)未知,而实际知晓的只有观测数据\(\mathbf{X}\)。而对于高斯混合模型来讲,观测数据是这样产生的:先依照\(\pi_k\)选择第k个高斯分模型,而后依照其几率密度函数进行采样生成相应的样本。
能够看到在通过上述过程后咱们拿到手的只有采样得来的样本,殊不知道每一个样原本自于哪一个分模型,但这样就表示咱们得到了高斯混合模型的隐变量。
这里定义K维随机向量 \(\mathbf{z} = \begin{bmatrix} z_1 \\ z_2 \\ \vdots \\ z_k \\ \end{bmatrix}\),\(\mathbf{z}\)中只有一个\(z_k\)为1,其他元素为0,即\(z_k = \left. \begin{cases}1\,, & \text{数据来自第k个分模型} \\ 0\,, & \text{不然} \end{cases} \right.\),
这样\(z_k\)即为高斯混合模型的隐变量,表示样原本自于第k个分模型。
因为\(p(\mathbf{x}) = \sum\limits_zp(\mathbf{x},\mathbf{z}) = \sum\limits_{z}p(\mathbf{z})\,p(\mathbf{x}|\mathbf{z})\),对比\((1.1)\)式中高斯混合模型的定义,可将\(\pi_k\)视为选择第k个分模型的先验几率,即\(\pi_k = p(z_k = 1)\);而对应的\(\mathcal{N}(\mathbf{x}|\mathbf{\mu}_k, \mathbf{\Sigma}_k) = p(\mathbf{x}|z_k = 1)\)。另外在获得观测数据\(\{\mathbf{x}_1, \mathbf{x}_2 \cdots \mathbf{x}_n\}\)后,每一个\(\mathbf{x}_n\)都对应一个隐变量\(z_{nk}\),则运用贝叶斯定理,\(\mathbf{x}_n\)属于第k个分模型的后验几率 (记做\(\gamma(z_{nk})\))为:
\[ \begin{align*} \gamma(z_{nk}) = p(z_{nk} = 1|\mathbf{x}_n) & = \frac{p(z_{nk} = 1)\,p(\mathbf{x}_n|z_{nk} = 1)}{\sum\limits_{j=1}^Kp(z_{nj}=1)\,p(\mathbf{x}_n|z_{nj} = 1)} \\ & = \frac{\pi_k\,\mathcal{N}(\mathbf{x}_n|\mathbf{\mu}_k,\mathbf{\Sigma}_k)}{\sum\limits_{j=1}^K \pi_j\,\mathcal{N}(\mathbf{x}_n|\mathbf{\mu}_j,\mathbf{\Sigma}_j)} \tag{1.2} \end{align*} \]
下图显示了\(\gamma(z_{nk})\)的做用,图a是依照彻底数据的联合分布\(p(\mathbf{x},\mathbf{z})\)做图,每一个点依照其所属的第k个分模型标记颜色,这相似于“硬分配”; 图b则不考虑隐变量\(\mathbf{z}\),仅依照不彻底数据\(\mathbf{x}\)直接做图; 图c则考虑了每一个样原本自于各个分模型的后验几率\(\gamma(z_{nk})\),这样一些在簇中间的点的颜色是红蓝绿三种颜色的混合,代表这些点来自于每一个簇的几率比较接近,这即为“软分配”。
为了估计参数,若是直接采用极大似然法,则
\[ \begin{align*} L(\mathbf{\theta}) = ln\,p(\mathbf{X}|\mathbf{\theta}) = ln\,p(\mathbf{X}|\mathbf{\pi},\boldsymbol{\mu},\mathbf{\Sigma}) & = ln\left[\prod\limits_{n=1}^N\left(\sum\limits_{k=1}^K\,\pi_k \mathcal{N}(\mathbf{x}_n|\boldsymbol{\mu}_k,\mathbf{\Sigma}_k)\right) \right] \\[2ex] & = \sum\limits_{n=1}^N ln\left(\sum\limits_{k=1}^K \pi_k \frac{1}{(2\pi)^{\frac{n}{2}}|\Sigma|^\frac12}\,e^{-\frac12(\mathbf{x}-\boldsymbol{\mu})^T\mathbf{\Sigma}^{-1}(\mathbf{x}-\boldsymbol{\mu})} \right) \end{align*} \]
上式直接求导比较复杂,由于存在“和的对数” \(ln (\sum_{k=1}^K\pi_k\,\mathcal{N} \cdot)\) ,而若是使用EM算法则会方便不少。
先依照上一篇EM算法的流程,写出含Q函数:
\[ \mathcal{Q}(\mathbf{\theta}, \mathbf{\theta}^{(t)}) = \sum\limits_{n=1}^N\sum\limits_{\mathbf{z}}p(\mathbf{z}|\mathbf{x}_n,\mathbf{\pi}^{(t)},\boldsymbol{\mu}^{(t)},\mathbf{\Sigma}^{(t)})\,ln(\mathbf{x}_n,\mathbf{z}|\pi,\boldsymbol{\mu},\mathbf{\Sigma}) \tag{1.3} \]
由\((1.2)\)式可知,\((1.3)\)中第一项 \(p(z_{nk} = 1|\mathbf{x}_n,\pi^{(t)},\boldsymbol{\mu}^{(t)},\mathbf{\Sigma}^{(t)}) = \gamma(z_{nk})\),表示当前参数下每一个样本\(\mathbf{x}_n\)属于第k个分模型的后验几率。而第二项为彻底数据的对数似然函数:
\[ \begin{align*} ln(\mathbf{x}_n,\mathbf{z}|\pi,\mathbf{\mu},\mathbf{\Sigma}) & = ln\prod\limits_{k=1}^K \left[\pi_k\mathcal{N}(\mathbf{x}_n|\boldsymbol{\mu}_k,\mathbf{\Sigma_k}) \right]^{z_{nk}} \\ & = \sum\limits_{k=1}^Kz_{nk} \left[ln \pi_k + ln\,\mathcal{N}(\mathbf{x_n}|\boldsymbol{\mu}_k,\mathbf{\Sigma}_k)\right] \end{align*} \]
由此\((1.3)\)式变为:
\[ \begin{align*} & \sum\limits_{n=1}^N\sum\limits_{k=1}^K \gamma (z_{nk}) \left[ln \pi_k + ln\,\mathcal{N}(\mathbf{x_n}|\boldsymbol{\mu}_k,\mathbf{\Sigma}_k)\right] \\ = \;& \sum\limits_{n=1}^N\sum\limits_{k=1}^K \gamma (z_{nk}) \left[ln\,\pi_k + ln\left(\frac{1}{(2\pi)^\frac{n}{2}|\mathbf{\Sigma|^\frac{1}{2}}}\,e^{-\frac12 (\mathbf{x}_n - \boldsymbol{\mu}_k)^T\mathbf{\Sigma}_k^{-1}(\mathbf{x}_n-\boldsymbol{\mu}_k)} \right) \right] \tag{1.4} \end{align*} \]
能够看到上式括号中变成了“对数的和”,这使得求导方便了不少,且求解时式中\(ln(\cdot)\)和\(e^{(\cdot)}\)能够相互抵消。
\((1.4)\)式分别对\(\boldsymbol{\mu}_k\),\(\boldsymbol{\Sigma}_k\)求导得:
\[ \boldsymbol{\mu}_k = \frac{\sum\limits_{n=1}^N\gamma(z_{nk}) \cdot \mathbf{x}_n}{\sum\limits_{n=1}^N\gamma(z_{nk})}\qquad,\qquad \boldsymbol{\Sigma}_k = \frac{\sum\limits_{n=1}^N \gamma(z_{nk})\cdot (\mathbf{x}_n - \boldsymbol{\mu}_k)\cdot(\mathbf{x}_n-\boldsymbol{\mu}_k)^T}{\sum\limits_{n=1}^N \gamma(z_{nk})} \]
能够看到分模型k的\(\boldsymbol{\mu}_k\)和\(\boldsymbol{\Sigma}_k\)是全部样本的加权平均,其中每一个样本的权重为该样本属于分模型k的后验几率\(\gamma(z_{nk})\) 。对比上文中K-means的 \(\boldsymbol{\mu}_k = \frac{\sum_nr_{nk} \cdot \mathbf{x}_n}{\sum_nr_{nk}}\),两者形式相似,区别为K-means中的\(r_{nk} \in \{0,1\}\),而高斯混合模型中\(\gamma(z_{nk})\)为几率估计。
对于混合系数\(\pi_k\),由于有限制条件\(\sum_{k=1}^K \pi_k = 1\),所以须要使用拉格朗日乘子法转化为无约束优化问题:
\[ \sum\limits_{n=1}^N\sum\limits_{k=1}^K \gamma (z_{nk}) \left[ln\,\pi_k + ln\left(\frac{1}{(2\pi)^\frac{n}{2}|\mathbf{\Sigma|^\frac{1}{2}}}\,e^{-\frac12 (\mathbf{x}_n - \boldsymbol{\mu}_k)^T\mathbf{\Sigma}_k^{-1}(\mathbf{x}_n-\boldsymbol{\mu}_k)} \right) \right] + \lambda(\sum\limits_{k=1}^K \pi_k - 1) \]
对\(\pi_k\)求导得,
\[ \begin{align*} & \sum\limits_{n=1}^N\frac{\gamma(z_{nk})}{\pi_k} + \lambda = 0 \qquad \Longrightarrow \qquad \pi_k = \frac{\sum\limits_{n=1}^N \gamma(z_{nk})}{-\lambda} \tag{1.5} \\ & \\ & \text{因为$\sum_{k=1}^K\pi_k = 1\;,\qquad$ 则} \;\;\sum_{k=1}^K \;\frac{\sum_{n=1}^N \gamma (z_{nk})}{-\lambda} = 1 \;, \;\lambda = -N \quad 代入(1.5) \;,\\ & \\ & \text{得}\; \pi_k = \frac{\sum_{n=1}^N\gamma(z_{nk})}{N} \end{align*} \]
即每一个分模型k的混合系数是属于k的样本的平均后验几率,由此运用EM算法能大大简化高斯混合模型的参数估计过程,在中间步只需计算\(\gamma(z_{nk})\)就好了。
输入: 样本集 \(\mathbf{X} = \{\mathbf{x}_1, \mathbf{x}_2 \cdots \mathbf{x}_n\}\)
输出: 高斯混合模型参数 \(\pi, \boldsymbol{\mu}, \boldsymbol{\Sigma}\)
最后总结一下高斯混合模型的优缺点:
优势:
缺点:
在现实的分类问题中常遇到数据集中只有少许样本是带有标签的,而大部分样本的标签缺失。若是直接将无标签的样本丢弃,则会容易形成大量的有用信息被浪费。而若是使用EM算法,将缺失标签视为隐变量,不少时候能达到利用全部数据进行训练的目的。流程以下:
/