技术标签: 机器学习
EM E M 算法是一种迭代算法,用于含有隐变量的概率模型参数的极大似然估计,或极大后验概率估计。
EM E M 算法的每次迭代由两步组成:
首先介绍一个使用 EM E M 算法的例子:三硬币模型
假设有3枚硬币,分别记作 A,B,C A , B , C ,这些硬币正面出现的概率分别是 π,p,q π , p , q ,进行如下试验:
先掷硬币 A A 根据其结果选出硬币 或者硬币 C C ,正面选硬币 ,反面选硬币 C C ;然后掷出选出的硬币,出现正面记为1,反面记为0;独立地重复 次试验(这里 n n 取10),观测结果如下:
1101001101
假设只能观测到掷硬币的结果,不能观测掷硬币的过程,问如何估计三个硬币正面出现的概率,即三硬币模型的参数。
三硬币模型可写为:
下面将观测数据表示为 X=(x1,x2,...,xn)T X = ( x 1 , x 2 , . . . , x n ) T ,未观测数据表示为 Z=(z1,z2,...,zn)T Z = ( z 1 , z 2 , . . . , z n ) T ,则观测数据的似然函数为:
这个问题没有解析,只有通过迭代的方法来求解。 EM E M 算法就是可以用于求解这个问题的一种迭代算法。
EM E M 算法通过迭代求 L(θ)=log p(X|θ) L ( θ ) = l o g p ( X | θ ) 的极大似然估计。每次迭代包含两步:
E步:求期望;M步:求极大化。
输入: 观测变量数据 X X ,隐变量数据 ,联合分布 p(X,Z|θ) p ( X , Z | θ ) ,条件分布 p(Z|X,θ) p ( Z | X , θ ) ;
输出:模型参数 θ θ
(1)选择参数的初值 θ(0) θ ( 0 ) ,开始迭代;
(2)E步:记 θ(i) θ ( i ) 为第 i i 次迭代参数
的估计值,在第 i+1 i + 1 次迭代的E步,计算:
这里, p(Z|X,θ(i)) p ( Z | X , θ ( i ) ) 表示在给定观测数据 X X 和当前的参数估计
下隐变量数据 Z Z 的条件概率分布;
(3)M步:求使
极大化的 θ θ ,确定第 i+1 i + 1 次迭代的参数估计值 θ(i+1) θ ( i + 1 )
注:
函数 Q(θ,θ(i)) Q ( θ , θ ( i ) ) 是 EM E M 算法的核心,称为Q函数。
参数的初值可以任意选择,但 EM E M 算法对初值是敏感的
Q(θ,θ(i)) Q ( θ , θ ( i ) ) 中 θ θ 表示要极大化的参数, θ(i) θ ( i ) 表示当前估计值,每次迭代实际在求Q函数及其极大化
M步求Q函数的极大化,得到 θ(i+1) θ ( i + 1 ) ,完成一次迭代
第(4)步给出停止迭代的条件,一般是对较小的正数 E1,E2 E 1 , E 2 ,若满足:
||θ(i+1)−θ(i)||⩽E1,或||Q(θ(i+1),θ(i))−Q(θ(i),θ(i))||⩽E2 | | θ ( i + 1 ) − θ ( i ) | | ⩽ E 1 , 或 | | Q ( θ ( i + 1 ) , θ ( i ) ) − Q ( θ ( i ) , θ ( i ) ) | | ⩽ E 2
则停止迭代。
上面我们给出了 EM E M 算法,那么为什么 EM E M 算法能近似实现对观测数据的极大似然估计呢?下面通过近似求解观测数据的对数似然函数的极大化问题来导出 EM E M 算法。
由上面内容可以知道,极大化观测数据 X X 关于参数
的对数似然函数,即极大化:
注意到:上式中有未观测数据并包含和的对数
事实上, EM E M 算法通过迭代逐步近似极大化 L(θ) L ( θ ) 的。
假设在第 i i 次迭代后
的估计值是 θ(i) θ ( i ) ,我们希望新估计值 θ θ 能使 L(θ) L ( θ ) 增加,即 L(θ)>L(θ(i)) L ( θ ) > L ( θ ( i ) ) ,并逐步达到极大值,为此考虑两者的差:
利用 Jensen J e n s e n 不等式,得到其下界:
log∑jλjyi⩾∑jλjlog yj l o g ∑ j λ j y i ⩾ ∑ j λ j l o g y j
其中 λj⩾0,∑jλj=1 λ j ⩾ 0 , ∑ j λ j = 1
令:
现在求 θ(i+1) θ ( i + 1 ) 的表达式,省去对 θ θ 的极大化而言的常数的项,有:
EM E M 算法是通过不断求解下界的极大化逼近求解对数似然函数极大化的算法。
上图给出 EM E M 算法的直观解释。图中上方曲线为 L(θ) L ( θ ) ,下方曲线为 B(θ,θ(i)) B ( θ , θ ( i ) ) ,图中两个函数在点 θ=θ(i) θ = θ ( i ) 处相等,但此时 L(θ) L ( θ ) 并没用达到极大值,这时使 B(θ,θ(i)) B ( θ , θ ( i ) ) 极大化,由于 L(θ)⩾B(θ,θ(i)) L ( θ ) ⩾ B ( θ , θ ( i ) ) ,所以 L(θ) L ( θ ) 在每次迭代中也是增加的。
在这个过程中, L(θ) L ( θ ) 不断增大,从图中可以看出 EM E M 算法不能保证找到全局最优解。
使用迭代必须保证 p(X|θ(i)) p ( X | θ ( i ) ) 单调递增:
求期望,连续变量即求积分,离散变量即求和,上面我们用的都是求和,这个使用求积分,是为了让大家理解上面求和符号怎么来的。
上式左端:
那么对数似然函数(等式)可写为:
因为求得是极大似然函数估计,那么 Q(θ(i+1),θ(i))⩾Q(θ,θ(i)) Q ( θ ( i + 1 ) , θ ( i ) ) ⩾ Q ( θ , θ ( i ) ) ;
假如对于所有的 θ θ 都有 H(θ(i),θ(i))⩾H(θ,θ(i)) H ( θ ( i ) , θ ( i ) ) ⩾ H ( θ , θ ( i ) )
=> 那么 H(θ(i),θ(i))⩾H(θ(i+1),θ(i)) H ( θ ( i ) , θ ( i ) ) ⩾ H ( θ ( i + 1 ) , θ ( i ) )
这样一来,对数似然函数就会逐渐增大。
那么我们又该如何证明对于所有的 θ θ 都有 H(θ(g),θ(g))⩾H(θ,θ(g)) H ( θ ( g ) , θ ( g ) ) ⩾ H ( θ , θ ( g ) )
证明:
EM E M 算法对初值比较敏感,初值的选择非常重要,通常选取几个不同的初值进行迭代,然后对得到的各个估计值加以比较,从中选择最好的。
一般条件下 EM E M 算法是收敛的,但不能保证收敛到全局最优
参考资料:
李航《统计学习方法》
file下有invalidate caches/restart选项,点击即可_idea unused import statement
一,下载centos8.1:1,官方网站:https://www.centos.org/下载页面:http://isoredirect.centos.org/centos/8/isos/x86_64/CentOS-8.1.1911-x86_64-dvd1.iso2,建议下载时选择阿里云的镜像iso文件:http://mirrors.aliyun.com/centos/8.1.1911/isos/x86_64/CentOS-8.1.1911-x86_64-dvd1.is..._centos8 安装
简介: 在学习 docker 的过程中,创建容器时没有挂载文件到宿主机目录中,这个时候宿主机和运行容器之间无法进行文件数据共享。那么有没有一种方式将容器中的文件保存到宿主机,将宿主机中的文件或目录保存到容器中呢。 一、从容器复制到宿主机 假设我们现有一叫 redis 的容器,想要把容器中的配置文件复制到宿主机一份docker cp redis:/data/appendonly.aof /home/docker/redis/conf 二、从宿主机复制到容器 假设我们此时需要将宿主机的 ._使用复制命令(docker cp),实现容器与宿主机之间的文件访问。
本文开始学习通过Android平台调用一些设备的硬件。首先是对摄像头进行操作。_android12 camera app
/** * 进行页面跳转的工具 * * @author chen.lin * */public class IntentUtil { private static final String IMAGE_TYPE = "image/*"; private static final String TAG = "IntentUtil"; /** * 进行页面_在线intent转义工具
https://vjudge.net/problem/LibreOJ-109#include<iostream>#include<algorithm>using namespace std;const int N=4e6+10;int n,m,mod=998244353;int p[N],q[N];void read(int &x){ x=0; bool f=false; char c=getchar(); while(!isdigit(c)) { _libreoj--109
Java网络编程套接字_java套接字网络编程
一个button在网页里,实现不可点击比较传统的方法是disabled=true,假设这个网页的按钮有id,那最简单的方法就是直接重置它的disabled属性。使用ie8拿百度的首页来做例子_页面上不可点击的 开关,通过修改页面元素使其 可以点击
python脚本对word进行操作一、在word文档中针对整个文档进行操作1.document = Document() #初始化文档2.document.styles[‘Normal’].font.name = u’宋体’ # 设置整个文档字体3.document.styles[‘Normal’]._element.rPr.rFonts.set(qn(‘w:eastAsia’), u’宋体’) # 设置基础中文字体(与第2条配合使用)4.document.styles[‘._word怎么写脚本
ElasticSearch HighLevel REST Client API网址为https://www.elastic.co/guide/en/elasticsearch/client/java-rest/6.4/index.html,要是特别注意版本号。ElasticSearch6.4.2 的doc文档见于 https://static.javadoc.io/org.elasticsea...
pthread_join函数用于回收子线程,并且可以获取到子线程的退出状态; 1 #include <stdio.h> 2 #include <string.h> 3 #include <unistd.h> 4 #include <pthread.h> 5 6 &..._pthread_join
PythonPython开发Python语言Python小白 1.IDLE软件为内建于CPython的集成开发环境(IDE),包括编辑器,编译或解释器,调试器 .py(后缀保存)2.行一,单行注释 多行,”””‘’’ 之后,内建函数()3.变量,常数 第一个,英文字母,下划线,中文。区分大小写。数值total,product 布尔Tr..._天天向上续py