混合高斯模型(GMM)与EM算法
Question
有一个数据集 D = { x 1 , x 2 , . . . , x N } D=\{x_1, x_2, ..., x_N\} D={x1,x2,...,xN}中的每个数据点是这样产生的,先从K个类别中选择一个类别,然后从该类别对应的数据产生分布中产生数据点。若K选1的对应的分布是Multinoulli分布,每个类别对应的数据产生分布是不同的高斯分布,估计数据点x对应的分布。
分析
这个问题对应的模型就是一个混合高斯模型,具体的数据产生过程如下:
我们引入了隐变量z, 假设模型的参数跟图中的定义一样,我们可以得到:
p
(
x
∣
α
,
μ
,
Σ
)
=
∑
k
=
1
K
α
k
N
(
x
∣
μ
k
,
Σ
k
)
,
其
中
∑
k
α
k
=
1
p(x | \alpha, \mu, \Sigma) = \sum_{k=1}^{K} \alpha_k \mathrm{N}(x | \mu_k, \Sigma_k), \quad \quad 其中\sum_k \alpha_k = 1
p(x∣α,μ,Σ)=k=1∑KαkN(x∣μk,Σk),其中k∑αk=1
这就是混合高斯模型对应的观察数据概率分布,它是一个无监督模型的聚类模型,每个类别对应的后验分量
γ
k
=
α
k
N
(
x
∣
μ
k
,
Σ
k
)
∑
k
=
1
K
α
k
N
(
x
∣
μ
k
,
Σ
k
)
\gamma_k = \frac{\alpha_k \mathrm{N}(x | \mu_k, \Sigma_k)}{\sum_{k=1}^{K} \alpha_k \mathrm{N}(x | \mu_k, \Sigma_k)}
γk=∑k=1KαkN(x∣μk,Σk)αkN(x∣μk,Σk)
表示该点属于某个类别的概率,要想得到某个点对应的分量,我们必须先根据数据集估计出模型参数 θ = { α , μ , Σ } \theta = \{\alpha,\mu, \Sigma\} θ={α,μ,Σ},这就是上面问题的目标。
求解
要估计出模型参数,对于含隐变量的无监督模型,绝大部分情况下都是用EM算法求解。
E步(E-step)
其中m时数据点的维度。
E步就是在老的参数的基础上求出隐藏数据集的分布,并计算联合变量分布对数的期望。
M步 (M-step)
M步时最大化E步期望,获得新的参数。
Algorithm
Require: 数据集D,类别数K。
Step 1: 初始化参数α, μ, Σ;
Step 2: 执行E步,获得Eγik, Enk;
Step 3: 执行M步,更新α, μ, Σ;
Step 4: 重复E步和M步,知道F收敛或者α, μ, Σ收敛。