首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

高斯混合模型(GMM)及其EM算法的理解

  • 25-03-03 22:42
  • 4582
  • 12587
blog.csdn.net

一个例子

高斯混合模型(Gaussian Mixed Model)指的是多个高斯分布函数的线性组合,理论上GMM可以拟合出任意类型的分布,通常用于解决同一集合下的数据包含多个不同的分布的情况(或者是同一类分布但参数不一样,或者是不同类型的分布,比如正态分布和伯努利分布)。

如图1,图中的点在我们看来明显分成两个聚类。这两个聚类中的点分别通过两个不同的正态分布随机生成而来。但是如果没有GMM,那么只能用一个的二维高斯分布来描述图1中的数据。图1中的椭圆即为二倍标准差的正态分布椭圆。这显然不太合理,毕竟肉眼一看就觉得应该把它们分成两类。

图1
图1

这时候就可以使用GMM了!如图2,数据在平面上的空间分布和图1一样,这时使用两个二维高斯分布来描述图2中的数据,分别记为 N ( μ 1 , Σ 1 ) \mathcal{N}(\boldsymbol{\mu}_1, \boldsymbol{\Sigma}_1) N(μ1​,Σ1​)和 N ( μ 2 , Σ 2 ) \mathcal{N}(\boldsymbol{\mu}_2, \boldsymbol{\Sigma}_2) N(μ2​,Σ2​). 图中的两个椭圆分别是这两个高斯分布的二倍标准差椭圆。可以看到使用两个二维高斯分布来描述图中的数据显然更合理。实际上图中的两个聚类的中的点是通过两个不同的正态分布随机生成而来。如果将两个二维高斯分布 N ( μ 1 , Σ 1 ) \mathcal{N}(\boldsymbol{\mu_1}, \boldsymbol{\Sigma}_1) N(μ1​,Σ1​)和 N ( μ 2 , Σ 2 ) \mathcal{N}(\boldsymbol{\mu}_2, \boldsymbol{\Sigma}_2) N(μ2​,Σ2​)合成一个二维的分布,那么就可以用合成后的分布来描述图2中的所有点。最直观的方法就是对这两个二维高斯分布做线性组合,用线性组合后的分布来描述整个集合中的数据。这就是高斯混合模型(GMM)。

图2
图2

高斯混合模型(GMM)

设有随机变量 X \boldsymbol{X} X,则混合高斯模型可以用下式表示:
p ( x ) = ∑ k = 1 K π k N ( x ∣ μ k , Σ k ) p(\boldsymbol{x}) = \sum_{k=1}^K\pi_k \mathcal{N}(\boldsymbol{x}|\boldsymbol{\mu}_k, \boldsymbol{\Sigma}_k) p(x)=k=1∑K​πk​N(x∣μk​,Σk​)

其中 N ( x ∣ μ k , Σ k ) \mathcal{N}(\boldsymbol{x}|\boldsymbol{\mu}_k, \boldsymbol{\Sigma}_k) N(x∣μk​,Σk​)称为混合模型中的第 k k k个分量(component)。如前面图2中的例子,有两个聚类,可以用两个二维高斯分布来表示,那么分量数 K = 2 K = 2 K=2. π k \pi_k πk​是混合系数(mixture coefficient),且满足:
∑ k = 1 K π k = 1 \sum_{k=1}^K\pi_k = 1 k=1∑K​πk​=1
0 ≤ π k ≤ 1 0 \leq \pi_k \leq 1 0≤πk​≤1

实际上,可以认为 π k \pi_k πk​就是每个分量 N ( x ∣ μ k , Σ k ) \mathcal{N}(\boldsymbol{x}|\boldsymbol{\mu}_k, \boldsymbol{\Sigma}_k) N(x∣μk​,Σk​)的权重。

GMM的应用

GMM常用于聚类。如果要从 GMM 的分布中随机地取一个点的话,实际上可以分为两步:首先随机地在这 K 个 Component 之中选一个,每个 Component 被选中的概率实际上就是它的系数 π k \pi_k πk​ ,选中 Component 之后,再单独地考虑从这个 Component 的分布中选取一个点就可以了──这里已经回到了普通的 Gaussian 分布,转化为已知的问题。

将GMM用于聚类时,假设数据服从混合高斯分布(Mixture Gaussian Distribution),那么只要根据数据推出 GMM 的概率分布来就可以了;然后 GMM 的 K 个 Component 实际上对应 K K K个 cluster 。根据数据来推算概率密度通常被称作 density estimation 。特别地,当我已知(或假定)概率密度函数的形式,而要估计其中的参数的过程被称作『参数估计』。

例如图2的例子,很明显有两个聚类,可以定义 K = 2 K=2 K=2. 那么对应的GMM形式如下:
p ( x ) = π 1 N ( x ∣ μ 1 , Σ 1 ) + π 2 N ( x ∣ μ 2 , Σ 2 ) p(\boldsymbol{x}) =\pi_1 \mathcal{N}(\boldsymbol{x}|\boldsymbol{\mu}_1, \boldsymbol{\Sigma}_1) + \pi_2 \mathcal{N}(\boldsymbol{x}|\boldsymbol{\mu}_2, \boldsymbol{\Sigma}_2) p(x)=π1​N(x∣μ1​,Σ1​)+π2​N(x∣μ2​,Σ2​)

上式中未知的参数有六个: ( π 1 , μ 1 , Σ 1 ; π 2 , μ 2 , Σ 2 ) (\pi_1, \boldsymbol{\mu}_1, \boldsymbol{\Sigma}_1; \pi_2, \boldsymbol{\mu}_2, \boldsymbol{\Sigma}_2) (π1​,μ1​,Σ1​;π2​,μ2​,Σ2​). 之前提到GMM聚类时分为两步,第一步是随机地在这 K K K个分量中选一个,每个分量被选中的概率即为混合系数 π k \pi_k πk​. 可以设定 π 1 = π 2 = 0.5 \pi_1 = \pi_2 = 0.5 π1​=π2​=0.5,表示每个分量被选中的概率是0.5,即从中抽出一个点,这个点属于第一类的概率和第二类的概率各占一半。但实际应用中事先指定 π k \pi_k πk​的值是很笨的做法,当问题一般化后,会出现一个问题:当从图2中的集合随机选取一个点,怎么知道这个点是来自 N ( x ∣ μ 1 , Σ 1 ) N(\boldsymbol{x}|\boldsymbol{\mu}_1, \boldsymbol{\Sigma}_1) N(x∣μ1​,Σ1​)还是 N ( x ∣ μ 2 , Σ 2 ) N(\boldsymbol{x}|\boldsymbol{\mu}_2, \boldsymbol{\Sigma}_2) N(x∣μ2​,Σ2​)呢?换言之怎么根据数据自动确定 π 1 \pi_1 π1​和 π 2 \pi_2 π2​的值?这就是GMM参数估计的问题。要解决这个问题,可以使用EM算法。通过EM算法,我们可以迭代计算出GMM中的参数: ( π k , x k , Σ k ) (\pi_k, \boldsymbol{x}_k, \boldsymbol{\Sigma}_k) (πk​,xk​,Σk​).

GMM参数估计过程

GMM的贝叶斯理解

在介绍GMM参数估计之前,先改写GMM的形式,改写之后的GMM模型可以方便地使用EM估计参数。GMM的原始形式如下:

p ( x ) = ∑ k = 1 K π k N ( x ∣ μ k , Σ k ) (1) p(\boldsymbol{x}) = \sum_{k=1}^K\pi_k \mathcal{N}(\boldsymbol{x}|\boldsymbol{\mu}_k, \boldsymbol{\Sigma}_k) \tag{1} p(x)=k=1∑K​πk​N(x∣μk​,Σk​)(1)

前面提到 π k \pi_k πk​可以看成是第 k k k类被选中的概率。我们引入一个新的 K K K维随机变量 z \boldsymbol{z} z. z k ( 1 ≤ k ≤ K ) z_k (1 \leq k \leq K) zk​(1≤k≤K)只能取0或1两个值; z k = 1 z_k = 1 zk​=1表示第 k k k类被选中的概率,即: p ( z k = 1 ) = π k p(z_k = 1) = \pi_k p(zk​=1)=πk​;如果 z k = 0 z_k = 0 zk​=0表示第 k k k类没有被选中的概率。更数学化一点, z k z_k zk​要满足以下两个条件:
z k ∈ { 0 , 1 } z_k \in \{0,1\} zk​∈{ 0,1}
∑ K z k = 1 \su

文章知识点与官方知识档案匹配,可进一步学习相关知识
算法技能树首页概览60791 人正在系统学习中
注:本文转载自blog.csdn.net的阿拉丁吃米粉的文章"https://blog.csdn.net/jinping_shi/article/details/59613054"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2491) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top