区块链技术博客
www.b2bchain.cn

【算法模型】S07E08 EM算法(上):含有隐变量的参数估计问题求职学习资料

本文介绍了【算法模型】S07E08 EM算法(上):含有隐变量的参数估计问题求职学习资料,有助于帮助完成毕业设计以及求职,是一篇很好的资料。

对技术面试,学习经验等有一些体会,在此分享。

在前面,我们介绍了很多例子,告诉了大家如何使用样本值去估计模型的参数,比如均值、方差等等,并且介绍了非常常用的极大似然估计方法。

比如你手上有一枚不均匀的硬币,他抛出之后正面朝上和反面朝上的概率并不相等,你想去探索硬币正面朝上的概率,那很简单,你把他抛$N$次,其中正面朝上的次数为$n_1$,那么我们就用$frac{n_1}{N}$的值作为正面朝上概率的估计。

又比如你知道,某个地区18岁成年男子的身高服从一个正态分布,那么如果你想知道这个身高正态分布的均值和方差,那也不难,我们可以随机挑选$N$个该地区的成年男子作为样本,分别统计出他们的身高$x_1,x_2,x_3,…,x_N$,通过我们之间利用极大似然估计得到的样本均值和样本方差

$$mu_{mle}=frac{1}{N}sum_{i=1}^{N}x_i\sigma^2_{mle}=frac{1}{N}sum_{i=1}^n(x_i-mu_{mle})^2$$

如果想要估计具备无偏性,按照之前讲过的知识点,做一点简单的修正即可:

$$sigma^2=frac{1}{N-1}sum_{i=1}^n(x_i-mu_{mle})^2$$

但是,如果在实际场景中,情形发生一点变化,你就会发现似乎前面非常有效的极大似然估计方法就会变得使不上劲了。

比如,现在你手上有两枚硬币,硬币$A$和硬币$B$,他们都是不均匀的,但是他们正面朝上的概率$p_A$和$p_B$并不相等,每次你从这两枚硬币随机摸出一枚硬币进行投掷(但是你并不知道取的是哪一枚),你依然记录每次抛掷的结果是正面还是反面,正面出现的次数$N_1$,反面出现的次数$N_2$,但是你能够直接依据这个数据估计出硬币$A$和硬币$B$各自正面朝上的概率吗?恐怕是不行的吧。

再比如,你还是统计某地区18岁青年的身高,但是这次的样本中,既有男生,也有女生,那么当你获取了$N$个青年的样本身高之后,能够直接去求得男生的身高均值和方差以及女生的身高均值和方差吗?显然是不行的,因为男生和女生的身高各自服从不同参数下的高斯分布。

为什么这两个情况下,直接去用极大似然估计的方法去估计参数就不行了呢?是因为这两个场景下,模型都变成了混合模型,不光有观测变量,更出现了一个隐含变量。

一般而言,第$i$个样本的观测变量记作$x_i$,隐含变量记作$z_i$

比如抛硬币的例子中,每次抛硬币的正反是观测变量,但是到底这次抛的硬币$A$还是硬币$B$,我们不知道,这是一个隐含变量。

又比如量身高的例子,我们每次看到的身高值是观测变量,而这个样本到底是属于男生的还是女生的,就是一个隐含变量。

那么这种混合模型,不能直接用极大似然估计法去估计,那我们就考虑采用迭代法去慢慢的试,这就是我们贯穿整个第二章的$EM$方法,说实话整个方法的公式和计算技巧有点复杂,这一小节,我们暂时不引入公式,我们针对抛硬币的例子,来做一个简单的计算,目的是让大家感性的认识一下,在有隐变量的情况下,迭代探索参数究竟是一个什么样的过程。这一节里不涉及具体的公式。

好,我们下面具体来描述一下抛硬币的背景:

我们有不均匀的硬币$A$和硬币$B$,我们重复做5组试验,每一次试验的过程是这样的,我们任取其中一枚硬币,连续抛掷10次,记录正反的次数,5组试验的结果如下:

组别 正面次数 反面次数
第一组 $5$ $5$
第二组 $9$ $1$
第三组 $8$ $2$
第四组 $4$ $6$
第五组 $7$ $3$

那么,硬币$A$和硬币$B$正面向上的概率$theta_A$和$theta_B$各是多少?

目前问题的症结就在于我们不知道每一组到底扔的是哪一枚硬币,我们先插一句嘴,如果我现在告诉你,第一组和第四组试验我们用的是硬币$B$,第二、三、五组试验用的是硬币$A$,那你会做吗?

那就好办了,对于硬币$A$参数估计,我们直接拿第2、3、5组试验数据进行即可:

$theta_A=frac{9+8+7}{30}=0.8$

然后那第1、4组试验去估计硬币$B$:

$theta_B=frac{4+5}{20}=0.45$

而这里,一步肯定是估计不出参数的,我们使用迭代法,也就是准备用多轮操作逐步接近真实的$theta_A$和$theta_B$

我们先给一个初值$theta_A^{(0)}$和$theta_B^{(0)}$,我们先随意给一个值:

$$theta_A^{(0)}=0.6,theta_B^{(0)}=0.5$$

那么基于这个预设的参数,在第一组试验中我们设硬币$A$出现的概率为$P_{A1}$,硬币$B$出现的概率为$P_{B1}$

如果在试验1中,我们完全用硬币$A$来抛,抛出5正5反的概率为:

$$theta_{A}^{(0)5}(1-theta_{A}^{(0)})^5=0.6^5cdot0.4^5=0.0007962624$$

同理在试验1中,我们完全用硬币$B$来抛,抛出5正5反的概率为:

$$theta_{B}^{(0)5}(1-theta_{B}^{(0)})^5=0.5^5cdot0.5^5=0.0009765625$$

那么第一组试验中,是硬币$A$和硬币$B$的概率分别为:

$$P_{A1}=frac{0.6^5cdot0.4^5}{0.6^5cdot0.4^5+0.5^5cdot0.5^5}=0.45$$

$$P_{B1}=frac{0.5^5cdot0.5^5}{0.6^5cdot0.4^5+0.5^5cdot0.5^5}=0.55$$

按照同样的方式,我们可以分别计算出另外四组试验中,硬币A和硬币B各自出现的概率:

组别 硬币A 硬币B
第一组 $0.45$ $0.55$
第二组 $0.80$ $0.20$
第三组 $0.73$ $0.27$
第四组 $0.35$ $0.65$
第五组 $0.65$ $0.35$

我们还是用第一组试验中算出来的$P_{A1}=0.45$和$P_{B1}=0.55$来做做文章,第一组试验的结果是$5$正$5$负,那么由硬币$A$扔出来的结果应该是:$0.455=2.25$正,$0.455=2.25$负;由硬币$B$扔出来的结果应该是:$0.555=2.75$正,$0.555=2.75$负,由此可以得到各组试验中硬币$A$和硬币$B$各自抛掷出来的结果:

组别 硬币A 硬币B
1 $正:2.25quad负:2.25$ $正:2.75quad负:2.75$
2 $正:7.2quad负:0.8$ $正:1.8quad负:0.2$
3 $正:5.84quad负:1.46$ $正:2.16quad负:0.54$
4 $正:1.4quad负:2.1$ $正:2.6quad负:3.9$
5 $正:4.55quad负:1.95$ $正:2.45quad负:1.05$
$正:21.24quad负:8.56$ $正:11.76quad负:8.44$

有了这个表,我们就能做够重新估计硬币A和硬币B正面朝上的概率了,因为此时数据是完备的,估计出的值作为新一轮的估计值:

$$theta_A^{(1)}=frac{21.24}{21.24+8.56}=0.71$$

$$theta_B^{(1)}=frac{11.76}{11.76+8.44}=0.58$$

就好像当初的$theta_A^{(0)}$和$theta_B^{(0)}$那样,此时我们有了$theta_A^{(1)}$和$theta_B^{(1)}$,就可以把上面两张表的计算过程不停的重复,不断的去计算和更新出$theta_A^{(2)},theta_B^{(2)};theta_A^{(3)},theta_B^{(3)};theta_A^{(4)},theta_B^{(4)};…theta_A^{(N)},theta_B^{(N)}$,直到参数收敛于真实的$theta_A,theta_B$

我们用代码来演示一下上述过程,观察一下最终参数的收敛情况:
代码片段:
“`
import numpy as np

在前面,我们介绍了很多例子,告诉了大家如何使用样本值去估计模型的参数,比如均值、方差等等,并且介绍了非常常用的极大似然估计方法。

比如你手上有一枚不均匀的硬币,他抛出之后正面朝上和反面朝上的概率并不相等,你想去探索硬币正面朝上的概率,那很简单,你把他抛$N$次,其中正面朝上的次数为$n_1$,那么我们就用$frac{n_1}{N}$的值作为正面朝上概率的估计。

又比如你知道,某个地区18岁成年男子的身高服从一个正态分布,那么如果你想知道这个身高正态分布的均值和方差,那也不难,我们可以随机挑选$N$个该地区的成年男子作为样本,分别统计出他们的身高$x_1,x_2,x_3,…,x_N$,通过我们之间利用极大似然估计得到的样本均值和样本方差

$$mu_{mle}=frac{1}{N}sum_{i=1}^{N}x_i\sigma^2_{mle}=frac{1}{N}sum_{i=1}^n(x_i-mu_{mle})^2$$

如果想要估计具备无偏性,按照之前讲过的知识点,做一点简单的修正即可:

$$sigma^2=frac{1}{N-1}sum_{i=1}^n(x_i-mu_{mle})^2$$

但是,如果在实际场景中,情形发生一点变化,你就会发现似乎前面非常有效的极大似然估计方法就会变得使不上劲了。

比如,现在你手上有两枚硬币,硬币$A$和硬币$B$,他们都是不均匀的,但是他们正面朝上的概率$p_A$和$p_B$并不相等,每次你从这两枚硬币随机摸出一枚硬币进行投掷(但是你并不知道取的是哪一枚),你依然记录每次抛掷的结果是正面还是反面,正面出现的次数$N_1$,反面出现的次数$N_2$,但是你能够直接依据这个数据估计出硬币$A$和硬币$B$各自正面朝上的概率吗?恐怕是不行的吧。

再比如,你还是统计某地区18岁青年的身高,但是这次的样本中,既有男生,也有女生,那么当你获取了$N$个青年的样本身高之后,能够直接去求得男生的身高均值和方差以及女生的身高均值和方差吗?显然是不行的,因为男生和女生的身高各自服从不同参数下的高斯分布。

为什么这两个情况下,直接去用极大似然估计的方法去估计参数就不行了呢?是因为这两个场景下,模型都变成了混合模型,不光有观测变量,更出现了一个隐含变量。

一般而言,第$i$个样本的观测变量记作$x_i$,隐含变量记作$z_i$

比如抛硬币的例子中,每次抛硬币的正反是观测变量,但是到底这次抛的硬币$A$还是硬币$B$,我们不知道,这是一个隐含变量。

又比如量身高的例子,我们每次看到的身高值是观测变量,而这个样本到底是属于男生的还是女生的,就是一个隐含变量。

那么这种混合模型,不能直接用极大似然估计法去估计,那我们就考虑采用迭代法去慢慢的试,这就是我们贯穿整个第二章的$EM$方法,说实话整个方法的公式和计算技巧有点复杂,这一小节,我们暂时不引入公式,我们针对抛硬币的例子,来做一个简单的计算,目的是让大家感性的认识一下,在有隐变量的情况下,迭代探索参数究竟是一个什么样的过程。这一节里不涉及具体的公式。

好,我们下面具体来描述一下抛硬币的背景:

我们有不均匀的硬币$A$和硬币$B$,我们重复做5组试验,每一次试验的过程是这样的,我们任取其中一枚硬币,连续抛掷10次,记录正反的次数,5组试验的结果如下:

组别 正面次数 反面次数
第一组 $5$ $5$
第二组 $9$ $1$
第三组 $8$ $2$
第四组 $4$ $6$
第五组 $7$ $3$

那么,硬币$A$和硬币$B$正面向上的概率$theta_A$和$theta_B$各是多少?

目前问题的症结就在于我们不知道每一组到底扔的是哪一枚硬币,我们先插一句嘴,如果我现在告诉你,第一组和第四组试验我们用的是硬币$B$,第二、三、五组试验用的是硬币$A$,那你会做吗?

那就好办了,对于硬币$A$参数估计,我们直接拿第2、3、5组试验数据进行即可:

$theta_A=frac{9+8+7}{30}=0.8$

然后那第1、4组试验去估计硬币$B$:

$theta_B=frac{4+5}{20}=0.45$

而这里,一步肯定是估计不出参数的,我们使用迭代法,也就是准备用多轮操作逐步接近真实的$theta_A$和$theta_B$

我们先给一个初值$theta_A^{(0)}$和$theta_B^{(0)}$,我们先随意给一个值:

$$theta_A^{(0)}=0.6,theta_B^{(0)}=0.5$$

那么基于这个预设的参数,在第一组试验中我们设硬币$A$出现的概率为$P_{A1}$,硬币$B$出现的概率为$P_{B1}$

如果在试验1中,我们完全用硬币$A$来抛,抛出5正5反的概率为:

$$theta_{A}^{(0)5}(1-theta_{A}^{(0)})^5=0.6^5cdot0.4^5=0.0007962624$$

同理在试验1中,我们完全用硬币$B$来抛,抛出5正5反的概率为:

$$theta_{B}^{(0)5}(1-theta_{B}^{(0)})^5=0.5^5cdot0.5^5=0.0009765625$$

那么第一组试验中,是硬币$A$和硬币$B$的概率分别为:

$$P_{A1}=frac{0.6^5cdot0.4^5}{0.6^5cdot0.4^5+0.5^5cdot0.5^5}=0.45$$

$$P_{B1}=frac{0.5^5cdot0.5^5}{0.6^5cdot0.4^5+0.5^5cdot0.5^5}=0.55$$

按照同样的方式,我们可以分别计算出另外四组试验中,硬币A和硬币B各自出现的概率:

组别 硬币A 硬币B
第一组 $0.45$ $0.55$
第二组 $0.80$ $0.20$
第三组 $0.73$ $0.27$
第四组 $0.35$ $0.65$
第五组 $0.65$ $0.35$

我们还是用第一组试验中算出来的$P_{A1}=0.45$和$P_{B1}=0.55$来做做文章,第一组试验的结果是$5$正$5$负,那么由硬币$A$扔出来的结果应该是:$0.455=2.25$正,$0.455=2.25$负;由硬币$B$扔出来的结果应该是:$0.555=2.75$正,$0.555=2.75$负,由此可以得到各组试验中硬币$A$和硬币$B$各自抛掷出来的结果:

组别 硬币A 硬币B
1 $正:2.25quad负:2.25$ $正:2.75quad负:2.75$
2 $正:7.2quad负:0.8$ $正:1.8quad负:0.2$
3 $正:5.84quad负:1.46$ $正:2.16quad负:0.54$
4 $正:1.4quad负:2.1$ $正:2.6quad负:3.9$
5 $正:4.55quad负:1.95$ $正:2.45quad负:1.05$
$正:21.24quad负:8.56$ $正:11.76quad负:8.44$

有了这个表,我们就能做够重新估计硬币A和硬币B正面朝上的概率了,因为此时数据是完备的,估计出的值作为新一轮的估计值:

$$theta_A^{(1)}=frac{21.24}{21.24+8.56}=0.71$$

$$theta_B^{(1)}=frac{11.76}{11.76+8.44}=0.58$$

就好像当初的$theta_A^{(0)}$和$theta_B^{(0)}$那样,此时我们有了$theta_A^{(1)}$和$theta_B^{(1)}$,就可以把上面两张表的计算过程不停的重复,不断的去计算和更新出$theta_A^{(2)},theta_B^{(2)};theta_A^{(3)},theta_B^{(3)};theta_A^{(4)},theta_B^{(4)};…theta_A^{(N)},theta_B^{(N)}$,直到参数收敛于真实的$theta_A,theta_B$

我们用代码来演示一下上述过程,观察一下最终参数的收敛情况:
代码片段:
“`
import numpy as np

在前面,我们介绍了很多例子,告诉了大家如何使用样本值去估计模型的参数,比如均值、方差等等,并且介绍了非常常用的极大似然估计方法。

比如你手上有一枚不均匀的硬币,他抛出之后正面朝上和反面朝上的概率并不相等,你想去探索硬币正面朝上的概率,那很简单,你把他抛$N$次,其中正面朝上的次数为$n_1$,那么我们就用$frac{n_1}{N}$的值作为正面朝上概率的估计。

又比如你知道,某个地区18岁成年男子的身高服从一个正态分布,那么如果你想知道这个身高正态分布的均值和方差,那也不难,我们可以随机挑选$N$个该地区的成年男子作为样本,分别统计出他们的身高$x_1,x_2,x_3,…,x_N$,通过我们之间利用极大似然估计得到的样本均值和样本方差

$$mu_{mle}=frac{1}{N}sum_{i=1}^{N}x_i\sigma^2_{mle}=frac{1}{N}sum_{i=1}^n(x_i-mu_{mle})^2$$

如果想要估计具备无偏性,按照之前讲过的知识点,做一点简单的修正即可:

$$sigma^2=frac{1}{N-1}sum_{i=1}^n(x_i-mu_{mle})^2$$

但是,如果在实际场景中,情形发生一点变化,你就会发现似乎前面非常有效的极大似然估计方法就会变得使不上劲了。

比如,现在你手上有两枚硬币,硬币$A$和硬币$B$,他们都是不均匀的,但是他们正面朝上的概率$p_A$和$p_B$并不相等,每次你从这两枚硬币随机摸出一枚硬币进行投掷(但是你并不知道取的是哪一枚),你依然记录每次抛掷的结果是正面还是反面,正面出现的次数$N_1$,反面出现的次数$N_2$,但是你能够直接依据这个数据估计出硬币$A$和硬币$B$各自正面朝上的概率吗?恐怕是不行的吧。

再比如,你还是统计某地区18岁青年的身高,但是这次的样本中,既有男生,也有女生,那么当你获取了$N$个青年的样本身高之后,能够直接去求得男生的身高均值和方差以及女生的身高均值和方差吗?显然是不行的,因为男生和女生的身高各自服从不同参数下的高斯分布。

为什么这两个情况下,直接去用极大似然估计的方法去估计参数就不行了呢?是因为这两个场景下,模型都变成了混合模型,不光有观测变量,更出现了一个隐含变量。

一般而言,第$i$个样本的观测变量记作$x_i$,隐含变量记作$z_i$

比如抛硬币的例子中,每次抛硬币的正反是观测变量,但是到底这次抛的硬币$A$还是硬币$B$,我们不知道,这是一个隐含变量。

又比如量身高的例子,我们每次看到的身高值是观测变量,而这个样本到底是属于男生的还是女生的,就是一个隐含变量。

那么这种混合模型,不能直接用极大似然估计法去估计,那我们就考虑采用迭代法去慢慢的试,这就是我们贯穿整个第二章的$EM$方法,说实话整个方法的公式和计算技巧有点复杂,这一小节,我们暂时不引入公式,我们针对抛硬币的例子,来做一个简单的计算,目的是让大家感性的认识一下,在有隐变量的情况下,迭代探索参数究竟是一个什么样的过程。这一节里不涉及具体的公式。

好,我们下面具体来描述一下抛硬币的背景:

我们有不均匀的硬币$A$和硬币$B$,我们重复做5组试验,每一次试验的过程是这样的,我们任取其中一枚硬币,连续抛掷10次,记录正反的次数,5组试验的结果如下:

组别 正面次数 反面次数
第一组 $5$ $5$
第二组 $9$ $1$
第三组 $8$ $2$
第四组 $4$ $6$
第五组 $7$ $3$

那么,硬币$A$和硬币$B$正面向上的概率$theta_A$和$theta_B$各是多少?

目前问题的症结就在于我们不知道每一组到底扔的是哪一枚硬币,我们先插一句嘴,如果我现在告诉你,第一组和第四组试验我们用的是硬币$B$,第二、三、五组试验用的是硬币$A$,那你会做吗?

那就好办了,对于硬币$A$参数估计,我们直接拿第2、3、5组试验数据进行即可:

$theta_A=frac{9+8+7}{30}=0.8$

然后那第1、4组试验去估计硬币$B$:

$theta_B=frac{4+5}{20}=0.45$

而这里,一步肯定是估计不出参数的,我们使用迭代法,也就是准备用多轮操作逐步接近真实的$theta_A$和$theta_B$

我们先给一个初值$theta_A^{(0)}$和$theta_B^{(0)}$,我们先随意给一个值:

$$theta_A^{(0)}=0.6,theta_B^{(0)}=0.5$$

那么基于这个预设的参数,在第一组试验中我们设硬币$A$出现的概率为$P_{A1}$,硬币$B$出现的概率为$P_{B1}$

如果在试验1中,我们完全用硬币$A$来抛,抛出5正5反的概率为:

$$theta_{A}^{(0)5}(1-theta_{A}^{(0)})^5=0.6^5cdot0.4^5=0.0007962624$$

同理在试验1中,我们完全用硬币$B$来抛,抛出5正5反的概率为:

$$theta_{B}^{(0)5}(1-theta_{B}^{(0)})^5=0.5^5cdot0.5^5=0.0009765625$$

那么第一组试验中,是硬币$A$和硬币$B$的概率分别为:

$$P_{A1}=frac{0.6^5cdot0.4^5}{0.6^5cdot0.4^5+0.5^5cdot0.5^5}=0.45$$

$$P_{B1}=frac{0.5^5cdot0.5^5}{0.6^5cdot0.4^5+0.5^5cdot0.5^5}=0.55$$

按照同样的方式,我们可以分别计算出另外四组试验中,硬币A和硬币B各自出现的概率:

组别 硬币A 硬币B
第一组 $0.45$ $0.55$
第二组 $0.80$ $0.20$
第三组 $0.73$ $0.27$
第四组 $0.35$ $0.65$
第五组 $0.65$ $0.35$

我们还是用第一组试验中算出来的$P_{A1}=0.45$和$P_{B1}=0.55$来做做文章,第一组试验的结果是$5$正$5$负,那么由硬币$A$扔出来的结果应该是:$0.455=2.25$正,$0.455=2.25$负;由硬币$B$扔出来的结果应该是:$0.555=2.75$正,$0.555=2.75$负,由此可以得到各组试验中硬币$A$和硬币$B$各自抛掷出来的结果:

组别 硬币A 硬币B
1 $正:2.25quad负:2.25$ $正:2.75quad负:2.75$
2 $正:7.2quad负:0.8$ $正:1.8quad负:0.2$
3 $正:5.84quad负:1.46$ $正:2.16quad负:0.54$
4 $正:1.4quad负:2.1$ $正:2.6quad负:3.9$
5 $正:4.55quad负:1.95$ $正:2.45quad负:1.05$
$正:21.24quad负:8.56$ $正:11.76quad负:8.44$

有了这个表,我们就能做够重新估计硬币A和硬币B正面朝上的概率了,因为此时数据是完备的,估计出的值作为新一轮的估计值:

$$theta_A^{(1)}=frac{21.24}{21.24+8.56}=0.71$$

$$theta_B^{(1)}=frac{11.76}{11.76+8.44}=0.58$$

就好像当初的$theta_A^{(0)}$和$theta_B^{(0)}$那样,此时我们有了$theta_A^{(1)}$和$theta_B^{(1)}$,就可以把上面两张表的计算过程不停的重复,不断的去计算和更新出$theta_A^{(2)},theta_B^{(2)};theta_A^{(3)},theta_B^{(3)};theta_A^{(4)},theta_B^{(4)};…theta_A^{(N)},theta_B^{(N)}$,直到参数收敛于真实的$theta_A,theta_B$

我们用代码来演示一下上述过程,观察一下最终参数的收敛情况:
代码片段:
“`
import numpy as np

部分转自互联网,侵权删除联系

赞(0) 打赏
部分文章转自网络,侵权联系删除b2bchain区块链学习技术社区 » 【算法模型】S07E08 EM算法(上):含有隐变量的参数估计问题求职学习资料
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

b2b链

联系我们联系我们