遵循统一的机器学习框架理解高斯混合模型(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. LeetCode 317. Shortest Distance from All Buildings

    原题链接在这里:https://leetcode.com/problems/shortest-distance-from-all-buildings/ 题目: You want to build a ...

  2. WCF wsHttpBinding in SoapUI

    当使用wsHttpBinding,而不是平时用的webHttpBinding的时候,用soapui会报错.这个时候需要选中WS-A选项中的"Add default wsa:Action&qu ...

  3. plupload上传整个文件夹

    大容量文件上传早已不是什么新鲜问题,在.net 2.0时代,HTML5也还没有问世,要实现这样的功能,要么是改web.config,要么是用flash,要么是用一些第三方控件,然而这些解决问题的方法要 ...

  4. 数据结构实验之查找五:平方之哈希表 (SDUT 3377)

    Hash表的平方探测思路:如果当前这个没存放数值,就放进去,如果当前这个地方Hash [ i ] 已经有数值了,就以平方的间隔左右寻找没有存放数的空白 Hash [ i ]. #include < ...

  5. FF,NF,BF

    设计一个可变式分区分配的存储管理方案.并模拟实现分区的分配和回收过程. 对分区的管理法可以是下面三种算法之一: 首次适应算法 循环首次适应算法 最佳适应算法 对于测试样例 : 首地址        大 ...

  6. ie 使用window.open页面报错

    window.open(url)打开新页面是如果要通过地址栏来传参要注意 var qt = ""; qt += "&teachMaterialDealInfo.b ...

  7. zabbix (一) 初识

    1.什么是zabbix? Zabbix由Alexei Vladishev创建,目前由Zabbix SIA积极开发和支持. Zabbix是一种企业级开源分布式监控解决方案. Zabbix是监控底层存储( ...

  8. LUA 在C函数中保存状态:registry、reference

    1 背景 lua的值一般都是保存在栈里面,调用函数完毕值在栈会被清掉,从而被GC回收.但有时候C函数需要在函数体的作用域之外保存某些Lua数据,这些数据不能存放在栈里面,有没有全局变量之类的可以存放. ...

  9. 【解决方案】IP代理池设计与解决方案

    一.背景 爬虫服务请求量大,为了应对反爬措施,增加爬虫的爬取效率和代理IP使用率,需要设计一个IP代理池,满足以下需求: 定时任务获取第三方代理 及时剔除IP代理池中失效的IP 业务隔离IP 若IP未 ...

  10. 教你阅读 Cpython 的源码(二)

    第二部分:Python解释器进程 在上节教你阅读 Cpython 的源码(一)中,我们从编写Python到执行代码的过程中看到Python语法和其内存管理机制. 在本节,我们将从代码层面去讨论 ,Py ...