机器学习---EM算法

news2024/12/29 9:44:32

1. 极大似然估计与EM算法

        极大似然估计是一种常用的参数估计方法,它是以观测值出现的概率最大作为准则。关于极

大似然估计,假设现在已经取到样本值了,这表明取到这一样本的概率L(θ) 比较

大。我们自然不会考虑那些不能使样本出现的θ作为估计值,再者,如果已知当

θ=θ(0)是使L(θ)取很大值,而θ中的其他θ的值使 L(θ)取值很小,自然认为取θ(0)作为未知参数

θ 的估计值较为合理。        

         在极大似然估计中,独立同分布(IID)的数据,  其概率密度函数为

似然函数定义为对数似然函数定义为θ的

极大似然估计为

        极大似然估计存在着问题是:①对于许多具体问题不能构造似然函数解析表达式 ②似然函数

的表达式过于复杂而导致求解方程组非常困难。正是在这种情况下,才提出了EM算法。EM算法主

要用于非完全数据参数估计,它是通过假设隐变量的存在,极大化地简化了似然函数方程,从而解

决了方程求解问题

       计算极大似然估计(maximum likelihood  estimate,MLE),需要求似然函数的极值。如求正态

分布均值和方差的MLE:

观测数据:观测到的随机变量Y的IID样本

缺失数据:未观测到的随机变量Z的值

完整数据:包含观测到的随机变量Y和未观测到的随机变量Z的数据,

        EM算法是一种迭代算法,1977年由Dempster等人总结提出,用于含有隐变量的概率模型参

数的极大似然估计,或极大后验概率估计。EM算法的每次迭代由两步组成:E步,求期望

(Expectation);M步,求极大(Maximization)。所以这一算法称为期望极大算法。

2. 3硬币模型

       假设有3枚硬币,分别记作A、B、C。这些硬币正面出现的概率概率分别是a、b、c。进行如

下掷硬币试验:先掷A,根据其结果选出硬币B或C,正面选择硬币B,反面选硬币C;然后掷选出

的硬币,掷硬币的结果,出现正面记作1,出现反面记作0;独立地重复n次试验(这里n=10),观测结

果如下:1、1、0、1、0、0、1、0、1、1

假设只能观测到掷硬币的结果,不能观测到掷硬币的过程。问如何估计三硬币正面出现的概率,即

三硬币模型的参数。三硬币模型可以写作:

这里,随机变量y是观测变量,表示一次试验观测的结果是1或0;随机变量z是隐变量,表示未观测

到的掷硬币A的结果,θ=(a,b,c)是模型参数。注意,随机变量y的数据可以观测,随机变量z的数据

不可观测。

将观测数据表示为,未观测数据表示

则观测数据的似然函数为:

即:

考虑求模型参数θ=(a,b,c)的极大似然估计,即:

这个问题没有解析解,只能通过迭代的方法求解。EM算法就是可以用于求解这个问题的一种迭代

算法,下面给出针对以上问题的EM算法:

EM算法首先选取参数的初值,记作:

然后通过下面的步骤迭代计算参数的估计值,直至收敛为止。第i次迭代参数的估计值为:

EM算法的第i+1次迭代如下:

①E步:计算在模型参数下观测数据来自掷硬币B的概率:

计算似然函数的期望:

M步:求似然函数的极大值

计算模型参数的新估计值:

 

进行数字计算:假设模型参数的初始值取为:由E步第一个公式,

对y=0与y=1均有利用迭代公式(新估计值),得到

由E步第一个公式有,j=1,2,3...10,继续迭代得

于是参数模型的极大似然估计:

3. EM算法步骤

        EM算法的实现思路:首先根据已经给出的观测数据,估计出模型参数的值; 然后再依据上⼀

步估计出的参数值估计缺失数据的值,再根据估计出的缺失数据加上之前已经观测到的数据重新再

对参数值进行估计;然后反复迭代,直至最后收敛,迭代结束。

EM算法计算流程:

EM算法步骤:

选择模型参数的初值,开始迭代; 

E步:记为第i次迭代参数θ的估计值,在第i+1次迭代的E步,定义Q函数并计算:

这里,Q函数定义为完全数据的对数似然函数在给定观测数据Y和当前的参

下对未观测数据Z的条件概率分布的期望;通过求期望,去掉了完整似然函数中的

变量Z。其实就是用这个缺失数据的期望值来代替缺失的数据,而这个缺失的数据期望值和它的概

率分布有关。那么我们可以通过对似然函数关于缺失数据期望的最大化,来逼近原函数的极大值。

EM算法本质就是含有隐变量的概率模型参数的极大似然估计法。即EM的E步。

M步:求使极大化的θ,确定第i+1次迭代的参数的估计值

重复E、M两步,直到收敛。每次参数更新会增加非完整似然值,反复迭代后,会收敛到似然的局

部最大值。

4. EM算法原理

EM算法是一种解决存在隐含变量优化问题的有效方法。它的具体思想是:既然不能直接最大化参

数似然函数L,我们可以不断地建立参数似然函数L的下界(E步),然后优化下界(M步)。

利用琴生不等式得到似然函数的下界:

对于每一个样例i,让Qi表示该样例隐含变量z的某种分布,Qi满足条件:

这个过程可以看作是对L(θ)求了下界。对于的选择有很多种,哪种更好呢?假设θ已经给

定,那么L(θ)的值就决定于。我们可以通过调整这两个概率使下界不断上

升,以逼近L(θ)的真实值,那么什么时候算是调整好了呢?当不等式变成等式时,说明调整后的

概率能够等价L(θ)。根据琴生不等式,等式成立的条件是随机变量取值为常数值,故可得到:

c为常数,不依赖于

由于,那么就有(多个等式分子分母相加不变,这个认为每

个样例的两个概率比值都是c),那么有:

带入前面得到的似然函数下界,可以发现L(θ)的下界函数就是前面定义的

函数。 这一步是E步,建立了L(θ)的下界。

接下来是M步,就是在给定后,调整θ,去极大化L(θ)的下界,那么怎么确保EM收敛

呢?又如何确保每次迭代都能使极大似然估计单调增加呢?下述两个定理表明了利用EM算法所得

到的估计序列具有良好的收敛性,且其收敛到p(θ丨Y)的最大值。

定理1:设P(Y丨θ)为观测数据的似然函数,(i=1,2...)为EM算法得到的参数估计序列,

(i=1,2...)为对应的似然函数序列,则是单调递增的,即

保证了EM算法的每次迭代都使似然函数增大或达到局部极值。

定理2:设为观测数据的对数似然函数(i=1,2...)为EM算法得到的参数估计序列,(i=1,2...)为对应的对数似然序列。

(1)如果P(Y丨θ)有上界,则收敛到某一值

(2)在函数满足一定条件下,由EM算法得到的参数估计序列的收

敛值的稳定点。

保证了EM算法所得到的估计序列具有良好的收敛性,且其收敛到p(θ丨Y)的最大值。

5. EM算法补充

EM算法的另一种理解:坐标上升法

下图的直线式迭代优化的路径,可以看到每一步都会向最优值前进一步,而且前进路线是平行于坐

标轴的,因为每一步只优化一个变量。就像在x-y坐标系中找一个曲线的极值,然而曲线函数不能

直接求导,因此什么梯度下降方法就不适用了。但固定一个变量后,另外一个可以通过求导得到,

因此可以使用坐标上升法,一次固定一个变量,对另外的求极值,最后逐步逼近极值。对应到EM

上,E步:固定θ,优化Q;M步:固定Q,优化θ;交替将极值推向最大。

EM算法的几点说明: 

①参数的初值可以任意选择,但需要注意EM算法对初值是敏感的

②E步求Q函数。Q函数式中Z是未观测数据,Y是观测数据。注意,的第一个变元表

示要极大化的参数,第二个变元表示参数的当前估计值。每次迭代实际在求Q函数及其极大。

③M步求的极大化,得到,完成一次迭代。每次迭代都使似

然函数增大或达到局部极值。

④给出停止迭代的条件,一般是对较小的正数,若满足以下条件,则停止迭代。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1275390.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Unity中Shader指令优化(编译后指令解析)

文章目录 前言一、我们先创建一个简单的Shader二、编译这个Shader,并且打开1、编译后注意事项2、编译平台 和 编译指令数3、顶点着色器用到的信息4、顶点着色器计算的核心部分5、片元着色器用到的信息6、片元着色器核心部分 前言 我们先读懂Shader编译后代码&#…

Pytorch——多卡GPU训练与单卡GPU训练相互切换

部分深度学习网络默认是多卡并行训练的,由于某些原因,有时需要指定在某单卡上训练,最近遇到一个,这里总结如下。 目录 一、多卡训练1.1 修改配置文件1.2 修改主训练文件1.3 显卡使用情况 二、单卡训练2.1 修改配置文件2.2 显卡使…

Linux 磁盘分区处理

最近实施过程中遇到客户提供给我们的服务器操作系统和Docke容器环境都已经安装完成,但磁盘的分区没有进行整理好。磁盘总共270G,系统安装分配了60G,剩余未创建分配需要处理。由于分区情况每家不一样,但大致流程都是相同的&#xf…

100.有序数组的平方(力扣)

代码解决一 class Solution { public:// 函数接受一个整数数组&#xff0c;返回每个元素平方值排序后的结果vector<int> sortedSquares(vector<int>& nums) {int len nums.size(); // 获取数组的长度vector<int> v; // 创建一个新的数组&#xff0c;用…

Redis基础系列-安装Redis

Redis基础系列-安装Redis 文章目录 Redis基础系列-安装Redis1. 环境要求2. 下载redis3. 安装4. 配置5 参考与感谢 1. 环境要求 &#xff08;安装C语言编译环境&#xff09;redis是用C语言开发的&#xff0c;所以需要安装C语言编译环境,中途可能会出现询问你是否需要可以安装&a…

SpringBoot——Quartz 定时任务

优质博文&#xff1a;IT-BLOG-CN 一、Scheduled 定时任务 【1】添加Scheduled相关依赖&#xff0c;它是Spring自带的一个jar包因此引入Spring的依赖&#xff1a; <dependency><groupId>org.springframework</groupId><artifactId>spring-context-su…

Maven无法拉取依赖/构建失败操作步骤(基本都能解决)

首先检查配置文件&#xff0c;确认配置文件没有问题(也可以直接用同事的配置文件(记得修改文件里的本地仓库地址)) 1.file->Invalidate Caches清除缓存重启(简单粗暴&#xff0c;但最有效) 2.刷新maven以及mvn clean&#xff0c;多刷几次&#xff0c;看看还有没有报红的依赖…

FastDFS文件系统本地部署结合Nginx与内网穿透实现远程访问本地服务器

文章目录 前言1. 本地搭建FastDFS文件系统1.1 环境安装1.2 安装libfastcommon1.3 安装FastDFS1.4 配置Tracker1.5 配置Storage1.6 测试上传下载1.7 与Nginx整合1.8 安装Nginx1.9 配置Nginx 2. 局域网测试访问FastDFS3. 安装cpolar内网穿透4. 配置公网访问地址5. 固定公网地址5.…

Python按要求从多个txt文本中提取指定数据

基本想法 遍历文件夹并从中找到文件名称符合我们需求的多个.txt格式文本文件&#xff0c;并从每一个文本文件中&#xff0c;找到我们需要的指定数据&#xff0c;最后得到所有文本文件中我们需要的数据的集合 举例 如现有名为file一个文件夹&#xff0c;里面含有大量的.txt格…

Git修改远程仓库名称

1、先直接在远程点仓库名&#xff0c;然后左侧菜单栏找settings-general&#xff0c;然后直接修改工程名&#xff0c;保存即可。 2、还是在settings-general下&#xff0c;下拉找到Advanced点击Expand展开&#xff0c;然后下拉到最底部 在Change path里填入新的项目名称&#x…

C语言错误处理之 “strerror和perror函数以及断言处理方式”

目录 前言 perror函数 strerror函数 断言处理方式 前言 在错误处理一中&#xff0c;我们解释了C语言三种处理方式中的错误号处理方式&#xff0c;这一篇我们在基于上一篇的基础上加入了strerror函数与perror函数&#xff0c;以及断言处理方式的内容...... perror函数 包…

四大视角看EMC设计:滤波、接地、屏蔽、PCB布局

电磁干扰的主要方式是传导干扰、辐射干扰、共阻抗耦合和感应耦合。对这几种途径产生的干扰我们应采用的相应对策&#xff1a;传导采取滤波&#xff0c;辐射干扰采用屏蔽和接地等措施&#xff0c;就能够大大提高产品的抵抗电磁干扰的能力&#xff0c;也可以有效的降低对外界的电…

DAPP开发【02】Remix使用

系列文章目录 系列文章在DAPP开发专栏 文章目录 系列文章目录使用部署测试网上本地项目连接remix本地项目连接remix 使用 创建一个新的工作空间 部署测试网上 利用metaMask连接测试网络 添加成功&#xff0c;添加时需要签名 即可进行编译 即可部署 本地项目连接remix 方…

C# 动态编译代码并执行

写在前面 本文采用动态编译的方式&#xff0c;对目标文件code.txt中的C#代码进行实时编译并调用&#xff1b;当然也可以直接在代码中直接装配或读取已有的代码文本&#xff0c;动态编译可以用于很多需要热更新的场景&#xff0c;实现无需重启程序也能达到更新代码的需求。 代…

【web安全】ssrf漏洞的原理与使用

前言 菜某对ssrf漏洞的总结。 ssrf的作用 主要作用&#xff1a;访问外界无法访问的内网进行信息收集。 1.进行端口扫描&#xff0c;资源访问 2.指纹信息识别&#xff0c;访问相应的默认文件 3.利用漏洞或者和payload进一步运行其他程序 4.get类型漏洞利用&#xff0c;传参数…

FO-like Transformation in QROM Oracle Cloning

参考文献&#xff1a; [RS91] Rackoff C, Simon D R. Non-interactive zero-knowledge proof of knowledge and chosen ciphertext attack[C]//Annual international cryptology conference. Berlin, Heidelberg: Springer Berlin Heidelberg, 1991: 433-444.[BR93] Bellare M…

vue2+el-select实现分页加载更多功能

需求&#xff1a; 由于项目下拉框数据过多&#xff0c;一次性加载完&#xff0c;会有性能问题&#xff0c;于是希望可以增加分页加载更多功能。 实现效果&#xff1a; 如上图&#xff1a;点击“点击加载更多”按钮&#xff0c;实现分页加载下一页&#xff0c;直到最后一页&am…

CentOS 7 虚拟机java项目部署tomcat

# 在 MySQL 中创建一个名为 db_vlgl 的数据库 create database db_vlgl;# 将名为 db_vlgl.sql 的 SQL 脚本导入到 db_vlgl 数据库中 mysql -uroot -p db_vlgl < db_vlgl.sql 首先安装java环境 下载安装包:jdk-19_linux-x64_bin.tar.gz_免费高速下载|百度网盘-分享无限制 …

Jinja2使用Layui报 “d is not defined“

问题出现场景在使用Jinja2渲染Layui的表格时候&#xff0c;要做自定义templte的传入 Jinja2这块本来就是支持 {{ }} 插值的模板语言&#xff0c;所以这块的第一种渲染方式会冲突 所以只能用函数返回代码块进行填充&#xff0c;不能使用插值&#xff0c;只能拼接字符串 templt…

《opencv实用探索·六》简单理解图像膨胀

1、图像膨胀原理简单理解 膨胀是形态学最基本的操作&#xff0c;都是针对白色部分&#xff08;高亮部分&#xff09;而言的。膨胀就是使图像中高亮部分扩张&#xff0c;效果图拥有比原图更大的高亮区域。 2、图像膨胀的作用 注意一般情况下图像膨胀和腐蚀是联合使用的。 &…