我们不仅要看专业书,还要多看看别人的经验,专业书虽然专业,但是很多时候对于入门的小白很不友好,我们也是学得一头雾水,好像是学会了,但又好像什么都没明白,仅仅记住它的公式,做了一两道例题,还是需要参考别人的经验理解的更快。
很感谢那些有想法的,也愿意用自己的语言帮助入门的小白更快理解的大神们,因为看到了很多半吊子学习的人,所以更加觉得大神的难得。
本文转自:https://zhuanlan.zhihu.com/p/36331115
本文我们将解决这些疑惑:EM算法到底是个什么玩意?它能做什么?它的应用场景是什么?
本文思路:
- 一、 先讲解极大似然估计,然后过渡到 EM 算法,讲解EM算法到底是个啥以及它的核心。
- 二、 讲解EM算法的推导公式,
极大似然和EM算法,与其说是一种算法,不如说是一个种解决问题的思想,解决一类问题的框架, 和线性回归,逻辑回归, 决策树等一些具体的算法不同, 极大似然和EM算法更加抽象,是很多具体算法的基础。
从极大似然到EM
极大似然
- 1、 问题描述
假设我们需要调查我们学校学生的身高分布。
我们先假设学校所有学生的身高服从正态分布 。(注意:极大似然估计的前提一定是要假设数据总体的分布,如果不知道数据分布,是无法使用极大似然估计的),这个分布的 均值 和方差 未知,如果我们估计出这两个参数,那我们就得到了最终的结果。那么怎样估计这两个参数呢?
学校的学生这么多,我们不可能挨个统计吧?这时候我们需要用到概率统计的思想,也就是抽样,根据样本估算总体。假设我们随机抽到了 200 个人(也就是 200 个身高的样本数据,为了方便表示,下面“人”的意思就是对应的身高)。然后统计抽样这 200 个人的身高。根据这 200 个人的身高估计均值 和 方差 。
那么问题来了怎样估算参数 θ 呢?
- 2、 估算参数
我们先回答几个小问题:
问题一:抽到这 200 个人的概率是多少呢?
这里就引入了 似然函数 的概念, 这里的因变量是 在不同的参数 θ 取值下, 取得当前这个样本集的可能性,它与常见的函数还是有区别的。 为了方便计算(很常见的转化很多时候都是这个原因)。 将它转化为 对数似然函数。
取对数的另一个优点:
概率累积会出现数值非常小的情况,(很典型的情况)由于计算机的精度是有限的, 无法识别这一数据,取对数之后,更易于计算机的识别(数值变大之类)。
问题二:学校那么多学生,为什么就恰好抽到了这 200 个人 ( 身高) 呢?
我们抽到了这 200 个学生,就默认他们的身高出现的概率极大(是这个意思吗?)
问题三:那么怎么求极大似然函数?
- 3、 极大似然估计总结
极大似然估计你可以把它看作是一个反推。多数情况下我们是根据已知条件来推算结果,而极大似然估计是已经知道了结果,然后寻求使该结果出现的可能性极大的条件,以此作为估计值。
比如说,
- 假如一个学校的学生男女比例为 9:1 (条件),那么你可以推出,你在这个学校里更大可能性遇到的是男生 (结果);
- 假如你不知道男女比例,你走在路上,碰到100个人,发现男生就有90个 (结果),这时候你可以推断这个学校的男女比例更有可能为 9:1 (条件),这就是极大似然估计。
极大似然估计,只是一种概率论在统计学的应用,它是参数估计的方法之一。说的是已知某个随机样本满足某种概率分布,但是其中具体的参数不清楚,通过若干次试验,观察其结果,利用结果推出参数的大概值。
极大似然估计是建立在这样的思想上:已知某个参数能使这个样本出现的概率极大,我们当然不会再去选择其他小概率的样本,所以干脆就把这个参数作为估计的真实值。
- 4、 求极大似然函数估计值的一般步骤:
(1)写出似然函数;
(2)对似然函数取对数,并整理;
(3)求导数,令导数为 0,得到似然方程;
(4)解似然方程,得到的参数。
- 5、 极大似然函数的应用
应用一: 回归问题中的极小化平方和(极小化代价函数)
第一种方法:使用最小二乘法。
第二种方法: 使用极大似然法。
应用二:分类问题中极小化交叉熵 (极小化代价函数)
EM算法
“我不知道你是谁,但我可以猜”
- 1 、 问题描述
简单啊,我们可以随便抽 100 个男生和 100 个女生,将男生和女生分开,对他们单独进行极大似然估计。分别求出男生和女生的分布。
假如某些男生和某些女生好上了,纠缠起来了。咱们也不想那么残忍,硬把他们拉扯开。这时候,你从这 200 个人(的身高)里面随便给我指一个人(的身高),我都无法确定这个人(的身高)是男生(的身高)还是女生(的身高)。用数学的语言就是,抽取得到的每个样本都不知道是从哪个分布来的。那怎么办呢?
这是什么情况?即无法确定其对应哪个分布,以及它的分布值。
- 2、 EM算法
这个时候,对于每一个样本或者你抽取到的人,就有两个问题需要估计了,一是这个人是男的还是女的,二是男生和女生对应的身高的正态分布的参数是多少。这两个问题是相互依赖的(解决前者才能进一步解决后者):
但是现在我们既不知道每个学生是男生还是女生,也不知道男生和女生的身高分布。这就成了一个先有鸡还是先有蛋的问题了。鸡说,没有我,谁把你生出来的啊。蛋不服,说,没有我,你从哪蹦出来啊。为了解决这个你依赖我,我依赖你的循环依赖问题,总得有一方要先打破僵局,不管了,我先随便整一个值出来,看你怎么变,然后我再根据你的变化调整我的变化,然后如此迭代着不断互相推导,最终就会收敛到一个解(草原上的狼和羊,相生相克)。这就是EM算法的基本思想了。
EM算法与极大似然估计的区别: 无法通过极大化概率来求得模型参数, 即参数不是常量,而是根据不同的隐变量拥有不同的值,相当于极大似然估计是在求相同分布的样本,而EM算法是在求不同分布的样本的组合,各个子样本的分布尚未确定(我们就是为了求参数来确定样本), 并且不同分布的子样本我们也没有分开。所以EM不仅要求参,还要划分开各个不同分布的样本,是两个步骤。
EM算法基本思想: 产生一个初值,然后根据初值的不断变化调整参数,进行迭代互相推导。 E Expectation 第一步, 负责划分开不同样本, M Maximization 负责估计参数。 我们都只到,一开始呢服了一个初值参数, 即 θ1 , 现在划分了不同样本 {z1, z2} 后再估计参数, 就有了 θ2, θ2 和 θ1 不一样,所以模型划分男女的标准不一样,有一部分人本来是男生,又被划分为女生,有一部分女生,又被划分为男生,所以样本再次被划分, {z1’ ,z2’} , 然后再估计参数, 就有了 θ3, 这样不断迭代,最终会得到一个满意解使得参数不会改变, 而且样本也不会再次划分。或满足条件。
思维拓展: 为什么这样迭代下去, 最终会趋于一个满意解?
EM的具体方法为:
先设置分布参数, 然后进行分类,然后再调整参数,然后再进行分类,如此循环,直到参数不发生变化或满足条件为止。
- 3、 上面的学生属于男生还是女生我们称之为隐含参数,女生和男生的身高分布参数称为模型参数。
EM 算法解决这个的思路是使用启发式的迭代方法,既然我们无法直接求出模型分布参数,那么我们可以先猜想隐含参数(EM 算法的 E 步),接着基于观察数据和猜测的隐含参数一起来极大化对数似然,求解我们的模型参数(EM算法的M步)。由于我们之前的隐含参数是猜测的,所以此时得到的模型参数一般还不是我们想要的结果。我们基于当前得到的模型参数,继续猜测隐含参数(EM算法的 E 步),然后继续极大化对数似然,求解我们的模型参数(EM算法的M步)。以此类推,不断的迭代下去,直到模型分布参数基本无变化,算法收敛,找到合适的模型参数。
一个最直观了解 EM 算法思路的是 K-Means 算法。在 K-Means 聚类时,每个聚类簇的质心是隐含数据。我们会假设 K 个初始化质心,即 EM 算法的 E 步;然后计算得到每个样本最近的质心,并把样本聚类到最近的这个质心,即 EM 算法的 M 步。重复这个 E 步和 M 步,直到质心不再变化为止,这样就完成了 K-Means 聚类。
EM 算法推导
- 1、 基础知识
(1) 凸函数
设是定义在实数域上的函数,如果对于任意的实数,都有:
那么是凸函数。若不是单个实数,而是由实数组成的向量,此时,如果函数的 Hesse 矩阵是半正定的,即
(2)Jensen不等式
如下图,如果函数 f 是凸函数,x 是随机变量,有 0.5 的概率是 a,有 0.5 的概率是 b, x 的期望值就是 a 和 b 的中值了那么:
特别地,如果函数 f 是严格凸函数,当且仅当:p(x = E(x)) = 1 (即随机变量是常量) 时等号成立。
注:若函数 f 是凹函数,Jensen不等式符号相反。
(3) 期望