在已知每个实验的硬币分别是 A 和 B 的情况下,我们可以直接使用最大似然估计来求解硬币 A 和 B $ p a $ 和 $ p b $ 正向出现的概率。 由于每个实验独立抛出十次,可以看出实验结果遵循 $ b(10, p a) $ 和 $ b(10, p b) $ 的二项分布
设币A的$i$实验面朝上$y a$的次数,币B的$i$实验$y b $的次数,分别进行$n a$实验和$n b$实验,a的似然估计函数可得到:
l_a=\prod^__a}p_a^_a}(1-p_a)^_a} $
b 的似然估计函数为:
l_b=\prod^__b}p_b^_b}(1-p_b)^_b} $
分别取对数和推导 $p a$,我们得到:
frac=\sum^_(frac}-\frac})
设导数为 0 并得到:
p_a = \frac^y_a^}^y_a^+\sum_^(10-y_a^)}
以同样的方式,我们得到: $ p b = frac y b } y b + sum (10-y b )}
替换数据,即查找:
p_a = \frac=\frac=0.8\\\p_b = \frac=\frac=0.45 $$
当我们不知道每个实验选择哪种硬币时,我们无法直接估计 A 和 B 的最大可能性。 在这种情况下,需要使用 em 算法通过引入一个潜在变量 $z$ 来对币概率进行建模,并指定 $z=0$ 中的 $z 表示当前币是币 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^_p(y=y_i|\theta)=\prod^_\sum_ }p(y=y_i,z=z_i|\theta)=\prod_^\sum_}p(z=z_i|\theta)p(y=y_i|z=z_i,\theta)\\=\prod_^[pi\ p_a^(1-p_a)^+1-\pi)\ p_b^(1-p_b)^]
最大似然估计参数为:
hat\theta=\arg\max_\theta\ln p(y|\theta) $
这个问题很难找到解析解,因此需要使用em迭代法来求近似解。
因为。 $ ln p(y|\theta)=\sum_^\ln[\pi\ p_a^(1-p_a)^+1-\pi)\ p_b^(1-p_b)^]
带有“和”的对数极难求解,由詹森不等式获得。
ln p(y|\theta) = \sum^_\ln \sum_}p(y=y_i,z=z_i|\theta)\\=\sum^_\ln \sum_}q_i(z_i,\theta)\frac\\\ge\sum^_ sum_}q_i(z_i,\theta)\ln \frac=q(\theta;\theta) $
而。 $ q_i(z_i,\theta)=p(z=z_i|y=y_i, \theta)=\frac\\\=\frac\ p_a^(1-p_a)^+z_i(1-\pi)\ p_b^(1-p_b)^}p_a^(1-p_a)^+1-\pi)\ p_b^(1-p_b)^}
可以看出,$1-q i(0)=q i(1)$
在步骤e中,我们通过统计计算每个实验的$q i(z)$,然后固定参数$theta$,更改参数$theta'=( pi',p a',p b')$以最大化以下函数:
q(\theta’;\theta)=\sum_^\sum_}q_i(z_i,\theta)\ln \frac\\\=\sum_^q_i(0,\theta)\ln \frac\ p_a’^(1-p_a’)^sum_^q_i(1,\theta)\ln \frac\ p_b’^(1-p_b’)^
$ pi$ 收益率的偏导数:
frac=\frac^nq_i(0,\theta)}-frac^nq_i(1,\theta)}
设导数为 0 得到
pi’=\frac^q_i(0,\theta)}
以同样的方式,我们得到: $ p a'= frac y iq i(0, theta)} 10q i(0, theta)} p b'= frac y iq i(1, theta)} 10q i(1, theta)}
这是 m 步骤的更新公式。
em 算法要求我们手动指定一个初始值,然后以终止条件 $|theta’-\theta||epsilon 1$ 或 $|q(\theta’; theta)-q(\theta; \theta)||epsilon_2$
指定初始值 $ pi=05$,$p_a=0.6$,$p_b=0.5$,最终迭代过程如下:
iteration 1 pi = 0.597 p_a = 0.713, p_b = 0.581iteration 2 pi = 0.591 p_a = 0.733, p_b = 0.555iteration 3 pi = 0.582 p_a = 0.752, p_b = 0.532iteration 4 pi = 0.572 p_a = 0.767, p_b = 0.516iteration 5 pi = 0.564 p_a = 0.777, p_b = 0.509iteration 6 pi = 0.556 p_a = 0.783, p_b = 0.506iteration 7 pi = 0.550 p_a = 0.786, p_b = 0.506iteration 8 pi = 0.545 p_a = 0.788, p_b = 0.507iteration 9 pi = 0.541 p_a = 0.789, p_b = 0.508iteration 10 pi = 0.538 p_a = 0.790, p_b = 0.509iteration 11 pi = 0.535 p_a = 0.791, p_b = 0.510iteration 12 pi = 0.533 p_a = 0.791, p_b = 0.510iteration 13 pi = 0.531 p_a = 0.792, p_b = 0.511iteration 14 pi = 0.529 p_a = 0.792, p_b = 0.512iteration 15 pi = 0.528 p_a = 0.792, p_b = 0.512iteration 16 pi = 0.527 p_a = 0.792, p_b = 0.512no update in params, stop iterationresult pi = 0.527 p_a = 0.792, p_b = 0.512