最大期望算法是一类通过迭代进行极大似然估计的优化方法,通常用于包含因变量或缺失数据的概率模型进行参数估计。EM 算法的标准计算过程由 E 步和 M 步 交替组成,算法的收敛性可以确保迭代至少局部最大值。
EM 算法被广泛应用于处理数据的缺失值,以及很多机器学习算法,包括高斯混合模型、隐马尔科夫模型的参数估计。
- 极大似然估计
- 最大期望算法
1. 极大似然估计
问题:我们想知道学校中,男女生身高的分布。我们不可能得到所有学生的身高数据,只能通过抽样,由抽样数据来反映总体男女生身高的分布。假设:我们现在抽样了 200 名学生的身高数据。
极大似然估计:
- 知道抽样的男生、女生的身高数据
- 知道男、女身高服从正态分布
- 估计参数:正态分布的均值和方差。
计算步骤:
假设:P(x,θ) 表示1个男生身高的概率,100 个男生身高的联合概率是:f = P(x1,θ)*P(x2,θ)*P(x3,θ) … P(xn,θ)
我们求当 θ 是什么值的时候,f 的值最大。这就是极大似然估计的思想。
2. EM 算法
EM 算法
- 知道抽样的 200 名学生的身高数据
- 知道男女身高服从正态分布
- 缺失:每个样本是男生、还是女生数据未知
- 估计参数:男女生正态分布的均值和方差。
一般情况下:
- 只有知道了男女生正态分布的参数,才可能判断出每个样本是男生、还是女生
- 只有知道了样本是男生、还是女生,才能估计出正态分布的参数
EM 算法就是在这种不完整观测变量的条件下进行参数的估计。
计算步骤:
- 初始化:
- 男生的正态分布参数:标准差:σ男、μ男
- 女生的正态分布参数:标准差:σ女、μ女
- 上面的参数都是随机初始化
- 将样本带入到两个密度函数中,计算出样本属于男生的概率、女生的概率,将样本归属于最大的概率
- 计算出所有的样本归属于男生、还是女生
- 重新根据男女生数量、更新均值和标准差
- 再重新计算所有的样本归属于男生、还是女生
- 重新根据男女生数量、更新均值和标准差
- 重复根据新的参数,计算样本归属,然后再根据样本归属更新参数,直到算法收敛。
EM 不能保证收敛全局最优解,保证收敛到局部最优解。
3. EM 算法举例
3.1 EM 思路分析
问题:随机抛掷两枚硬币 1 和 2,正面朝上概率分别为 P1、P2,求解 P1、P2 的值?
思路分析:
- 为了求解到 P1 的概率,我们必须知道硬币 1 抛掷了多少次,并且有多少次正面朝上?
- 为了求解到 P2 的概率,我们必须知道硬币 2 抛掷了多少次,并且有多少次正面朝上?
所以,现在需要进行多次实验,获得观测数据,从观测数据计算 p1、p2 的值。
场景:每次抛掷的硬币过程都非常清楚,比如:每次抛掷的是硬币 1 还是硬币 2,每次抛掷是正面朝上,还是反面朝上,即:我们拿到的是一个完整的观测数据,即:
- (硬币1,硬币2,硬币1,硬币2,硬币1)
- (正正反正反,反反正正反,正反反反反,正反反正正,反正正反反)
- 第一次抛掷的是硬币1,其结果是: 正正反正反,以此类推…
计算: 已知:共进行了 5 次实验,使用硬币 1 进行了 15 次实验,使用硬币 2 进行了 10 次实验,则
- 使用硬币 1 正面朝上 6 次,即:p1 = 6/15
- 使用硬币 2 正面朝上 5 次,即:p2 = 5/10
如果每次实验,我们并不清楚抛掷的是硬币1、还是硬币2,此时,整个实验过程有我们未知的内容,这些内容影响到了我们对结果的计算。所以,该问题可以叫做:包含隐变量的问题。如下图所示:
场景: 每次抛掷使用的硬币是未知的,但是正面朝上,还是反面朝上是已知的,即:拿到的时一个不完整的观测数据,即:
- (?,?,?,?,?)
- (正正反正反,反反正正反,正反反反反,正反反正正,反正正反反)
问题:
- 如果不知道每次抛掷使用的是哪个硬币,无法去计算 p1、p2 值
- 如果不知道 p1、p2 的值,我们也无法确定每次可能抛掷的是哪个硬币
这两个成为一对矛盾的存在,导致我们无法通过前面的方法去估计 p1、p2 的值。此时,可以使用 EM 算法来解决:
计算:
- 我们先假设:p1 = 0.2、p2 = 0.7,当然这个假设并不一定准确
- 计算:
- 假设:使用硬币 1 抛掷的话,当前观测序列出现的最大概率
- 假设:使用硬币 2 抛掷的话,当前观测序列出现的最大概率
- 取最大概率的硬币作为当前观测序列最有可能使用的硬币
- 对每一个观测序列使用步骤 2 的思想,即可得到最有可能的硬币序列:(硬币1,硬币2,硬币1,硬币1,硬币2)
- 知道了硬币的观察序列,更新计算 p1、p2 的值
- 根据新的 p1、p2 值再去判断最优可能的硬币抛掷序列,进而再次去更新 p1、p2 值. 迭代 2-4 步.
补充:
- 每次估计出的 p1、p2 理论上是更加接近于真实值,整个算法也会收敛到最优的值。
- EM 算法简单、能够找到最优值,但由于对初始值敏感,不保证收敛到全局最优点。
3.2 参数初始化
3.3 第一次迭代
计算可能的抛掷序列:
更新 p1、p2 值:
- 硬币 1 一共抛掷了 15 次,其中有 5 次正面朝上,则:p1 = 5/15
- 硬币 2 一共抛掷了 10 次,其中有 6 次正面朝上,则:p2 = 6/10
3.4 第二次迭代
重新计算计算可能抛掷的序列:
更新 p1、p2 值:
- 硬币 1 一共抛掷了 10 次,其中 4 次正面朝上,则:p1 = 4/10=0.4
- 硬币2 一共抛掷了 15 次,其中 7 次正面朝上,则:p2 = 7/15=0.47
此时, 我们发现 p1、p2 越来越接近真实的 0.5 了.
至此,文本文章结束.