Driven to discover
  • 目录
  • 简介
  • 数学基础
    • 数学基础
      • 线性代数
      • 概率统计
        • 概率基础
        • 连续概率
        • 概率分布
        • 大数与中心极限
      • 时间序列
      • 信息理论
      • 参数估计
      • 优化降梯
        • 极大、极小和鞍点
        • 泰勒及Jacobian、Hessian
        • 连续可微
          • 无约束优化
          • 有约束优化
        • 非连续可微
      • 备查附录
  • 数据挖掘
    • 数据挖掘
      • 数据预分析
      • 数据预处理
        • 数据采样
        • 数据降维
        • 特征选择
      • 模式挖掘
        • 频繁项集
        • 多样项集
        • 基于约束的频繁项集
        • 高维及庞大项集
        • 序列模式
        • 图模式
      • 聚类分析
        • 划分聚类
        • 层次聚类
        • 密度/网格聚类
      • 文本挖掘
        • 短语挖掘与主题模型
        • 实体识别与类型标记
  • 机器学习
    • 机器学习
      • 模型评估与选择
      • 线性模型
      • 决策树模型
      • 支持向量机
      • 贝叶斯分类器
      • 集成学习
        • Bagging
        • Boosting
          • AdaBoost
          • GBDT
          • XGBoost
          • LightGBM
        • 结合策略
      • 概率图模型
        • 贝叶斯网络
        • 隐马尔可夫
        • 条件随机场
  • 网络图模型
    • 网络图模型
      • 大规模图处理
        • 社区检测与搜索
        • 中心度分析
        • 网络形成模型
        • 异构信息网络
      • 网络映射
        • 结构维持的网络映射
        • 性质维持的网络映射
        • 动态网络映射
      • Graph Neural Network
  • 深度学习
    • 深度学习
      • 深度前馈网络
        • 非线性的学习
        • 基于梯度的学习
        • 激活函数
        • 架构设计
        • 前向传播
        • 反向传播
      • 深度学习正则化
        • 参数范数惩罚
        • 作为约束的范数惩罚
        • 正则化和欠约束问题
        • 数据集增强
        • 噪声鲁棒性
        • 半监督学习
        • 多任务学习
        • 提前终止
        • 参数绑定和共享
        • 稀疏表示
        • Bagging和其他集成方法
        • Dropout
        • 对抗训练
        • 切面距离、正切传播和流形正切分类器
      • 深度学习优化
        • 学习和纯优化异同
        • 神经网络优化中的挑战
        • 优化算法
        • 参数初始化策略
        • 优化策略和元算法
      • 卷积网络
        • 卷积运算
        • 卷积动机
        • 池化
      • 循环和递归网络
        • 展开计算图
        • 循环神经网络
        • 长短期记忆
        • 注意力机制
      • 生成对抗网络
      • 多任务学习
      • 技术分析
        • Attention
        • Normalization
  • 增强学习
    • 增强学习
      • 增强学习的数学表达形式
      • 求解增强学习问题
        • 已知环境模型的问题
        • 未知环境模型的问题
  • 计算机视觉
    • 计算机视觉
      • 图像分类
        • LeNet-5
        • AlexNet
        • VGGNet
        • GoogLeNet
        • ResNet
        • DenseNet
      • 目标检测
        • 相关研究
          • 选择性搜索
          • OverFeat
        • 基于区域提名的方法
          • R-CNN
          • SPP-net
          • Fast R-CNN
          • Faster R-CNN
          • R-FCN
        • 端到端的方法
          • YOLO
          • SSD
      • 语义分割
        • 全卷积网络
          • FCN
          • DeconvNet
          • SegNet
          • DilatedConvNet
        • CRF/MRF的使用
          • DeepLab
          • CRFasRNN
          • DPN
        • 实例分割
          • Mask R-CNN
      • 图像检索的深度哈希编码
        • 传统哈希编码方法
        • CNNH
        • DSH
      • 光学字符识别
        • CTC解码
          • 前向后向
          • 目标函数
          • 基本原理
      • 人脸识别
      • 三维重建
  • 自然语言处理
    • 自然语言处理
      • 中文分词技术
      • 词性标注
        • 传统词性标注模型
        • 基于神经网络的词性标注模型
        • 基于Bi-LSTM的词性标注模型
      • 命名实体识别
      • 关键词提取
        • 词频与排序
        • 主题模型
      • 句法分析
        • 基于PCFG的句法分析
        • 基于最大间隔马尔可夫网络的句法分析
        • 基于条件随机场的句法分析
        • 基于移进-归约的句法分析
      • 文本向量化
        • Continuous Bag-of-Word
        • Skip-Gram
        • word2vec(Hierarchical Softmax与Negative Sampling)
        • GloVe
        • fastText
        • Bert
      • 情感分析
        • 文档维度情感分析
        • 句子维度情感分析
        • 方面维度情感分析
        • 其他情感分析任务
      • 机器翻译
        • 神经网络机器翻译基本模型
        • 基于Attention的神经网络机器翻译
        • 基于卷积的机器翻译
  • 搜索推荐广告
    • 搜索推荐广告
      • 搜索
        • 召回
        • 排序
          • 传统匹配模型
          • 深度学习匹配模型
            • Representation Learning
              • DNN-based
              • CNN-based
              • RNN-based
            • Matching Function Learning
              • Matching with word-level learning methods
              • Matching with attention model
            • Matching function learning&Representation learning
            • Query-Doc Relevance matching
              • Based on global distribution of matching strengths
              • Based on local context of matched terms
        • 重排
      • 推荐
        • 召回
        • 排序
          • 传统匹配模型
            • 协同过滤
            • 基于特征
          • 深度学习匹配模型
            • Representation learning
              • 协同过滤
              • 基于特征
            • Matching function learning
              • 协同过滤
              • 基于特征
        • 重排
      • 广告
        • 行业知识
        • 核心技术
          • 发展趋势
          • CTR/CVR
            • 浅层模型
            • 深度模型
          • 智能定向
          • 技术难点
        • 相关技术
  • 计算机基础
    • 计算机基础
      • 数据结构
        • 排序算法
      • 操作系统
      • 计算机网络
      • 计算机组成原理
      • python
        • pandas
      • Bash
      • Spark
      • SQL
      • Excel
  • 经验总结
    • 经验总结
      • 广告应用
        • 人群定向
        • 召回通路
      • 时序预测
        • 统计时序
        • 机器学习
        • 深度学习
      • 图谱探索
        • 标签传播
        • 图谱&网络
      • 策略评估
        • 激励策略
        • 均衡策略
Powered by GitBook
On this page
  • 最大似然估计(Maximum likelihood estimation)
  • 最大后验概率估计(Maximum a posteriori)
  • EM算法(Expectation–maximization Algorithm)
  • Code实现
  1. 数学基础
  2. 数学基础

参数估计

Previous信息理论Next优化降梯

Last updated 5 years ago

根据一系列独立样本 X={x1,x2,…,xN}X=\{x_1,x_2, \dots , x_N\}X={x1​,x2​,…,xN​},以及模型 P(X;θ)P(X;\theta)P(X;θ),找到参数 θ\thetaθ

P(X;θ)=P(x1,x2,…,xN;θ)=∏iP(xi;θ)P(X;\theta) = P(x_1,x_2,\dots,x_N;\theta) = \prod \limits_i P(x_i;\theta)P(X;θ)=P(x1​,x2​,…,xN​;θ)=i∏​P(xi​;θ)

→θML=argmaxθ∏iP(xi;θ)\to \theta_{ML} = \mathop{argmax}\limits_\theta \prod\limits_i P(x_i;\theta)→θML​=θargmax​i∏​P(xi​;θ)

例子1:抽球

假设一个袋子装有白球与红球,比例未知,现在抽取10次(每次抽完都放回,保证事件独立性),假设抽到了7次白球和3次红球,在此数据样本条件下,可以采用最大似然估计法求解袋子中白球的比例(最大似然估计是一种“模型已定,参数未知”的方法)。当然,这种数据情况下很明显,白球的比例是70%,但如何通过理论的方法得到这个答案呢?一些复杂的条件下,是很难通过直观的方式获得答案的,这时候理论分析就尤为重要了,这也是学者们为何要提出最大似然估计的原因。我们可以定义从袋子中抽取白球和红球的概率如下:

x1x_1x1​ 为第一次采样, x2x_2x2​ 为第二次, fff 为模型, θ\thetaθ 模型参数

f(x1,x2∣θ)=f(x1∣θ)×f(x2∣θ)f(x_1,x_2|\theta)=f(x_1|\theta)\times f(x_2|\theta)f(x1​,x2​∣θ)=f(x1​∣θ)×f(x2​∣θ)

其中 a=ba = ba=b 是未知的,因此,我们定义似然 LLL 为:

L(θ∣x1,x2)=f(x1,x2∣θ)=∏i=12f(xi∣θ)L(\theta|x_1,x_2)=f(x_1,x_2|\theta)=\prod\limits_{i=1}^2f(x_i|\theta)L(θ∣x1​,x2​)=f(x1​,x2​∣θ)=i=1∏2​f(xi​∣θ)

两边取 lnlnln ,取 lnlnln 是为了将右边的乘号变为加号,方便求导,左边的通常称之为对数似然:

ln⁡L(θ∣x1,x2)=ln⁡∑i=12f(xi∣θ)=∑i=12ln⁡f(xi∣θ)\ln L(\theta|x_1,x_2)=\ln \sum\limits_{i=1}^2f(x_i|\theta)=\sum\limits_{i=1}^2\ln f(x_i|\theta)lnL(θ∣x1​,x2​)=lni=1∑2​f(xi​∣θ)=i=1∑2​lnf(xi​∣θ)

平均似然对数:

l^=12ln⁡L(θ∣x1,x2)\hat{l}=\frac{1}{2}\ln L(\theta|x_1,x_2)l^=21​lnL(θ∣x1​,x2​)

最大似然估计的过程,就是找一个合适的 θ\thetaθ ,使得平均对数似然的值为最大。因此,可以得到以下最大估计的公式:

θ^mle=arg⁡max⁡θ∈Θl^(θ∣x1,x2)\hat{\theta}_{mle}=\mathop{\arg \max}\limits_{\theta\in \Theta}\hat{l}(\theta|x_1,x_2)θ^mle​=θ∈Θargmax​l^(θ∣x1​,x2​)

这里讨论的是2次采样的情况,拓展到多次采样的情况,n次采样最大似然估计公式:

θ^mle=arg⁡max⁡θ∈Θl^(θ∣x1,x2,…,xn)\hat{\theta}_{mle}=\mathop{\arg \max}\limits_{\theta\in \Theta}\hat{l}(\theta|x_1,x_2,\dots,x_n)θ^mle​=θ∈Θargmax​l^(θ∣x1​,x2​,…,xn​)

我们定义 MMM 为模型(也就是之前公式中的 fff ),表示抽到白球的概率为 θ\thetaθ ,而抽到红球的概率为 1−θ1-\theta1−θ ,因此10次抽取抽到白球7次的概率可以表示为:

P(x1,x2,…,x10∣M)=P(x1∣M)×P(x2∣M)…P(x10∣M)=θ7(1−θ)3P(x_1,x_2,\dots,x_{10}|M)=P(x_1|M)\times P(x_2|M)\dots P(x_{10}|M)=\theta^7(1-\theta)^3P(x1​,x2​,…,x10​∣M)=P(x1​∣M)×P(x2​∣M)…P(x10​∣M)=θ7(1−θ)3

将其描述为平均似然可得:

l^=110ln⁡P(x1,x2,…,x10∣M)=110ln⁡[θ7(1−θ)3]\hat{l}=\frac{1}{10}\ln P(x_1,x_2,\dots, x_{10}|M)=\frac{1}{10}\ln[\theta^7(1-\theta)^3]l^=101​lnP(x1​,x2​,…,x10​∣M)=101​ln[θ7(1−θ)3]

那么最大似然就是找到一个合适的 θ\thetaθ ,获得最大的平均似然。因此我们可以对平均似然的公式对 θ\thetaθ 求导,并令导数为0。

l^′(θ)=7θ6(1−θ)3−3θ7(1−θ)2=0⇒θ=0.7\hat{l}'(\theta)=7\theta^6(1-\theta)^3-3\theta^7(1-\theta)^2=0 \Rightarrow \theta=0.7l^′(θ)=7θ6(1−θ)3−3θ7(1−θ)2=0⇒θ=0.7

由此可得,当抽取白球的概率 θ\thetaθ 为0.7时,最可能产生10次抽取抽到白球7次的事件。

例子2:正态分布

假如有一组采样值 (x1,…,xn)(x_1,\dots,x_n)(x1​,…,xn​) ,我们知道其服从正态分布,且标准差已知。当这个正态分布的期望为多少时,产生这个采样数据的概率为最大?

这个例子中正态分布就是模型 MMM ,而期望就是前文提到的 θ\thetaθ ,似然函数如下:

L(θ∣x1,x2,…,xn)=f(x1,x2,…,xn∣θ)=∏i=1nf(xi∣θ)L(\theta|x_1,x_2,\dots,x_n)=f(x_1,x_2,\dots,x_n|\theta)=\prod\limits_{i=1}^nf(x_i|\theta)L(θ∣x1​,x2​,…,xn​)=f(x1​,x2​,…,xn​∣θ)=i=1∏n​f(xi​∣θ)

正态分布的公式,当第一参数(期望)为0,第二参数(方差)为1时,分布为标准正态分布:

M=f(x)=12πσexp⁡(−(x−μ)22σ2), N(μ,σ2)M=f(x)=\frac{1}{\sqrt{2\pi}\sigma}\exp(-\frac{(x-\mu)^2}{2\sigma^2}),\ N(\mu,\sigma^2)M=f(x)=2π​σ1​exp(−2σ2(x−μ)2​), N(μ,σ2)

所以似然值为:

P(x1,x2,…,xn∣M)=(12πσ)nexp⁡(−12σ2∑i=1n(x−μ)2)P(x_1,x_2,\dots,x_n|M)=(\frac{1}{\sqrt{2\pi}\sigma})^n\exp(-\frac{1}{2\sigma^2}\sum\limits_{i=1}^n(x-\mu)^2)P(x1​,x2​,…,xn​∣M)=(2π​σ1​)nexp(−2σ21​i=1∑n​(x−μ)2)

对上式求导可得:

l^′(θ)=0⇒∑i=1nxi−nμ=0⇒μ=1n∑i=1nxi\hat{l}'(\theta)=0\Rightarrow\sum\limits_{i=1}^nx_i-n\mu=0\Rightarrow\mu=\frac{1}{n}\sum\limits_{i=1}^nx_il^′(θ)=0⇒i=1∑n​xi​−nμ=0⇒μ=n1​i=1∑n​xi​

综上所述,可得求解最大似然估计的一般过程为:

1. 写出似然函数;

2. 如果无法直接求导的话,对似然函数取对数;

3. 求导数 ;

4. 求解模型中参数的最优值。

假设有五个袋子,各袋中都有无限量的饼干(樱桃口味或柠檬口味),已知五个袋子中两种口味的比例分别是

1.樱桃 100% 2.樱桃 75% + 柠檬 25% 3.樱桃 50% + 柠檬 50% 4.樱桃 25% + 柠檬 75% 5.柠檬 100%

如果只有上所述条件,从同一个袋子中连续拿到2个柠檬饼干,那这个袋子最有可能是上述五个的哪一个?

我们首先采用最大似然估计来解这个问题,写出似然函数。假设从袋子中能拿出柠檬饼干的概率为 ppp (我们通过这个概率 ppp 来确定是从哪个袋子中拿出来的),则似然函数可以写作

p(两个柠檬饼干∣袋子)=p2p(两个柠檬饼干|袋子) = p^2p(两个柠檬饼干∣袋子)=p2

由于 ppp 的取值是一个离散值,即上面描述中的0,25%,50%,75%,1。我们只需要评估一下这五个值哪个值使得似然函数最大即可,得到为袋子5。这里便是最大似然估计的结果。

上述最大似然估计有一个问题,就是没有考虑到模型本身的概率分布,下面我们扩展这个饼干的问题。

假设拿到袋子1或5的概率 ggg 都是0.1,拿到2或4的概率都是0.2,拿到3的概率是0.4,那同样上述问题的答案呢?这个时候就变 MAPMAPMAP 了(若本例中拿到五个袋子概率都是0.2,即 θ\thetaθ 为均匀分布时, MAL=MLEMAL = MLEMAL=MLE ;当 p(θ)p(\theta)p(θ)不同时,即本例子, MAP≠MLEMAP \neq MLEMAP=MLE )。我们根据公式

θMAP=argmaxθP(θ)P(x∣θ)\theta_{MAP} = \mathop{argmax}\limits_\theta P(\theta)P(x|\theta)θMAP​=θargmax​P(θ)P(x∣θ)

写出我们的

MAP=p2×gMAP = p^2 \times gMAP=p2×g

根据题意的描述可知, ppp 的取值分别为0,25%, 50%, 75%, 1, ggg 的取值分别为0.1, 0.2, 0.4, 0.2, 0.1.分别计算出 MAPMAPMAP 函数的结果为:0, 0.0125, 0.125, 0.28125, 0.1.由上可知,通过 MAPMAPMAP 估计可得结果是从第四个袋子中取得的最高。

EM算法(Expectation–maximization Algorithm)

EM算法是一种迭代算法,用于含有隐变量的概率模型参数的极大似然估计,或极大后验概率估计。EM算法的每次迭代由两步组成:E步:求期望(Expectation);M步求极大(Maximization)。

算法步骤

输入:观测变量数据 YYY ,隐变量数据 ZZZ ,联合分布 P(Y,Z∣θ)P(Y,Z|\theta)P(Y,Z∣θ) ,条件概率分布 P(Z∣Y,θ)P(Z|Y,\theta)P(Z∣Y,θ)

输出:模型参数 θ\thetaθ

(1)选择参数的初值 θ(0)\theta^{(0)}θ(0) ,开始迭代

(2)E步:记 θ(i)\theta^{(i)}θ(i) 为第 iii 次迭代参数 θ\thetaθ 的估计值,在第 i+1i+1i+1 次迭代的E步,计算

Q(θ,θ(i))=EZ[log⁡P(Y,Z∣θ)∣Y,θ(i)]=∑Zlog⁡P(Y,Z∣θ)P(Z∣Y,θ(i))Q(\theta,\theta^{(i)})=E_Z[\log P(Y,Z|\theta)|Y,\theta^{(i)}]=\sum\limits_Z\log P(Y,Z|\theta)P(Z|Y,\theta^{(i)})Q(θ,θ(i))=EZ​[logP(Y,Z∣θ)∣Y,θ(i)]=Z∑​logP(Y,Z∣θ)P(Z∣Y,θ(i))

这里, P(Z∣Y,θ(i))P(Z|Y,\theta^{(i)})P(Z∣Y,θ(i)) 是在给定观测数据 YYY 和当前的参数估计 θ(i)\theta^{(i)}θ(i) 下隐变量数据 ZZZ 的条件概

率分布。

(3)M步:求使 Q(θ,θ(i))Q(\theta,\theta ^{(i)})Q(θ,θ(i)) 极大化的 θ\thetaθ ,确定第 i+1i+1i+1 次迭代的参数的估计值 θ(i+1)\theta^{(i+1)}θ(i+1)

θ(i+1)=arg⁡max⁡θQ(θ,θ(i))\theta^{(i+1)}=\arg\max\limits_\theta Q(\theta,\theta^{(i)})θ(i+1)=argθmax​Q(θ,θ(i))

(4)重复第(2)步和第(3)步,直至收敛。

步骤说明

步骤(1)参数的初值可以任意选择,但需注意EM算法对初值是敏感的

步骤(2)E步求 Q(θ,θ(i))Q(\theta,\theta^{(i)})Q(θ,θ(i)) 。 QQQ 函数式中 ZZZ 是未观测数据, YYY 是观测数据。注意 Q(θ,θ(i))Q(\theta,\theta^{(i)})Q(θ,θ(i)) 的第 111 个变元表示要极大化的参数,第 222 个变元表示参数的当前估计值。每次迭代实际在求 QQQ 函数及其极大。

步骤(3)M步求 Q(θ,θ(i))Q(\theta,\theta^{(i)})Q(θ,θ(i)) 得极大化,得到 θ(i+1)\theta^{(i+1)}θ(i+1) ,完成一次迭代 θ(i)→θ(i+1)\theta^{(i)}\to\theta^{(i+1)}θ(i)→θ(i+1) ,每次迭代使似然函数增大或达到局部极值。

步骤(4)给出停止迭代的条件,一般是对较小的正数 ε1,ε2\varepsilon_1,\varepsilon_2ε1​,ε2​ ,满足 ∣∣θ(i+1)−θ(i)∣∣<ε1||\theta^{(i+1)}-\theta^{(i)}||<\varepsilon_1∣∣θ(i+1)−θ(i)∣∣<ε1​ 或 ∣∣Q(θi+1,θ(i))−Q(θi,θ(i))∣∣<ε2||Q(\theta^{i+1},\theta^{(i)})-Q(\theta^{i},\theta^{(i)})||<\varepsilon_2∣∣Q(θi+1,θ(i))−Q(θi,θ(i))∣∣<ε2​ 则停止迭代。

Q函数

E步中的 Q(θ,θ(i))Q(\theta,\theta^{(i)})Q(θ,θ(i)) 是EM算法的核心,称为 QQQ 函数。完全数据的对数似然函数 log⁡P(Y,Z∣θ)\log P(Y,Z|\theta)logP(Y,Z∣θ) 关于在给定观测数据 YYY 和当前参数 θ(i)\theta^{(i)}θ(i) 下对未观测数据 ZZZ 的条件概率分布 P(Z∣Y,θ(i))P(Z|Y,\theta^{(i)})P(Z∣Y,θ(i)) 的期望称为 QQQ 函数

Q(θ,θ(i))=EZ[log⁡P(Y,Z∣θ)∣Y,θ(i)]=∑Zlog⁡P(Y,Z∣θ)P(Z∣Y,θ(i))Q(\theta,\theta^{(i)})=E_Z[\log P(Y,Z|\theta)|Y,\theta^{(i)}]=\sum\limits_Z\log P(Y,Z|\theta)P(Z|Y,\theta^{(i)})Q(θ,θ(i))=EZ​[logP(Y,Z∣θ)∣Y,θ(i)]=Z∑​logP(Y,Z∣θ)P(Z∣Y,θ(i))

算法举例

假设有 333 枚硬币,分别记作 A,B,CA,B,CA,B,C 。这些硬币正面出现的概率分别是 π,p,q\pi,p,qπ,p,q 。进行如下掷硬币试验:先掷硬币 AAA ,根据其结果选出硬币 BBB 或硬币 CCC ,正面选硬币 BBB ,反面选 CCC ;然后掷选出的硬币,掷硬币的结果,出现正面记作 111 ,出现反面记作 000 ;独立地重复 nnn 次试验(本例 n=10n = 10n=10 ),结果如下

n

1

2

3

4

5

6

7

8

9

10

结果

1

1

0

1

0

0

1

0

1

1

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

三硬币模型可以写作: P(y∣θ)=∑zP(y,z∣θ)=∑zP(z∣θ)P(y∣z,θ)P(y|\theta)=\sum\limits_zP(y,z|\theta)=\sum\limits_zP(z|\theta)P(y|z,\theta)P(y∣θ)=z∑​P(y,z∣θ)=z∑​P(z∣θ)P(y∣z,θ)

=πpy(1−p)1−y+(1−π)qy(1−q)1−y=\pi p^y(1-p)^{1-y}+(1-\pi)q^y(1-q)^{1-y}=πpy(1−p)1−y+(1−π)qy(1−q)1−y

这里,随机变量 yyy 是观测变量,表示一次试验观测的结果是 111 或 000 ;随机变量 zzz 是隐变量,表示未观测到的掷硬币 AAA 的结果; θ=(π,p,q)\theta=(\pi,p,q)θ=(π,p,q) 是模型参数。这一模型是以上数据的生成模型。注意,随机变量 yyy 的数据可以观测,随机变量 zzz 的数据不可观测。将观测数据表示为 Y=(Y1,Y2,…,Yn)TY = (Y_1,Y_2,\dots,Y_n)^TY=(Y1​,Y2​,…,Yn​)T ,未观测数据表示为 Z=(Z1,Z2,…,Zn)TZ = (Z_1,Z_2,\dots,Z_n)^TZ=(Z1​,Z2​,…,Zn​)T ,则观测数据的似然函数为

P(Y∣θ)=∑ZP(Z∣θ)P(Y∣Z,θ)P(Y|\theta)=\sum\limits_ZP(Z|\theta)P(Y|Z,\theta)P(Y∣θ)=Z∑​P(Z∣θ)P(Y∣Z,θ)

即

P(Y∣θ)=∏j=1n[πpyj(1−p)1−yj+(1−π)qyj(1−q)1−yj]P(Y|\theta)=\prod\limits_{j=1}^n[\pi p^{y_j}(1-p)^{1-{y_j}}+(1-\pi)q^{y_j}(1-q)^{1-{y_j}}]P(Y∣θ)=j=1∏n​[πpyj​(1−p)1−yj​+(1−π)qyj​(1−q)1−yj​]

考虑求模型参数 θ=(π,p,q)\theta=(\pi,p,q)θ=(π,p,q) 的极大似然估计,即

θ^=arg⁡max⁡θlog⁡P(Y∣θ)\hat{\theta}=\arg\max\limits_\theta\log P(Y|\theta)θ^=argθmax​logP(Y∣θ)

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

EM算法首先选取参数的初值,记作 θ(0)=(π(0),p(0),q(0))\theta^{(0)}=(\pi^{(0)},p^{(0)},q^{(0)})θ(0)=(π(0),p(0),q(0)) ,然后通过下面的迭代计算参数的估计值,直到收敛为止。第 iii 次迭代参数的估计值为 θ(i)=(π(i),p(i),q(i))\theta^{(i)}=(\pi^{(i)},p^{(i)},q^{(i)})θ(i)=(π(i),p(i),q(i)) 。EM算法的第 i+1i+1i+1 次迭代如下

E步:计算在模型参数 π(i),p(i),q(i)\pi^{(i)},p^{(i)},q^{(i)}π(i),p(i),q(i) 下观测数据 yiy_iyi​ 来自掷硬币 BBB 的概率

μj(i+1)=π(i)(p(i))yj(1−p(i))1−yjπ(i)(p(i))yj(1−p(i))1−yj+(1−π(i))(q(i))yj(1−q(i))1−yj\mu_j^{(i+1)}=\frac{\pi^{(i)}(p^{(i)})^{y_j}(1-p^{(i)})^{1-y_j}}{\pi^{(i)}(p^{(i)})^{y_j}(1-p^{(i)})^{1-y_j}+(1-\pi^{(i)})(q^{(i)})^{y_j}(1-q^{(i)})^{1-y_j}}μj(i+1)​=π(i)(p(i))yj​(1−p(i))1−yj​+(1−π(i))(q(i))yj​(1−q(i))1−yj​π(i)(p(i))yj​(1−p(i))1−yj​​

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

π(i+1)=1n∑j=1nμj(i+1)\pi^{(i+1)} = \frac{1}{n}\sum\limits_{j=1}^n\mu_j^{(i+1)}π(i+1)=n1​j=1∑n​μj(i+1)​ p(i+1)=∑j=1nμj(i+1)yj∑j=1nμj(i+1)p^{(i+1)} = \frac{\sum\limits_{j=1}^n\mu_j^{(i+1)}y_j}{\sum\limits_{j=1}^n\mu_j^{(i+1)}}p(i+1)=j=1∑n​μj(i+1)​j=1∑n​μj(i+1)​yj​​ q(i+1)=∑j=1n(1−μj(i+1))yj∑j=1n(1−μj(i+1))q^{(i+1)} = \frac{\sum\limits_{j=1}^n(1-\mu_j^{(i+1)})y_j}{\sum\limits_{j=1}^n(1-\mu_j^{(i+1)})}q(i+1)=j=1∑n​(1−μj(i+1)​)j=1∑n​(1−μj(i+1)​)yj​​

进行数字计算。假设模型参数的初值取为

π(0)=0.5,   p(0)=0.5,   q(0)=0.5\pi^{(0)}=0.5,\ \ \ p^{(0)}=0.5,\ \ \ q^{(0)}=0.5π(0)=0.5,   p(0)=0.5,   q(0)=0.5

由E步得到对于 yj=1y_j=1yj​=1 与 yj=0y_j=0yj​=0 均有 μj(1)=0.5\mu_j^{(1)}=0.5μj(1)​=0.5

由M步迭代公式得到

π(1)=0.5,   p(1)=0.6,   q(1)=0.6\pi^{(1)}=0.5,\ \ \ p^{(1)}=0.6,\ \ \ q^{(1)}=0.6π(1)=0.5,   p(1)=0.6,   q(1)=0.6

再回到E步,得到 μj(2)=0.5,   j=1,2,…,10\mu_j^{(2)}=0.5,\ \ \ j=1,2,\dots,10μj(2)​=0.5,   j=1,2,…,10

继续M步,得

π(2)=0.5,   p(2)=0.6,   q(2)=0.6\pi^{(2)}=0.5,\ \ \ p^{(2)}=0.6,\ \ \ q^{(2)}=0.6π(2)=0.5,   p(2)=0.6,   q(2)=0.6

收敛,于是得到模型的参数 θ\thetaθ 的极大似然估计

π^=0.5,   p^=0.6,   q^=0.6\hat{\pi}=0.5,\ \ \ \hat{p}=0.6,\ \ \ \hat{q}=0.6π^=0.5,   p^​=0.6,   q^​=0.6

如果取初值 π(0)=0.4,   p(0)=0.6,   q(0)=0.7\pi^{(0)}=0.4,\ \ \ p^{(0)}=0.6,\ \ \ q^{(0)}=0.7π(0)=0.4,   p(0)=0.6,   q(0)=0.7 ,那么得到的模型参数的极大似然估计是 π^=0.4064,   p^=0.5368,   q^=0.6432\hat{\pi}=0.4064,\ \ \ \hat{p}=0.5368,\ \ \ \hat{q}=0.6432π^=0.4064,   p^​=0.5368,   q^​=0.6432 。这就是说,EM算法与初值的选取有关,选择不同的初值可能得到不同的参数估计值。

E-step: μi+1=π(pi)yi(1−(pi))1−yiπ(pi)yi(1−(pi))1−yi+(1−π)(qi)yi(1−(qi))1−yi\mu^{i+1}=\frac{\pi (p^i)^{y_i}(1-(p^i))^{1-y_i}}{\pi (p^i)^{y_i}(1-(p^i))^{1-y_i}+(1-\pi) (q^i)^{y_i}(1-(q^i))^{1-y_i}}μi+1=π(pi)yi​(1−(pi))1−yi​+(1−π)(qi)yi​(1−(qi))1−yi​π(pi)yi​(1−(pi))1−yi​​

import numpy as np
import math

pro_A, pro_B, por_C = 0.5, 0.5, 0.5

def pmf(i, pro_A, pro_B, por_C):
    pro_1 = pro_A * math.pow(pro_B, data[i]) * math.pow((1-pro_B), 1-data[i])
    pro_2 = pro_A * math.pow(pro_C, data[i]) * math.pow((1-pro_C), 1-data[i])
    return pro_1 / (pro_1 + pro_2)

M-step: πi+1=1n∑j=1nμji+1,pi+1=∑j=1nμji+1yi∑j=1nμji+1,qi+1=∑j=1n(1−μji+1yi)∑j=1n(1−μji+1)\pi^{i+1}=\frac{1}{n}\sum_{j=1}^n\mu^{i+1}_j, p^{i+1}=\frac{\sum_{j=1}^n\mu^{i+1}_jy_i}{\sum_{j=1}^n\mu^{i+1}_j}, q^{i+1}=\frac{\sum_{j=1}^n(1-\mu^{i+1}_jy_i)}{\sum_{j=1}^n(1-\mu^{i+1}_j)}πi+1=n1​∑j=1n​μji+1​,pi+1=∑j=1n​μji+1​∑j=1n​μji+1​yi​​,qi+1=∑j=1n​(1−μji+1​)∑j=1n​(1−μji+1​yi​)​

class EM:
    def __init__(self, prob):
        self.pro_A, self.pro_B, self.pro_C = prob
        
    # e_step
    def pmf(self, i):
        pro_1 = self.pro_A * math.pow(self.pro_B, data[i]) * math.pow((1-self.pro_B), 1-data[i])
        pro_2 = (1 - self.pro_A) * math.pow(self.pro_C, data[i]) * math.pow((1-self.pro_C), 1-data[i])
        return pro_1 / (pro_1 + pro_2)
    
    # m_step
    def fit(self, data):
        count = len(data)
        print('init prob:{}, {}, {}'.format(self.pro_A, self.pro_B, self.pro_C))
        for d in range(count):
            _ = yield
            _pmf = [self.pmf(k) for k in range(count)]
            pro_A = 1/ count * sum(_pmf)
            pro_B = sum([_pmf[k]*data[k] for k in range(count)]) / sum([_pmf[k] for k in range(count)])
            pro_C = sum([(1-_pmf[k])*data[k] for k in range(count)]) / sum([(1-_pmf[k]) for k in range(count)])
            print('{}/{}  pro_a:{:.3f}, pro_b:{:.3f}, pro_c:{:.3f}'.format(d+1, count, pro_A, pro_B, pro_C))
            self.pro_A = pro_A
            self.pro_B = pro_B
            self.pro_C = pro_C

测试

data=[1,1,0,1,0,0,1,0,1,1]

em = EM(prob=[0.5, 0.5, 0.5])
f = em.fit(data)
next(f)

# 第一次迭代
f.send(1)

# 第二次
f.send(2)

em = EM(prob=[0.4, 0.6, 0.7])
f2 = em.fit(data)
next(f2)

f2.send(1)

f2.send(2)

最大似然估计(Maximum likelihood estimation)
最大后验概率估计(Maximum a posteriori)
Code实现