1. EM算法-数学基础

2. EM算法-原理详解

3. EM算法-高斯混合模型GMM

4. EM算法-GMM代码实现

5. EM算法-高斯混合模型+Lasso

1. 前言

前面几篇博文对EM算法和GMM模型进行了介绍,本文我们通过对GMM增加一个惩罚项。

2. 不带惩罚项的GMM

原始的GMM的密度函数是
\[
p(\boldsymbol{x}|\boldsymbol{\pi},\boldsymbol{\mu},\boldsymbol{\Sigma})=\sum_{k=1}^K\pi_k\mathcal{N}(\boldsymbol{x}|\boldsymbol{\mu}_k,\boldsymbol{\Sigma}_k)
\]
\[
\sum_{k=1}^K\pi_k=1
\]
其中\(K\)是高斯组件的个数,\([\pi_1,\pi_2,...,\pi_k]\)是每个组件的权重。其中的\(\boldsymbol{\mu}_k,\boldsymbol{\Sigma}_k\)是组件\(k\)的均值和协方差矩阵。

log极大似然函数的公式是:
\[
L(\theta,\theta^{(j)})=\sum_{k=1}^Kn_k[log\pi_k-\frac{1}{2}(log(\boldsymbol{\Sigma_k})+\frac{{(x_i-\boldsymbol{\mu}_k})^2}{\boldsymbol{\Sigma}_k})]\;\;\;\;\;(1)
\]

这里有一个响应度的变量\(\gamma_{ik}\),响应度\(\gamma_{ik}\)代表了第\(i\)个样本,在第\(k\)个组件上的响应程度。响应度的计算公式也很简单。
\[
\gamma_{ik}=\frac{\pi_k\mathcal{N}(\boldsymbol{x}|\boldsymbol{\mu}_k,\boldsymbol{\Sigma}_k)}{\sum_{k=1}^K\pi_k\mathcal{N}(\boldsymbol{x}|\boldsymbol{\mu}_k,\boldsymbol{\Sigma}_k)}
\]

通过\(L(\theta, \theta^{j})\)对\(\mu_k\),\(\Sigma_k\)求偏倒等于0得到

\[
\mu_k=\frac{1}{n_k}\sum_{i=1}^N\gamma_{ik}x_i\;\;\;\;\;(2)
\]
\[
\Sigma_k=\frac{1}{n_k}\sum_{i=1}^N\gamma_{ik}(x_i-\mu_k)^2
\]
\[
\pi_k=\frac{n_k}{N}
\]
其中的\(n_k=\sum_{i=1}^N\gamma_{ik}\)。

到这里为止我们不带惩罚项的所有变量都计算出来了,只要一直循环E步M步,就能使得loglikelihood最大化。

3. 带惩罚项的GMM

在带penality的GMM中,我们假设协方差是一个对角矩阵,这样的话,我们计算高斯密度函数的时候,只需要把样本各个维度与对应的\(\mu_k\)和\(\sigma_k\)计算一维高斯分布,再相加即可。不需要通过多维高斯进行计算,也不需要协方差矩阵是半正定的要求。

我们给上面的(1)式加入一个惩罚项,
\[
\lambda\sum_{k=1}^K\sum_{j=1}^P\frac{|\mu_k-\bar{x}_j|}{s_j}
\]
其中的\(P\)是样本的维度。\(\bar{x}_j\)表示每个维度的平均值,\(s_j\)表示每个维度的标准差。这个penality是一个L1范式,对\(\mu_k\)进行约束。

加入penality后(1)变为
\[
L(\theta,\theta^{(j)})=\sum_{k=1}^Kn_k[log\pi_k-\frac{1}{2}(log(\boldsymbol{\Sigma_k})+\frac{{(x_i-\boldsymbol{\mu}_k})^2}{\boldsymbol{\Sigma}_k})] - \lambda\sum_{k=1}^K\sum_{j=1}^P\frac{|\mu_k-\bar{x}_j|}{s_j}
\]

这里需要注意的一点是,因为penality有一个绝对值,所以在对\(\mu_k\)求导的时候,需要分情况。于是(2)变成了
\[
\mu_k=\frac{1}{n_k}\sum_{i=1}^N\gamma_{ik}x_i
\]
\[
\mu_k=
\left \{\begin{array}{cc}
\frac{1}{n_k}(\sum_{i=1}^N\gamma_{ik}x_i - \frac{\lambda\sigma^2}{s_j}), & \mu_k >= \bar{x}_j\\
\frac{1}{n_k}(\sum_{i=1}^N\gamma_{ik}x_i + \frac{\lambda\sigma^2}{s_j}), & \mu_k < \bar{x}_j
\end{array}\right.
\]

3.1 注意点

  • 在带有penality的GMM中,如果从一开始迭代时,\(\lambda>0\)那这时loglikelihood很容易陷入一个局部最大值。如果前几个迭代我们先令\(\lambda=0\),而后在令\(\lambda>0\),这样能够寻找到一个比较好的最大值点。
  • 由于在算EM的时候,很容易出现underflow活着overflow,这是我们可以通过一个近似公式来避开这个问题。
    \[
    log(\sum_hexp(a_h)) = m + log(\sum_hexp(a_h - m))\;\;\;m=max(a_h)
    \]
  • 初始值很影响EM的聚类的结果,所以我们需要改变seed来多次运行程序,寻找导最好的EM结果。

4. 总结

本文对GMM模型进行了改良,加入了L1的penality项,使得\(\mu_k\)不会偏离\(\bar{x}_j\)太大,导致过拟合。下一篇博客通过代码,详细的展示这个过程。

5. EM算法-高斯混合模型GMM+Lasso的更多相关文章

  1. 6. EM算法-高斯混合模型GMM+Lasso详细代码实现

    1. 前言 我们之前有介绍过4. EM算法-高斯混合模型GMM详细代码实现,在那片博文里面把GMM说涉及到的过程,可能会遇到的问题,基本讲了.今天我们升级下,主要一起解析下EM算法中GMM(搞事混合模 ...

  2. 4. EM算法-高斯混合模型GMM详细代码实现

    1. EM算法-数学基础 2. EM算法-原理详解 3. EM算法-高斯混合模型GMM 4. EM算法-高斯混合模型GMM详细代码实现 5. EM算法-高斯混合模型GMM+Lasso 1. 前言 EM ...

  3. 3. EM算法-高斯混合模型GMM

    1. EM算法-数学基础 2. EM算法-原理详解 3. EM算法-高斯混合模型GMM 4. EM算法-高斯混合模型GMM详细代码实现 5. EM算法-高斯混合模型GMM+Lasso 1. 前言 GM ...

  4. EM算法和高斯混合模型GMM介绍

    EM算法 EM算法主要用于求概率密度函数参数的最大似然估计,将问题$\arg \max _{\theta_{1}} \sum_{i=1}^{n} \ln p\left(x_{i} | \theta_{ ...

  5. 高斯混合模型GMM与EM算法的Python实现

    GMM与EM算法的Python实现 高斯混合模型(GMM)是一种常用的聚类模型,通常我们利用最大期望算法(EM)对高斯混合模型中的参数进行估计. 1. 高斯混合模型(Gaussian Mixture ...

  6. 贝叶斯来理解高斯混合模型GMM

    最近学习基础算法<统计学习方法>,看到利用EM算法估计高斯混合模型(GMM)的时候,发现利用贝叶斯的来理解高斯混合模型的应用其实非常合适. 首先,假设对于贝叶斯比较熟悉,对高斯分布也熟悉. ...

  7. 高斯混合模型 GMM

    本文将涉及到用 EM 算法来求解 GMM 模型,文中会涉及几个统计学的概念,这里先罗列出来: 方差:用来描述数据的离散或波动程度. \[var(X) =  \frac{\sum_{i=1}^N( X_ ...

  8. Spark2.0机器学习系列之10: 聚类(高斯混合模型 GMM)

    在Spark2.0版本中(不是基于RDD API的MLlib),共有四种聚类方法:      (1)K-means      (2)Latent Dirichlet allocation (LDA)  ...

  9. 2. EM算法-原理详解

    1. EM算法-数学基础 2. EM算法-原理详解 3. EM算法-高斯混合模型GMM 4. EM算法-高斯混合模型GMM详细代码实现 5. EM算法-高斯混合模型GMM+Lasso 1. 前言 概率 ...

随机推荐

  1. Python学习笔记(七)—— 循环

    一.for ... in ... 循环 1.语法 names = ['Michael', 'Bob', 'Tracy'] for name in names: print(name) (1)需要有冒号 ...

  2. 【java】详解java中的注解(Annotation)

    目录结构: contents structure [+] 什么是注解 为什么要使用注解 基本语法 4种基本元注解 重复注解 使用注解 运行时处理的注解 编译时处理的注解 1.什么是注解 用一个词就可以 ...

  3. Swift 类型别名

    类型别名 在 Swift 语言中使用 typealias 关键字定义类型别名. typealias ShortInteger = Int8

  4. logstash_output_mongodb插件用途及安装详解

    安装详情参见:http://mojijs.com/2017/03/222639/index.html http://www.jianshu.com/p/8516e51e105d

  5. rhel 7 设置默认运行级别为图形

    查看默认级别 # systemctl get-default multi-user.target # cat /etc/inittab # inittab is no longer used when ...

  6. Microsoft.ACE.OLEDB.12.0 及其在 MSSQL中的使用

    1.Microsoft.ACE.OLEDB.12.0 简介 就是一个数据访问接口,用于在office文件和非office应用程序间传输数据.例如 Microsoft Office Access 201 ...

  7. Centos7源代码安装freeswitch和启动freeswitch

    centos7下安装freeswitch版本:1.6. 1.下载源代码: 进入目录 cd /usr/local/src 克隆原代码 git clone -b v1.6 https://freeswit ...

  8. LED音乐频谱之输入数据处理

    转载请注明出处:http://blog.csdn.net/ruoyunliufeng/article/details/38023431 通过前面的介绍我们知道.声音信号要通过AD转换,变成我们可以处理 ...

  9. iOS基础总结

    面试题预览: 1.KVO实现原理? 2.说说你理解的埋点? 3.消息转发机制原理? 4.说说你理解weak属性? 5.假如Controller太臃肿,如何优化? 6.项目中网络层如何做安全处理? 7. ...

  10. 用Duplex实现消息广播

    WCF中定义3种消息交换模式: 1. Request/Reply; 2. One-Way; 3. Duplex.  Request/Reply 是缺省模式,即同步调用.在调用服务方法后需要等待服务的消 ...