EM 算法实验

发布于 2023-08-24 12:28:53 字数 4765 浏览 31 评论 0

最大似然估计

在已知每次实验的硬币是 A 和 B 的情况下,我们可以直接使用最大似然估计求解 A、B 硬币正面出现的概率 $ p_A $ 和 $ p_B $。由于每次实验都是独立地抛十次,所以可以知道实验结果服从二项分布 $ B(10, p_A) $ 和 $ B(10,p_B) $。

设 A 硬币的第 $i$ 次实验正面朝上的次数为 $y_A^{(i)}$, B 硬币的第 $i$ 次实验正面朝上的次数为 $y_B^{(i)}$,分别进行了 $n_A$ 次实验和 $n_B$ 次实验,可以得到 A 的似然估计函数为:

$$ L_A=\prod^{n_A}_{i=1}{10\choose y^{(i)}_A}p_A^{y^{(i)}_A}(1-p_A)^{10 – y^{(i)}_A} $$

B 的似然估计函数为:

$$ L_B=\prod^{n_B}_{i=1}{10\choose y^{(i)}_B}p_B^{y^{(i)}_B}(1-p_B)^{10 – y^{(i)}_B} $$

分别取对数并对 $p_A$ 求导后得到:

$$ \frac{\partial\ln L_A}{\partial p_A}=\sum^{n_A}_{i=1}(\frac{y_A^{(i)}}{p_A}-\frac{10 -y_A^{(i)}}{1 – p_A}) $$

令导数为 0,得到:

$$ p_A = \frac{\sum_{i=1}^{n_A}y_A^{(i)}}{\sum_{i=1}^{n_A}y_A^{(i)}+\sum_{i=1}^{n_A}(10-y_A^{(i)})} $$

同理可得:

$$ p_B = \frac{\sum_{i=1}^{n_B}y_B^{(i)}}{\sum_{i=1}^{n_B}y_B^{(i)}+\sum_{i=1}^{n_B}(10-y_B^{(i)})} $$

代入数据,即求得:

$$ p_A = \frac{9+8+7}{9+8+7+1+2+3}=\frac{24}{30}=0.8\\\ p_B = \frac{5+4}{5+4+5+6}=\frac{9}{20}=0.45 $$

EM 算法

而在不知道每次实验选取的是哪个硬币的时候,我们就没有办法直接对 A 和 B 进行最大似然估计。这时候就需要使用 EM 算法,通过引入一个隐变量 $Z$ 来对硬币概率建模,并规定 $Z\in \{0, 1\}$,$Z=0$ 表示当前硬币是硬币 A,$Z=1$ 表示当前硬币是硬币 B,并记 $P(Z=0)=\pi$。此时模型参数 $\theta=(\pi,p_A,p_B)$,可以知道,$Y$ 与 $Z$ 是相关的,要求 $P(Y|\theta)$,就需要求 $P(Y, Z|\theta)$ 的边缘分布。

记 $z_i$ 和 $y_i$ 分别为第 $i$ 次实验选择的硬币(未知的)和正面朝上的次数,那么,对于所有实验而言,似然函数就变成了

$$ P(Y|\theta)=\prod^{n}_{i=1}P(Y=y_i|\theta)=\prod^{n}_{i=1}\sum_{z_i \in {0,1} }P(Y=y_i,Z=z_i|\theta)=\prod_{i=1}^{n}\sum_{z_i\in{0,1}}P(Z=z_i|\theta)P(Y=y_i|Z=z_i,\theta)\\\ =\prod_{i=1}^{n}[\pi{10\choose y_i}\ p_A^{y_i}(1-p_A)^{10-y_i}+(1-\pi){10\choose y_i}\ p_B^{y_i}(1-p_B)^{10-y_i}] $$

而极大似然估计求参数即为:

$$ \hat\theta=\arg\max_\theta\ln P(Y|\theta) $$

这个问题很难求出解析解,所以需要使用 EM 迭代法求近似解。

因为

$$ \ln P(Y|\theta)=\sum_{i=1}^{n}\ln[\pi{10\choose y_i}\ p_A^{y_i}(1-p_A)^{10-y_i}+(1-\pi){10\choose y_i}\ p_B^{y_i}(1-p_B)^{10-y_i}] $$

含有“和的对数”,极难求解,通过 Jensen 不等式可得

$$ \ln P(Y|\theta) = \sum^{n}_{i=1}\ln \sum_{z_i \in {0,1}}P(Y=y_i,Z=z_i|\theta)\\\ =\sum^{n}_{i=1}\ln \sum_{z_i \in {0,1}}Q_i(z_i,\theta)\frac{P(Y=y_i,Z=z_i|\theta)}{Q_i(z_i,\theta)}\\\ \ge\sum^{n}_{i=1} \sum_{z_i \in {0,1}}Q_i(z_i,\theta)\ln \frac{P(Y=y_i,Z=z_i|\theta)}{Q_i(z_i,\theta)}=Q(\theta;\theta) $$

$$ Q_i(z_i,\theta)=P(Z=z_i|Y=y_i, \theta)=\frac{P(Z=z_i|\theta)P(Y=y_i|Z=z_i, \theta)}{P(Y=y_i|\theta)}\\\ =\frac{(1-z_i)\pi{10\choose y_i}\ p_A^{y_i}(1-p_A)^{10-y_i}+z_i(1-\pi){10\choose y_i}\ p_B^{y_i}(1-p_B)^{10-y_i}}{\pi{10\choose y_i}\ p_A^{y_i}(1-p_A)^{10-y_i}+(1-\pi){10\choose y_i}\ p_B^{y_i}(1-p_B)^{10-y_i}} $$

可以看出:$1-Q_i(0)=Q_i(1)$

在 E 步,我们通过统计数据计算出每次实验的 $Q_i(z)$,然后固定参数 $\theta$,改变参数 $\theta’=(\pi’,p_A’,p_B’)$,最大化下面的函数:

$$ Q(\theta’;\theta)=\sum_{i=1}^{n}\sum_{z_i \in {0,1}}Q_i(z_i,\theta)\ln \frac{P(Y=y_i,Z=z_i|\theta’)}{Q_i(z_i,\theta)}\\\ =\sum_{i=1}^{n}Q_i(0,\theta)\ln \frac{\pi'{10\choose y_i}\ p_A’^{y_i}(1-p_A’)^{10-y_i}}{Q_i(0,\theta)} + \sum_{i=1}^{n}Q_i(1,\theta)\ln \frac{(1-\pi’){10\choose y_i}\ p_B’^{y_i}(1-p_B’)^{10-y_i}}{Q_i(1,\theta)} $$

对 $\pi$ 求偏导得:

$$ \frac{\partial Q(\theta’; \theta)}{\partial\pi’}=\frac{\sum_{i=1}^nQ_i(0,\theta)}{\pi’}-\frac{\sum_{i=1}^nQ_i(1,\theta)}{1-\pi’} $$

令导数为 0 得:

$$ \pi’=\frac{\sum_{i=1}^{n}Q_i(0,\theta)}{n} $$

同理可得:

$$ p_A’=\frac{\sum_{i=1}^{n}y_iQ_i(0,\theta)}{\sum_{i=1}^{n}10Q_i(0,\theta)}\\\ p_B’=\frac{\sum_{i=1}^{n}y_iQ_i(1,\theta)}{\sum_{i=1}^{n}10Q_i(1,\theta)} $$

这就是 M 步的更新公式。

EM 算法需要我们手动指定一个初值,然后开始迭代,迭代的终止条件为 $||\theta’-\theta|| < \epsilon_1$ 或 $||Q(\theta’; \theta)-Q(\theta; \theta)|| < \epsilon_2$

指定初值 $\pi=0.5$,$p_A=0.6$,$p_B=0.5$ 的情况下,最终迭代过程如下:

Iteration 1 pi = 0.597 p_A = 0.713, p_B = 0.581
Iteration 2 pi = 0.591 p_A = 0.733, p_B = 0.555
Iteration 3 pi = 0.582 p_A = 0.752, p_B = 0.532
Iteration 4 pi = 0.572 p_A = 0.767, p_B = 0.516
Iteration 5 pi = 0.564 p_A = 0.777, p_B = 0.509
Iteration 6 pi = 0.556 p_A = 0.783, p_B = 0.506
Iteration 7 pi = 0.550 p_A = 0.786, p_B = 0.506
Iteration 8 pi = 0.545 p_A = 0.788, p_B = 0.507
Iteration 9 pi = 0.541 p_A = 0.789, p_B = 0.508
Iteration 10 pi = 0.538 p_A = 0.790, p_B = 0.509
Iteration 11 pi = 0.535 p_A = 0.791, p_B = 0.510
Iteration 12 pi = 0.533 p_A = 0.791, p_B = 0.510
Iteration 13 pi = 0.531 p_A = 0.792, p_B = 0.511
Iteration 14 pi = 0.529 p_A = 0.792, p_B = 0.512
Iteration 15 pi = 0.528 p_A = 0.792, p_B = 0.512
Iteration 16 pi = 0.527 p_A = 0.792, p_B = 0.512
no update in params, stop iteration
Result pi = 0.527 p_A = 0.792, p_B = 0.512

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

尸血腥色

暂无简介

0 文章
0 评论
23 人气
更多

推荐作者

qq_E2Iff7

文章 0 评论 0

Archangel

文章 0 评论 0

freedog

文章 0 评论 0

Hunk

文章 0 评论 0

18819270189

文章 0 评论 0

wenkai

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文