遵循统一的机器学习框架理解高斯混合模型(GMM)


一、前言

  1. 我的博客仅记录我的观点和思考过程。欢迎大家指出我思考的盲点,更希望大家能有自己的理解。
  2. 本文参考了网络上诸多资料,特别是B站UPshuhuai008的视频,讲解东西也是我最喜欢的方式:从多个角度阐述和理解问题。

二、理解

统一的机器学习框架(MLA):

1.模型(Model)
2.策略(Loss)
3.算法(Algorithm)


Model

题外话:所谓模型,就是建模的过程,也是我们对现实(已观测)的一种假设,比如前几篇介绍SVM,LR的假设就是:我们认为可以使用一个超平面区分这些数据。模型内涵了我们的归纳偏置或者说是归纳偏好

几何角度:

对于已观测到的数据\(X=\{x^i,x^2 \cdots ,x^n\}\),由一个概率生成模型生成而来 \(P(X|\theta)\),其中 \(\theta\) 就是这个模型的参数。由于压根不知道 \(P(X|\theta)\) 应该是什么形式,在高斯混合模型中,我们假设(归纳偏好)这些数据由K个高斯模型混合生成的数据,即:\(P(X)\) 由K个高斯模型叠加而来。

概率密度函数由多个高斯分布叠加(加权平均)而来
\[p(x) = \sum_{k=1}^{K} \alpha_k p(x|\mu_k,\Sigma_k),\;\;\sum_{k=1}^K \alpha_k=1,\;\;\alpha_k \; 表示加权值\]

几何角度就是直接把 \(p(x)\) 当成好几个模型加权到一起,直接就是分开看待的。
下面说的数据生成的角度就是直接 \(p(x)\) 当成一个整体看待,着眼点在于生成的过程,或者说分拆的是数据的生成过程。


数据生成的角度

引入隐变量z:z 表示 对于样本 x 属于哪一个高斯分布,z 是一个离散的随机变量(我们很难确定某一个样本具体属于哪一个分布,因此采用随机变量来表示)。

这里可以理解一个样本的生成过程:先根据z得到样本属于哪一个类别的高斯分布,然后再使用该高斯分布生成样本(随机采样)。
比如说:想象有一个不均匀的骰(此字念tou二声)子,首先掷骰子,得到一个数字,然后根据这个数字对于的高斯模型生成样本(随机采样)。这个骰子就决定了:每个生成样本属于哪一个高斯模型的先验分布。
简单来说就是:掷骰子-->随机采样,数学语言就是
\[p(z=k)-->N(\mu_k,\Sigma_k)\]

z 1 2 \(\cdots\) K
p(z) \(p_1\) \(p_2\) \(\cdots\) \(p_k\)

\[\sum_{k=1}^K p_k=1\]

因此,从这个角度的写出的概率密度函数:
\[
\begin{aligned}
p(x)&=\int_{z}p(x,z)dz\\
&= \int_{z} p(x|z)p(z) dz\\
&= \sum_{z}p(x|z)p(z)\\
&= \sum_{k=1}^K p(x|z=k)p(z=k)\\
&= \sum_{k=1}^K p_k p(x|\mu_k,\Sigma_k)
\end{aligned}
\]

此时就可以看出与几何角度的式子完全一样。

  • 几何角度: \(\alpha_k\) 表示不同高斯模型叠加时的权重值
  • 数据生成的角度: \(p_k\) 表示任意一个样本属于某一个高斯模型的概率

使用 \(\theta\) 表示全部参数:\(\theta = \{p_1 ,p_2 ,\cdots,p_k;\mu_1,\mu_2, \cdots,\mu_k;\Sigma_1,\Sigma_2,\cdots,\Sigma_k \}\)


策略

求得一组参数 \(\theta\),使得以 \(\theta\) 为参数的模型出现观测到数据的概率值最大。

需要的实现目标:
\[ \max\;logP(X|\theta)\]

真实的优化目标:
\[\theta^{(t+1)} = \arg\max_{\theta} \int_Z \; P(Z|X,\theta^{(t)})\;logP(X,Z|\theta)\]

上式怎么来的参考EM算法之不同的推导方法和自己的理解这篇博客


算法

极大似然估计

现在已经写出模型,还有观测到的数据,直接使用极大似然估计的方法求解:
\[
\begin{aligned}
\ \hat{\theta}_{MLE} &= \arg\max_{\theta}\;logP(X)\\
&= \arg\max_{\theta}\;log \prod_{i=1}^np(x^i)\\
&= \arg\max_{\theta}\; \sum_{i=1}^n log \sum_{k=1}^Kp(z^i=k) p(x^i|\mu_k,\Sigma_k)
\end{aligned}
\]

由于 \(log\) 里面是连加,\(MLE\) 的方式无法得到解析解,故此使用数值解:梯度下降法或者EM算法。


EM算法

\[\theta^{(t+1)} = \arg\max_{\theta} \int_Z \; P(Z|X,\theta^{(t)})\;logP(X,Z|\theta)\]
其中 \(Q(\theta,\theta^{(t)}) = \int_Z \; P(Z|X,\theta^{(t)})\;logP(X,Z|\theta)\) 就是在资料中常见的 \(Q\) 函数。

其实EM算法中使用的策略也还是极大似然估计,只不过换了个对象,极大化的对象不同了。刚开始方法(算法)没错,但是找错人了(优化的对象,损失函数,极大化的函数)。
就好像找对象,使用的方法(死缠烂打流,帅气高冷流,霸气大哥流,知心暖男流,苦逼老实人流,放荡不羁浪子流等,这里相当于人设)其实是没错的,假如没找到对象,可能是没有在正确的分类的人群里去找。比如你用放荡不羁浪子流派想去找一个经历较多想静心过生活的御姐,注定难度很大。因此想要找对象可以在两个方面改变:

  • 方法\人设 不变,还是使用放荡不羁浪子流(算法不变,还是极大似然估计),切换找对象的目标群,从御姐范群体换到天真浪漫小女生群体(换一个优化的目标、优化的对象or损失函数)
  • 目标群体不变,就爱御姐(优化的函数或者目标不变),使用别的方法\改变自己的人设,从放荡不羁浪子流换成暖男流或者帅气高冷流(从极大似然法换成梯度下降法)

方法相当于人设,一个人的人设改变较难,因此对于大部分人而言,找到一个符合自己人设的对象容易一些,可是大部分人都想找自己理想的目标,梦中的情人,此时就要去改变自己的人设,此时需要付出很大的努力。
更真实的是,有的方法只能优化较少目标,有的方法可以优化特别多的目标,比如MLE(极大似然估计)方法在 \(\arg\max_{\theta}\;logP(X)\) 中就做不到,但是GD(梯度下降法)就可以做到,而且基本是对于所有的目标都适用,简直就是现实世界中的高富帅(人设)。换句话说就是:有的人不需要改变自己的人设,就可以吸引到非常多不同群体的妹子(不同的优化目标或者优化函数),因为这种人设(优化方法)是通杀的。


网上的资料,关于EM算法的解释基本上就到此为止了,如何把上式展开,具体的过程是如何的呢,下面将详细展开说明。

展开方式1

\(\sum_{k=1}^Klogp(z^i=k|x^i,\theta^{(t)})]=1\)
这个是式子等会会用到。如果这个式子等于1看不懂的,那你就多看几遍。

\[
\begin{aligned}
Q(\theta,\theta^{(t)}) &= \int_Z \; P(Z|X,\theta^{(t)})\;logP(X,Z|\theta)\\
&=\sum_{Z} \{\prod_{j=1}^n p(z^j|x^j,\theta^{(t)}) \sum_{i=1}^n log \;p(x^i,z^i|\theta) \}\\
&=\sum_{z^1,\cdots,z^n} \{\prod_{j=1}^n p(z^j|x^j,\theta^{(t)}) \sum_{i=1}^n log \;p(x^i,z^i|\theta) \}\\
&=\sum_{z^1,\cdots,z^n}\{log\;p(x^1,z^1|\theta) \prod_{j=1}^n p(z^j|x^j,\theta^{(t)})+\cdots+ log\;p(x^n,z^n|\theta) \prod_{j=1}^n p(z^j|x^j,\theta^{(t)}) \}\\
&=\sum_{i=1}^n \{\sum_{k=1}^K log\;p(x^i,z^i=k|\theta)\;p(z^i=k|x^i,\theta^{(t)})]\prod_{j=2}^n[\sum_{k=1}^Klogp(z^i=k|x^i,\theta^{(t)})]\}\\
&=\sum_{i=1}^n \sum_{k=1}^K log\;p(x^i,z^i=k|\theta)\;p(z^i|x^i,\theta^{(t)})
\end{aligned}
\]


展开方式2:从原始式子推导展开

EM算法应用于GMM时,求得\(q(z) = {p(z|x,\theta^{(t)})}\)

\[
\begin{aligned}
log P(X|\theta) &= \sum_{i=1}^n log\;p(x^i|\theta)=\sum_{i=1}^n log \int_{z^i}p(x^i,z^i|\theta)dz^i\\
&=\sum_{i=1}^n log \int_{z^i} \frac{p(x^i,z^i|\theta)}{q(z^i)} q(z^i)dz^i\\
&=\sum_{i=1}^n log \;E_{q(z^i)}[ \frac{p(x^i,z^i|\theta)}{q(z^i)}]\\
& \geq \sum_{i=1}^nE_{q(z^i)}[log \frac{p(x^i,z^i|\theta)}{q(z^i)}]\\
& = \sum_{i=1}^n \sum_{k=1}^K {q(z^i=k)} log \frac{p(x^i,z^i=k|\theta)}{q(z^i=k)}\\
& = \sum_{i=1}^n \sum_{k=1}^K {q(z^i=k)} log {p(x^i,z^i=k|\theta)}-\sum_{i=1}^n \sum_{k=1}^K {q(z^i=k)} log\; {q(z^i=k)}\\
& = \sum_{i=1}^n \sum_{k=1}^K {q(z^i=k)} log {p(x^i,z^i=k|\theta)}\\
& = \sum_{i=1}^n \sum_{k=1}^K {p(z^i=k|x^i,\theta^{(t)})}\; log \;{p(x^i,z^i=k|\theta)}\\
\end{aligned}
\]


现在求得
\[
\begin{aligned}
Q(\theta,\theta^{(t)})&=\sum_{i=1}^n \sum_{k=1}^K {p(z^i=k|x^i,\theta^{(t)})}\; log \;{p(x^i,z^i=k|\theta)}\\
&=\sum_{i=1}^n \sum_{k=1}^K \frac{p(x^i|z^i=k,\theta^{(t)})p(z^i=k|\theta^{(t)})}{\sum_{j=1}^K p(x^i|z^i=j,\theta^{(t)})} log \;{p(x^i|z^i=k,\theta)p(z^i=k|\theta)}\\
&= \sum_{i=1}^n \sum_{k=1}^K \frac {N(x^i|\mu_k^{(t)},\Sigma_k^{(t)})p_k^{(t)}}{\sum_{j=1}^K N(x^i|\mu_j^{(t)},\Sigma_j^{(t)}) }logN(x^i|\mu_k,\Sigma_k)\;p_k
\end{aligned}
\]

根据极大似然估计的方法求取 \(p_k\):
\[\arg\max_{p}\sum_{i=1}^n \sum_{k=1}^K log\;p_k\; {p(z^i=k|x^i,\theta^{(t)})}\\\sum_{k=1}^K p_k=1\]

\[L(\lambda,p_k) =\sum_{i=1}^n \sum_{k=1}^K {p(z^i=k|x^i,\theta^{(t)})} log\;p_k+\lambda(1-\sum_{k=1}^Kp_k)\\
\]

\[
\begin{aligned}
&\frac {\partial L}{\partial p_k} = \sum_{i=1}^n \frac{p(z^i=k|x^i,\theta^{(t)})}{p_k}-\lambda=0\\
&\sum_{i=1}^n {p(z^i=k|x^i,\theta^{(t)})}-\lambda\;p_k=0\\
&\sum_{i=1}^n\sum_{k=1}^K{p(z^i=k|x^i,\theta^{(t)})}=n\\
&\sum_{k=1}^K \lambda p_k=\lambda \;\;-->\lambda=n\\
&p_k = \frac{1}{n}\sum_{i=1}^n {p(z^i=k|x^i,\theta^{(t)})}
\end{aligned}
\]


其他的以后再补充


遵循统一的机器学习框架理解高斯混合模型(GMM)的更多相关文章

  1. 遵循统一的机器学习框架理解SVM

    遵循统一的机器学习框架理解SVM 一.前言 我的博客仅记录我的观点和思考过程.欢迎大家指出我思考的盲点,更希望大家能有自己的理解. 本文参考了李宏毅教授讲解SVM的课程和李航大大的统计学习方法. 二. ...

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

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

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

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

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

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

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

    1. EM算法-数学基础 2. EM算法-原理详解 3. EM算法-高斯混合模型GMM 4. EM算法-GMM代码实现 5. EM算法-高斯混合模型+Lasso 1. 前言 前面几篇博文对EM算法和G ...

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

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

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

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

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

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

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

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

随机推荐

  1. java对象转换

    对象转换: 对象的分层涉及到各个层级之间的对象转换(Entity2DTO , DTO2VO, VO2DTO,DTO2Entity等),传统的采用set/get 方法硬编码实现写的代码比较多:或者采用B ...

  2. ES6学习记录(一)

    Class类 Class的静态方法 类相当于实例的原型,所有在类中定义的方法,都会被实例继承.如果在一个方法前,加上static关键字,就表示该方法不会被实例继承,而是直接通过类来调用,这就称为“静态 ...

  3. Hive的安装和配置

    前提是:hadoop必须已经启动了***         1°.解压hive的安装包            [crxy@master soft]# tar -zxvf apache-hive-0.14 ...

  4. Es6请求封装

    function registryToast(){ vue.prototype.$toast=showToast } export default registryToast   import './ ...

  5. 从ServerSwitch到SONiC Chassis:数据中心交换机技术的十年探索历程

    从ServerSwitch到SONiC Chassis:数据中心交换机技术的十年探索历程 2019-07-09 | 作者:白巍   编者按:微软交换机操作系统开源项目SONiC (Software f ...

  6. K-D Tree学习笔记

    用途 做各种二维三维四维偏序等等. 代替空间巨大的树套树. 数据较弱的时候水分. 思想 我们发现平衡树这种东西功能强大,然而只能做一维上的询问修改,显得美中不足. 于是我们尝试用平衡树的这种二叉树结构 ...

  7. 二分算法题目训练(一)——Shell Pyramid详解

    HDU2446——Shell Pyramid 详解 Shell Pyramid 题目描述(Google 翻译的) 在17世纪,由于雷鸣般的喧嚣,浓烟和炽热的火焰,海上的战斗与现代战争一样.但那时,大炮 ...

  8. ROS计算图级

    上一节说到一个 package 可以包含多个可执行文件(节点),可执行文件需要被运行,就要了解ROS的通信架构,也就是计算图级,例: 小萝卜机器人拥有驱动系统,感知系统,控制系统等,要让它从指定位置到 ...

  9. 10月清北学堂培训 Day 6

    今天是黄致焕老师的讲授~ T1 自信 AC 莫名 80 pts???我还是太菜了!! 对于每种颜色求出该颜色的四个边界,之后枚举边界构成的矩阵中每个元素,如果不等于该颜色就标记那种颜色不能最先使用. ...

  10. 结构体与C++sort()函数的用法

    C++sort()函数的用法 先看道题(本题来自http://codeup.cn/第26099): 题目描述 [问题描述] 高三全省联合模拟考试刚刚结束,经过各科老师的努力,各个学科的改卷工作终于结束 ...