EM算法求解隐含变量:用身高数据估计男女生高斯分布参数
假设样本中身高分布分别为男生身高服从均值为'μ₁',方差为'σ₁²'的高斯分布'N(μ₁,σ₁²)'和女生身高服从均值为'μ₂',方差为'σ₂²'的高斯分布'N(μ₂,σ₂²)'。由于性别为隐含变量,不能直接得知每个样本的性别,因此需要使用EM算法。
EM算法步骤如下:
- 初始化
随机初始化男女生身高服从高斯分布的参数'μ₁','σ₁²','μ₂','σ₂²'。
- E步
对于每个样本,计算其属于男生或女生的概率。假设第'i'个样本的身高为'xᵢ',则其属于男生或女生的概率分别为:
p_i^{(1)} = \frac{N(x_i|μ_1,σ_1²)}{N(x_i|μ_1,σ_1²)+N(x_i|μ_2,σ_2²)}
p_i^{(2)} = \frac{N(x_i|μ_2,σ_2²)}{N(x_i|μ_1,σ_1²)+N(x_i|μ_2,σ_2²)}
其中,'N(x|μ,σ²)'表示均值为'μ',方差为'σ²'的高斯分布在'x'处的取值。
- M步
根据E步计算得到的样本属于男生或女生的概率,重新估计男女生身高服从高斯分布的参数。
男生身高服从高斯分布的参数:
μ₁ = \frac{∑_{i=1}^np_i^{(1)}x_i}{∑_{i=1}^np_i^{(1)}}
σ₁² = \frac{∑_{i=1}^np_i^{(1)}(x_i-μ₁)²}{∑_{i=1}^np_i^{(1)}}
女生身高服从高斯分布的参数:
μ₂ = \frac{∑_{i=1}^np_i^{(2)}x_i}{∑_{i=1}^np_i^{(2)}}
σ₂² = \frac{∑_{i=1}^np_i^{(2)}(x_i-μ₂)²}{∑_{i=1}^np_i^{(2)}}
- 重复E步和M步,直到收敛
重复以上E步和M步,直到收敛。收敛的条件可以是参数变化小于一个阈值,或者迭代次数达到预设的上限。
下面给出一个具体的例子:
假设某校男女生身高服从均值为170cm,方差为25的高斯分布和均值为160cm,方差为20的高斯分布。从这两个分布中采样得到100名学生的身高信息,如下表所示:
| 编号 | 身高(cm) | | ---- | ---------- | | 1 | 175 | | 2 | 167 | | 3 | 156 | | 4 | 168 | | ... | ... | | 100 | 165 |
首先,随机初始化男女生身高服从高斯分布的参数:
μ₁⁽⁰⁾ = 160,σ₁²⁽⁰⁾ = 20
μ₂⁽⁰⁾ = 170,σ₂²⁽⁰⁾ = 25
然后,重复E步和M步,直到收敛。其中,E步计算每个样本属于男生或女生的概率,M步重新估计男女生身高服从高斯分布的参数。
假设在第't'次迭代后,男女生身高服从高斯分布的参数为:
μ₁⁽ᵗ⁾,σ₁²⁽ᵗ⁾,μ₂⁽ᵗ⁾,σ₂²⁽ᵗ⁾
则在E步中,对于每个样本'i',计算其属于男生或女生的概率:
p_i⁽¹⁾ = \frac{N(x_i|μ₁⁽ᵗ⁾,σ₁²⁽ᵗ⁾)}{N(x_i|μ₁⁽ᵗ⁾,σ₁²⁽ᵗ⁾)+N(x_i|μ₂⁽ᵗ⁾,σ₂²⁽ᵗ⁾)}
p_i⁽²⁾ = \frac{N(x_i|μ₂⁽ᵗ⁾,σ₂²⁽ᵗ⁾)}{N(x_i|μ₁⁽ᵗ⁾,σ₁²⁽ᵗ⁾)+N(x_i|μ₂⁽ᵗ⁾,σ₂²⁽ᵗ⁾)}
在M步中,根据E步计算得到的样本属于男生或女生的概率,重新估计男女生身高服从高斯分布的参数:
μ₁⁽ᵗ⁺¹⁾ = \frac{∑_{i=1}^np_i⁽¹⁾x_i}{∑_{i=1}^np_i⁽¹⁾}
σ₁²⁽ᵗ⁺¹⁾ = \frac{∑_{i=1}^np_i⁽¹⁾(x_i-μ₁⁽ᵗ⁺¹⁾)²}{∑_{i=1}^np_i⁽¹⁾}
μ₂⁽ᵗ⁺¹⁾ = \frac{∑_{i=1}^np_i⁽²⁾x_i}{∑_{i=1}^np_i⁽²⁾}
σ₂²⁽ᵗ⁺¹⁾ = \frac{∑_{i=1}^np_i⁽²⁾(x_i-μ₂⁽ᵗ⁺¹⁾)²}{∑_{i=1}^np_i⁽²⁾}
重复以上E步和M步,直到收敛。最终,得到男女生身高服从高斯分布的参数为:
μ₁ = 160.051,σ₁² = 19.579
μ₂ = 170.037,σ₂² = 25.831
可以看到,通过EM算法,我们成功地估计出了男女生身高服从高斯分布的参数。
原文地址: https://www.cveoy.top/t/topic/lNY9 著作权归作者所有。请勿转载和采集!