本文包括:
- EM算法简介
- EM算法的直观解释
- EM算法的导出
- EM算法的步骤
- 其它有关数据分析,机器学习的文章及社群
1.EM算法简介:
EM算法考虑的一个情况是,如果我们在收集数据时,因为某种原因,并没有将数据完全收集起来,而是漏掉了某个变量。
一个在说明EM 算法时的经典场景是,我们在收集男生和女生的身高的时候,我们确实记录了抽取出来的样本的身高,却没有记录样本的性别,并且我们又希望模型中考虑到性别的差异,因为男生和女生的身高的分布是不同的。
在上述例子中,我们称没有被观测到的性别为隐变量或潜在变量。那些被我们观测到的变量,则称之为观测变量。
如果数据集中含有隐变量的话,我们就无法简单地直接使用极大似然估计法或贝叶斯估计法来估计模型的参数,这时候,我们就需要使用EM算法了。
EM算法即expectation maximization algorithm,其中expectation是期望,maximization是极大化,EM算法的大致步骤也是如此,即首先求期望,接着求极大,所以EM算法也被称为期望极大算法。
现在给出EM算法中的一些数学符号使用规则。我们使用Y表示观测随机变量的数据,Z表示隐随机变量的数据。单独的观测数据Y称为不完全数据,Y和Z的组合称为完全数据。
2.EM算法的直观解释:
首先我们来看使用极大似然估计的方法求最优模型的所需条件,上一节提到,要使用极大似然估计法,我们所收集到的数据必须都是观测数据,不能含有隐变量。
就以男女身高的例子来说,我们知道抽取的每个人的性别,并且得到了他们每个人的身高,那么此时我们可以认为男生的身高和女生的身高符合两个不同的正态分布,于是我们能够通过极大似然函数的方法得到两个正态分布的参数,于是就得到了男生和女生身高的正态分布了。
但是如果没有性别的变量(性别成为隐变量),我们就没有办法将某个样本归于两个分布中的某一个分布,于是就无法通过极大似然估计的方法获得两个分布的参数。
于是EM算法提出,我们可以先人为地估计一个参数,用人为估计的参数得到男生和女生的身高的两个分布,再根据这两个分布去对每个样本根据身高进行性别的划分,因为知道了两个分布后,根据一个样本的身高,我们可以知道这个样本属于男生的可能性大还是属于女生的可能性大,这样我们就能得到既有性别又有身高的训练集记录了,但此时性别变量不是真实情况,是通过我们估计的分布得到的,我们也可以称之为估计的性别。
但是这样估计的结果肯定是有很大误差的,因为毕竟一开始两个身高分布的参数是随意指定的,为了减少这个误差,EM算法提出使用迭代的方法,通过刚才我们估计的性别,再重新通过极大似然函数的方法得到新的两个分布的估计参数,也就得到了两个新的分布,然后通过新的分布我们可以再一次更新性别,接着继续更新分布,如此迭代。
在数学上可以证明这种迭代的方法最后将收敛,也就是分布的参数和性别都将不再变化,此时也就完成了EM算法,得到最终的分布和隐变量的值。
在《统计学习方法》中也举了一个扔硬币的例子,并且写出了完整的公式,可以结合阅读以更好地理解EM算法的思路。
3.EM算法的导出:
我们面对一个含有隐变量的概率模型,目标是极大化观测数据(不完全数据)Y关于参数θ的对数似然函数,即极大化:
因为隐变量的存在,我们需要将隐变量也考虑进极大化对数似然函数的过程之中,所以:
EM算法是通过迭代逐步近似极大化L的,因此我们可以假设在第i次迭代后θ的估计值是θ(i),希望在θ(i)的情况下,新的估计值θ能让L更大,这样,在每次迭代后对数似然函数都能增加,于是在有限次迭代后即可得到最大化的极大似然函数。
根据这一规律,我们可以认为L(θ)>L(θ(i)),即L(θ)- L(θ(i))>0,现在考虑不等式左边:
利用Jensen不等式,我们可以得到两者相减的下界,思路是只要下界增大,那么两者的差也会增大。
现在我们将L(θ(i))移到右边,并使整个右边为B(θ,θ(i)),得到:
于是:
现在B代表L的下界,只要下界增大,L也会增大,那么我们使B极大,得到的θ即为这一轮迭代的最优θ。
于是问题转换为极大化B,可以得到θ(i+1)的表达式:
其中第二个等式成立,因为
在EM算法中,E即是确定Q的过程,而M就是最大化Q的过程。
4.EM算法的步骤:
首先,我们需要确定参数的初值θ(0),不同的参数初值可能导致不同的模型,EM算法对初值的选择是敏感的,初值的选择可以参照前人的经验进行选择。
第二,进行EM中的E步,即确定Q:
第三,进行EM中的M步,即最大化Q,得到迭代的参数估计值:
使用新的参数估计值确定新的Q,并迭代第二和第三步,直到收敛。我们可以给出停止迭代的条件,一般是给出较小的正数
或
github:
如果觉得对您有帮助,还烦请点击下面的链接,帮忙github点个star~谢谢~
Zhouxiaonnan/machine-learning-notesandcode
欢迎关注专栏:
学习笔记:数据分析,机器学习,深度学习zhuanlan.zhihu.com机器学习模型Python复现:
舟晓南:感知机模型python复现 - 随机梯度下降法;梯度下降法;adagrad;对偶形式
舟晓南:k近邻(KNN)模型python复现 - 线性扫描;带权值的近邻点优化方法
舟晓南:朴素贝叶斯(Bayes)模型python复现 - 贝叶斯估计;下溢出问题
舟晓南:决策树(Decision Tree)模型python复现 - ID3;C4.5;CART;剪枝
舟晓南:逻辑斯蒂回归(LR)模型python复现 - 随机梯度下降法;SGDM;RMSProp;Adam
舟晓南:支持向量机(SVM)模型python复现 - SMO算法;核技巧;高斯核函数
舟晓南:提升树(BoostingTree)模型python复现 - Adaboost
机器学习模型理论部分:
舟晓南:统计学习方法 - 感知机模型解读 | 数据分析,机器学习,学习历程全记录
舟晓南:统计学习方法 - 感知机模型的收敛性解读 | 数据分析,机器学习,学习历程全记录
舟晓南:统计学习方法 - k近邻模型解读 | 数据分析,机器学习,学习历程全记录
舟晓南:统计学习方法 - 朴素贝叶斯模型解读 | 数据分析,机器学习,学习历程全记录
舟晓南:统计学习方法 - 朴素贝叶斯之后验概率最大化的含义 | 数据分析,机器学习,学习历程全记录
舟晓南:统计学习方法 - 决策树,CART决策树解析 | 数据分析,机器学习,学习历程全记录
舟晓南:统计学习方法 - 逻辑斯蒂回归解析 | 数据分析,机器学习,学习历程全记录
舟晓南:统计学习方法 - 最大熵模型解析 | 数据分析,机器学习,学习历程全记录
舟晓南:统计学习方法 - 改进的迭代尺度法IIS解析 | 数据分析,机器学习,学习历程全记录
舟晓南:统计学习方法 - 线性可分支持向量机解析 | 数据分析,机器学习,学习历程全记录
舟晓南:统计学习方法 - 线性支持向量机解析 | 数据分析,机器学习,学习历程全记录
舟晓南:统计学习方法 - 非线性支持向量机解析 | 数据分析,机器学习,学习历程全记录
舟晓南:统计学习方法 - 序列最小最优化算法(SMO)解析 | 数据分析,机器学习,学习历程全记录
舟晓南:统计学习方法 - 提升算法Adaboost解析 | 数据分析,机器学习,学习历程全记录
舟晓南:统计学习方法 - 提升树算法解析 | 数据分析,机器学习,学习历程全记录
舟晓南:统计学习方法 - EM算法解析 | 数据分析,机器学习,学习历程全记录
MySQL:
舟晓南:转行数据分析师如何开始学习SQL | 工科生三个月转行数据分析学习心得
舟晓南:MySQL的执行逻辑和表的结构 | 数据分析学习历程全记录
舟晓南:MySQL优化查询1:索引及其使用技巧 | 数据分析学习历程全记录
舟晓南:MySQL优化查询2:如何查找低效率语句 | 数据分析学习历程全记录
舟晓南:MySQL优化查询3:explain和show profiles | 数据分析学习历程全记录
舟晓南:MySQL优化查询4:24种查询优化的具体方法 | 数据分析学习历程全记录
转行数据分析相关:
舟晓南:如何转行和学习数据分析 | 工科生三个月成功转行数据分析心得浅谈
舟晓南:求职数据分析师岗位,简历应该如何写?|工科生三个月成功转行数据分析心得浅谈
数据分析,机器学习学习社群正式启动~
需要学习资料,想要加入社群均可私信~
在这里会分享各种数据分析相关资源,技能学习技巧和经验等等~
详情私信,一起进步吧!
写于成都 2020-9-19
第一次修改 2020-10-6