我们知道生活中的很多现象,比如身高体重的分布,都满足高斯分布 (正态分布)。而高斯混合模型,则是通过多个高斯分布的叠加,实现对数据集的拟合。
如果学过概率论,我们知道高斯分布的公式如下:
X ∼ N ( μ , σ 2 ) X \sim N(\mu,\sigma^2) X∼N(μ,σ2)
生活中的很多现象,比如身高,都近似一种高斯分布:
考虑一个问题,如果有一组数据,其中包括男性和女性的身高,比起使用一个高斯分布,使用两个高斯分布拟合的效果是不是更好呢?
然而,我们只知道数据集,并不知道分布的参数,高斯混合要做的,就是把每个高斯分布的参数求出来。
多元高斯分布的公式如下:
p ( x ) = 1 ( 2 π ) n 2 ∣ Σ ∣ 1 2 e − 1 2 ( x − μ ) T Σ − 1 ( x − μ ) p(x) = \frac{1}{(2\pi)^{\frac{n}{2}}|\Sigma|^{\frac{1}{2}}}e^{-\frac{1}{2}(x-\mu)^T\Sigma^{-1}(x-\mu)} p(x)=(2π)2n∣Σ∣211e−21(x−μ)TΣ−1(x−μ)
考虑数据集
编号 | 密度 | 含糖率 |
---|---|---|
1 | 0.697 | 0.460 |
2 | 0.774 | 0.376 |
3 | 0.634 | 0.264 |
4 | 0.608 | 0.318 |
5 | 0.556 | 0.215 |
6 | 0.403 | 0.237 |
7 | 0.481 | 0.149 |
8 | 0.437 | 0.211 |
9 | 0.666 | 0.091 |
10 | 0.243 | 0.267 |
首先考虑将数据集分成几类,比如分 3 类。
接下来就需要初始化 3 个类,也就是三个高斯分布的参数:
初始化三个高斯分布的权重各为 1/3
α 1 = α 2 = α 3 = 0.3333 \alpha_1=\alpha_2=\alpha_3=0.3333 α1=α2=α3=0.3333
初始化三个高斯分布的协方差矩阵,由于样本集有 2 个维度,故高斯分布也满足二维
Σ 1 = Σ 2 = Σ 3 = ( 0.1 0 0 0.1 ) \Sigma_1=\Sigma_2=\Sigma_3=\begin{pmatrix} 0.1 & 0 \\ 0 & 0.1 \end{pmatrix} Σ1=Σ2=Σ3=(0.1000.1)
随机选择 3 个样本作为 3 个高斯分布的初始参数
μ 1 = x 2 = ( 0.774 , 0.376 ) \mu_1=x_2=(0.774,0.376) μ1=x2=(0.774,0.376)
μ 2 = x 5 = ( 0.556 , 0.215 ) \mu_2=x_5=(0.556,0.215) μ2=x5=(0.556,0.215)
μ 3 = x 8 = ( 0.437 , 0.211 ) \mu_3=x_8=(0.437,0.211) μ3=x8=(0.437,0.211)
p 1 ( x 1 ) = 1 2 π ∣ Σ 1 ∣ 1 2 e − 1 2 ( x 1 − μ 1 ) T Σ 1 − 1 ( x 1 − μ 1 ) p_1(x_1) = \frac{1}{2\pi|\Sigma_1|^{\frac{1}{2}}}e^{-\frac{1}{2}(x_1-\mu_1)^T\Sigma_1^{-1}(x_1-\mu_1)} p1(x1)=2π∣Σ1∣211e−21(x1−μ1)TΣ1−1(x1−μ1)
其中
∣ Σ 1 ∣ = 0.01 |\Sigma_1|=0.01 ∣Σ1∣=0.01
x 1 − μ 1 = ( − 0.077 0.084 ) x_1-\mu_1=\begin{pmatrix} -0.077 & 0.084 \end{pmatrix} x1−μ1=(−0.0770.084)
计算得到
p 1 ( x 1 ) = 1.4915 p_1(x_1) = 1.4915 p1(x1)=1.4915
同理
p 2 ( x 1 ) = 1 2 π ∣ Σ 2 ∣ 1 2 e − 1 2 ( x 1 − μ 2 ) T Σ 1 − 1 ( x 1 − μ 2 ) p_2(x_1) = \frac{1}{2\pi|\Sigma_2|^{\frac{1}{2}}}e^{-\frac{1}{2}(x_1-\mu_2)^T\Sigma_1^{-1}(x_1-\mu_2)} p2(x1)=2π∣Σ2∣211e−21(x1−μ2)TΣ1−1(x1−μ2)
计算得到
p 2 ( x 1 ) = 1.0673 p_2(x_1)=1.0673 p2(x1)=1.0673
p 3 ( x 1 ) = 1 2 π ∣ Σ 3 ∣ 1 2 e − 1 2 ( x 1 − μ 3 ) T Σ 1 − 1 ( x 1 − μ 3 ) p_3(x_1) = \frac{1}{2\pi|\Sigma_3|^{\frac{1}{2}}}e^{-\frac{1}{2}(x_1-\mu_3)^T\Sigma_1^{-1}(x_1-\mu_3)} p3(x1)=2π∣Σ3∣211e−21(x1−μ3)TΣ1−1(x1−μ3)
= 0.6998 =0.6998 =0.6998
经过对 10 个样本的计算,得到如下矩阵:
([[1.49150105, 1.06734902, 0.6998446 ],
[1.59154943, 1.10239273, 0.69713097],
[1.35525283, 1.5254402 , 1.22695811],
[1.36357241, 1.48905699, 1.19207803],
[1.10239273, 1.59154943, 1.45081146],
[0.72607499, 1.41233311, 1.5222782 ],
[0.80076963, 1.51407248, 1.57621756],
[0.69713097, 1.45081146, 1.59154943],
[1.00026306, 1.38725646, 1.20404055],
[0.36622698, 0.96208067, 1.22986945]])
即第 1 列的每个值 * α 1 \alpha_1 α1,第 2 列的每个值 * α 2 \alpha_2 α2,第 3 列的每个值 * α 3 \alpha_3 α3
对于第一个样本,得到:
γ 1 ( x 1 ) = α 1 ⋅ p 1 ( x 1 ) = 0.4972 \gamma_1(x_1) = \alpha_1 \cdot p_1(x_1)=0.4972 γ1(x1)=α1⋅p1(x1)=0.4972
γ 2 ( x 1 ) = α 1 ⋅ p 1 ( x 1 ) = 0.3558 \gamma_2(x_1) = \alpha_1 \cdot p_1(x_1)=0.3558 γ2(x1)=α1⋅p1(x1)=0.3558
γ 3 ( x 1 ) = α 1 ⋅ p 1 ( x 1 ) = 0.2333 \gamma_3(x_1) = \alpha_1 \cdot p_1(x_1)=0.2333 γ3(x1)=α1⋅p1(x1)=0.2333
对于 10 个样本,得到如下矩阵:
([[0.49716702, 0.35578301, 0.23328153],
[0.53051648, 0.36746424, 0.23237699],
[0.45175094, 0.50848007, 0.40898604],
[0.45452414, 0.49635233, 0.39735934],
[0.36746424, 0.53051648, 0.48360382],
[0.242025 , 0.4707777 , 0.50742607],
[0.26692321, 0.50469083, 0.52540585],
[0.23237699, 0.48360382, 0.53051648],
[0.33342102, 0.46241882, 0.40134685],
[0.12207566, 0.32069356, 0.40995648]])
即对于每一个样本:
γ j ( x ) = γ j ( x ) ∑ i γ i ( x ) \gamma_j(x)=\frac{\gamma_j(x)}{\sum_i\gamma_i(x)} γj(x)=∑iγi(x)γj(x)
对于第一个样本:
γ 1 ( x 1 ) = γ 1 ( x 1 ) γ 1 ( x 1 ) + γ 2 ( x 1 ) + γ 3 ( x 1 ) = 0.4577 \gamma_1(x_1)=\frac{\gamma_1(x_1)}{\gamma_1(x_1)+\gamma_2(x_1)+\gamma_3(x_1)}=0.4577 γ1(x1)=γ1(x1)+γ2(x1)+γ3(x1)γ1(x1)=0.4577
γ 2 ( x 1 ) = γ 2 ( x 1 ) γ 1 ( x 1 ) + γ 2 ( x 1 ) + γ 3 ( x 1 ) = 0.3275 \gamma_2(x_1)=\frac{\gamma_2(x_1)}{\gamma_1(x_1)+\gamma_2(x_1)+\gamma_3(x_1)}=0.3275 γ2(x1)=γ1(x1)+γ2(x1)+γ3(x1)γ2(x1)=0.3275
γ 3 ( x 1 ) = γ 3 ( x 1 ) γ 1 ( x 1 ) + γ 2 ( x 1 ) + γ 3 ( x 1 ) = 0.2148 \gamma_3(x_1)=\frac{\gamma_3(x_1)}{\gamma_1(x_1)+\gamma_2(x_1)+\gamma_3(x_1)}=0.2148 γ3(x1)=γ1(x1)+γ2(x1)+γ3(x1)γ3(x1)=0.2148
对于每一个样本,得到如下矩阵:
([[0.45769893, 0.32753883, 0.21476225],
[0.46933504, 0.32508669, 0.20557828],
[0.32993377, 0.37136557, 0.29870066],
[0.3371251 , 0.36814949, 0.2947254 ],
[0.26597304, 0.38399132, 0.35003563],
[0.19834395, 0.38581102, 0.41584503],
[0.20579731, 0.38911572, 0.40508697],
[0.18642398, 0.38797021, 0.4256058 ],
[0.27850378, 0.38625456, 0.33524166],
[0.14315935, 0.37608056, 0.48076009]])
α \alpha α 相当于每个聚类概率的均值,更新公式如下:
α i = γ i ∑ j γ j \alpha_i = \frac{\gamma_i}{\sum_j\gamma_j} αi=∑jγjγi
更新后的 α \alpha α:
α 1 = 0.28722943 \alpha_1=0.28722943 α1=0.28722943
α 2 = 0.3701364 \alpha_2=0.3701364 α2=0.3701364
α 3 = 0.34263418 \alpha_3=0.34263418 α3=0.34263418
μ \mu μ 即 x 的均值,更新公式如下:
μ i , j = ∑ i x i , j ⋅ γ i , j ∑ i γ i , j \mu_{i,j}=\frac{\sum_i x_{i,j}\cdot\gamma_{i,j}}{\sum_i\gamma_{i,j}} μi,j=∑iγi,j∑ixi,j⋅γi,j
即对于每一个聚类:其 μ \mu μ = 该聚类的 γ \gamma γ * 对应的样本 / 该聚类的 γ \gamma γ 之和
对于第一个样本:
∑ i γ i , 1 = 2.8723 \sum_i\gamma_{i,1} = 2.8723 i∑γi,1=2.8723
∑ i x i , 1 γ i , 1 = 1.7250 \sum_i x_{i,1}\gamma_{i,1} = 1.7250 i∑xi,1γi,1=1.7250
故
μ 1 , 1 = ∑ i x i , 1 γ i , 1 ∑ i γ i , 1 = 0.6006 \mu_{1,1} = \frac{\sum_ix_{i,1}\gamma_{i,1}}{\sum_i\gamma_{i,1}}=0.6006 μ1,1=∑iγi,1∑ixi,1γi,1=0.6006
同理
μ 1 , 2 = ∑ i x i , 2 γ i , 1 ∑ i γ i , 1 = 0.2811 \mu_{1,2} = \frac{\sum_ix_{i,2}\gamma_{i,1}}{\sum_i\gamma_{i,1}}=0.2811 μ1,2=∑iγi,1∑ixi,2γi,1=0.2811
对于每一个样本,求得矩阵:
([[0.60055553, 0.28114106],
[0.54399246, 0.24676209],
[0.51381731, 0.23498059]])
更新公式如下:
Σ i = ∑ j ( x j − μ i ) T ( x j − μ i ) γ i , j ∑ j γ i , j \Sigma_i=\frac{\sum_j(x_j-\mu_i)^T(x_j-\mu_i)\gamma_{i,j}}{\sum_j\gamma_{i,j}} Σi=∑jγi,j∑j(xj−μi)T(xj−μi)γi,j
更新后的 Σ 1 \Sigma_1 Σ1:
[[0.01011193, 0.00593932],
[0.00593932, 0.01346392]]
更新后的 Σ 2 \Sigma_2 Σ2:
[[0.00311919, 0.0047306 ],
[0.0047306 , 0.02108242]]
更新后的 Σ 3 \Sigma_3 Σ3:
[[0.01032781, 0.00330684],
[0.00330684, 0.01090279]]
按照上面的顺序,进行多次迭代更新,最终根据概率密度可以得到分类结果:
后的 Σ 1 \Sigma_1 Σ1:
[[0.01011193, 0.00593932],
[0.00593932, 0.01346392]]
更新后的 Σ 2 \Sigma_2 Σ2:
[[0.00311919, 0.0047306 ],
[0.0047306 , 0.02108242]]
更新后的 Σ 3 \Sigma_3 Σ3:
[[0.01032781, 0.00330684],
[0.00330684, 0.01090279]]
按照上面的顺序,进行多次迭代更新,最终根据概率密度可以得到分类结果: