EM算法,高斯混合模型(GMM)

2023-11-01 23:59
文章标签 算法 模型 em 高斯 混合 gmm

本文主要是介绍EM算法,高斯混合模型(GMM),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 

目录

1.EM算法

2、高斯混合模型(GMM)

3.GMM和k-means  


1.EM算法

具体流程如下:

  输入:观测变量数据Y,隐变量数据Z,联合分布P(Y, Z|θ),条件分布P(Z|Y, θ)

  输出:模型参数θ

  1)选择参数θ的初始值θ(0),开始迭代

  2)E步:

记θ(i)次迭代参数为θ的估计值,在第i+1次迭代的E步,计算(基于当前求得的模型参数θ猜测隐变量的期望值,因此E步也称为期望步)

  

  3)M步:

求使得Q函数极大化的θ值,确定第i+1次迭代的参数的估计值θ(i+1)

  

  4)重复2, 3步直至收敛

  注意:EM算法是对初始化参数敏感的

2、高斯混合模型(GMM)

  EM算法的一个重要应用场景就是高斯混合模型的参数估计。高斯混合模型就是由多个高斯模型组合在一起的混合模型(可以理解为多个高斯分布函数的线性组合,理论上高斯混合模型是可以拟合任意类型的分布),例如对于下图中的数据集如果用一个高斯模型来描述的话显然是不合理的

  

  对于上图如果我们用两个高斯模型来描述,则如下

  

  然而对于两个高斯模型我们如何将其组合在一起呢,最简单的方式就是通过线性组合的形式来组合,其具体表达式如下:

  

  其中αk是系数,αk ≥ 0,且所有的α总和为1,k表示第k个模型,其中Φ(y|θk) 是高斯分布密度(θk = (μk,σk2)),具体表达式如下

  

  高斯混合模型常用语聚类中(现实中大多数分布都是正态分布,而在聚类中的各个类别可能是分布参数不同的正态分布)。对于高斯模型的应用大致是先随机在这K个模型中任选一个模型(αk是第k个模型被选中的概率,注意在这里的混合模型和集成学习中的模型是不一样的,这里实际应用的只是混合模型中的一个),然后再用这个模型进行预测。而且在用高斯混合模型进行聚类时,混合模型中的模型个数k事实上就是聚类的簇数k。

  用EM算法来估计高斯混合模型的参数,在这里参数θ = (α1,α2,...,αk;θ1,θ2,...,θk),在估计之前我们得预先明确隐变量。先假定观测数据yj(j = 1,2,...,N),具体yj的产生过程如下,首先依照概率αk选择第k个高斯分布模型,然后用这个模型生成观测数据yj。在这里观测数据是已知的,而观测数据具体来自哪个模型是未知的(这就和之前提过的三硬币模型是很相似的,知道模型被选择的概率就好比知道选择B,C硬币的概率,但是却不知道本次预测的结果是由B得出的还是C得出的),因此就引出了我们的隐变量,隐变量的具体表达式如下:

  

  γjk是0-1随机变量,确定了观测变量和隐变量之后,那么完全数据就是

  

  之后就可以用EM算法去估计参数θ,具体流程如下

  1)初始化θ值,开始迭代

  2)E步:依照当前的模型参数,计算

  

  3)M步:计算新一轮迭代的模型参数

  

  4)重复2, 3步直至算法收敛

3.GMM和k-means  

其实高斯混合模型和K-means(也可以用EM算法描述)方法很相似,

  1. 简单来说,K-means的结果是每个数据点被分配到其中某一类中,而高斯混合模型是给出这些点被分配给某一类的概率,可以看作是软聚类(也就是允许两个类之间有重合区域)
  2. 高斯混合模型是对初始值敏感的,也就是说如果运气不好,选取的初始值不好,最终的模型结果也不会很好,因此很多时候我们会用K-means做预训练,获得较好的结果,然后再用高斯混合模型进行训练进一步优化预测结果(高斯混合模型也是要给出聚类的簇数K值,在初始化参数时给出的)具体的做法就是:先用K-means粗略的估计出簇心,然后将簇心作为高斯混合模型的初始均值(μ值),然后再去估计高斯混合模型中的参数

 

这篇关于EM算法,高斯混合模型(GMM)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/326699

相关文章

Java中的雪花算法Snowflake解析与实践技巧

《Java中的雪花算法Snowflake解析与实践技巧》本文解析了雪花算法的原理、Java实现及生产实践,涵盖ID结构、位运算技巧、时钟回拨处理、WorkerId分配等关键点,并探讨了百度UidGen... 目录一、雪花算法核心原理1.1 算法起源1.2 ID结构详解1.3 核心特性二、Java实现解析2.

详解如何使用Python从零开始构建文本统计模型

《详解如何使用Python从零开始构建文本统计模型》在自然语言处理领域,词汇表构建是文本预处理的关键环节,本文通过Python代码实践,演示如何从原始文本中提取多尺度特征,并通过动态调整机制构建更精确... 目录一、项目背景与核心思想二、核心代码解析1. 数据加载与预处理2. 多尺度字符统计3. 统计结果可

SpringBoot整合Sa-Token实现RBAC权限模型的过程解析

《SpringBoot整合Sa-Token实现RBAC权限模型的过程解析》:本文主要介绍SpringBoot整合Sa-Token实现RBAC权限模型的过程解析,本文给大家介绍的非常详细,对大家的学... 目录前言一、基础概念1.1 RBAC模型核心概念1.2 Sa-Token核心功能1.3 环境准备二、表结

使用雪花算法产生id导致前端精度缺失问题解决方案

《使用雪花算法产生id导致前端精度缺失问题解决方案》雪花算法由Twitter提出,设计目的是生成唯一的、递增的ID,下面:本文主要介绍使用雪花算法产生id导致前端精度缺失问题的解决方案,文中通过代... 目录一、问题根源二、解决方案1. 全局配置Jackson序列化规则2. 实体类必须使用Long封装类3.

Springboot实现推荐系统的协同过滤算法

《Springboot实现推荐系统的协同过滤算法》协同过滤算法是一种在推荐系统中广泛使用的算法,用于预测用户对物品(如商品、电影、音乐等)的偏好,从而实现个性化推荐,下面给大家介绍Springboot... 目录前言基本原理 算法分类 计算方法应用场景 代码实现 前言协同过滤算法(Collaborativ

openCV中KNN算法的实现

《openCV中KNN算法的实现》KNN算法是一种简单且常用的分类算法,本文主要介绍了openCV中KNN算法的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录KNN算法流程使用OpenCV实现KNNOpenCV 是一个开源的跨平台计算机视觉库,它提供了各

Spring Security基于数据库的ABAC属性权限模型实战开发教程

《SpringSecurity基于数据库的ABAC属性权限模型实战开发教程》:本文主要介绍SpringSecurity基于数据库的ABAC属性权限模型实战开发教程,本文给大家介绍的非常详细,对大... 目录1. 前言2. 权限决策依据RBACABAC综合对比3. 数据库表结构说明4. 实战开始5. MyBA

springboot+dubbo实现时间轮算法

《springboot+dubbo实现时间轮算法》时间轮是一种高效利用线程资源进行批量化调度的算法,本文主要介绍了springboot+dubbo实现时间轮算法,文中通过示例代码介绍的非常详细,对大家... 目录前言一、参数说明二、具体实现1、HashedwheelTimer2、createWheel3、n

Java的IO模型、Netty原理解析

《Java的IO模型、Netty原理解析》Java的I/O是以流的方式进行数据输入输出的,Java的类库涉及很多领域的IO内容:标准的输入输出,文件的操作、网络上的数据传输流、字符串流、对象流等,这篇... 目录1.什么是IO2.同步与异步、阻塞与非阻塞3.三种IO模型BIO(blocking I/O)NI

SpringBoot实现MD5加盐算法的示例代码

《SpringBoot实现MD5加盐算法的示例代码》加盐算法是一种用于增强密码安全性的技术,本文主要介绍了SpringBoot实现MD5加盐算法的示例代码,文中通过示例代码介绍的非常详细,对大家的学习... 目录一、什么是加盐算法二、如何实现加盐算法2.1 加盐算法代码实现2.2 注册页面中进行密码加盐2.