精华内容
下载资源
问答
  • GMM

    千次阅读 2019-10-12 15:11:03
    import numpy as np from sklearn.mixture import GaussianMixture file="/home/lijing/R/mature/A549/feature/ANF/neg.csv" X = np.loadtxt(open(file, "r"), delimiter=",", skiprows=...gmm = GaussianMixture(n_...
    import numpy as np
    from sklearn.mixture import GaussianMixture
    file="/home/lijing/R/mature/A549/feature/ANF/neg.csv"
    X = np.loadtxt(open(file, "r"), delimiter=",", skiprows=0)
    gmm = GaussianMixture(n_components=5)
    gmm.fit(X)
    labels = gmm.predict(X)
    np.savetxt(path + "/home/lijing/R/featureOri/label/matureA549label.txt", labels, delimiter=",")
    print(labels)
    
    
    
    
    展开全文
  • 高斯混合模型(GMM)及其EM算法的理解

    万次阅读 多人点赞 2017-03-02 18:43:36
    一个例子高斯混合模型(Gaussian Mixed Model)指的是多个高斯分布函数的线性组合,理论上GMM可以拟合出任意类型的分布,通常用于解决同一集合下的数据包含多个不同的分布的情况(或者是同一类分布但参数不一样,...

    一个例子

    高斯混合模型(Gaussian Mixed Model)指的是多个高斯分布函数的线性组合,理论上GMM可以拟合出任意类型的分布,通常用于解决同一集合下的数据包含多个不同的分布的情况(或者是同一类分布但参数不一样,或者是不同类型的分布,比如正态分布和伯努利分布)。

    如图1,图中的点在我们看来明显分成两个聚类。这两个聚类中的点分别通过两个不同的正态分布随机生成而来。但是如果没有GMM,那么只能用一个的二维高斯分布来描述图1中的数据。图1中的椭圆即为二倍标准差的正态分布椭圆。这显然不太合理,毕竟肉眼一看就觉得应该把它们分成两类。

    图1
    图1

    这时候就可以使用GMM了!如图2,数据在平面上的空间分布和图1一样,这时使用两个二维高斯分布来描述图2中的数据,分别记为 N ( μ 1 , Σ 1 ) \mathcal{N}(\boldsymbol{\mu}_1, \boldsymbol{\Sigma}_1) N(μ1,Σ1) N ( μ 2 , Σ 2 ) \mathcal{N}(\boldsymbol{\mu}_2, \boldsymbol{\Sigma}_2) N(μ2,Σ2). 图中的两个椭圆分别是这两个高斯分布的二倍标准差椭圆。可以看到使用两个二维高斯分布来描述图中的数据显然更合理。实际上图中的两个聚类的中的点是通过两个不同的正态分布随机生成而来。如果将两个二维高斯分布 N ( μ 1 , Σ 1 ) \mathcal{N}(\boldsymbol{\mu_1}, \boldsymbol{\Sigma}_1) N(μ1,Σ1) N ( μ 2 , Σ 2 ) \mathcal{N}(\boldsymbol{\mu}_2, \boldsymbol{\Sigma}_2) N(μ2,Σ2)合成一个二维的分布,那么就可以用合成后的分布来描述图2中的所有点。最直观的方法就是对这两个二维高斯分布做线性组合,用线性组合后的分布来描述整个集合中的数据。这就是高斯混合模型(GMM)。

    图2
    图2

    高斯混合模型(GMM)

    设有随机变量 X \boldsymbol{X} X,则混合高斯模型可以用下式表示:
    p ( x ) = ∑ k = 1 K π k N ( x ∣ μ k , Σ k ) p(\boldsymbol{x}) = \sum_{k=1}^K\pi_k \mathcal{N}(\boldsymbol{x}|\boldsymbol{\mu}_k, \boldsymbol{\Sigma}_k) p(x)=k=1KπkN(xμk,Σk)

    其中 N ( x ∣ μ k , Σ k ) \mathcal{N}(\boldsymbol{x}|\boldsymbol{\mu}_k, \boldsymbol{\Sigma}_k) N(xμk,Σk)称为混合模型中的第 k k k分量(component)。如前面图2中的例子,有两个聚类,可以用两个二维高斯分布来表示,那么分量数 K = 2 K = 2 K=2. π k \pi_k πk混合系数(mixture coefficient),且满足:
    ∑ k = 1 K π k = 1 \sum_{k=1}^K\pi_k = 1 k=1Kπk=1
    0 ≤ π k ≤ 1 0 \leq \pi_k \leq 1 0πk1

    实际上,可以认为 π k \pi_k πk就是每个分量 N ( x ∣ μ k , Σ k ) \mathcal{N}(\boldsymbol{x}|\boldsymbol{\mu}_k, \boldsymbol{\Sigma}_k) N(xμk,Σk)的权重。

    GMM的应用

    GMM常用于聚类。如果要从 GMM 的分布中随机地取一个点的话,实际上可以分为两步:首先随机地在这 K 个 Component 之中选一个,每个 Component 被选中的概率实际上就是它的系数 π k \pi_k πk ,选中 Component 之后,再单独地考虑从这个 Component 的分布中选取一个点就可以了──这里已经回到了普通的 Gaussian 分布,转化为已知的问题。

    将GMM用于聚类时,假设数据服从混合高斯分布(Mixture Gaussian Distribution),那么只要根据数据推出 GMM 的概率分布来就可以了;然后 GMM 的 K 个 Component 实际上对应 K K K个 cluster 。根据数据来推算概率密度通常被称作 density estimation 。特别地,当我已知(或假定)概率密度函数的形式,而要估计其中的参数的过程被称作『参数估计』。

    例如图2的例子,很明显有两个聚类,可以定义 K = 2 K=2 K=2. 那么对应的GMM形式如下:
    p ( x ) = π 1 N ( x ∣ μ 1 , Σ 1 ) + π 2 N ( x ∣ μ 2 , Σ 2 ) p(\boldsymbol{x}) =\pi_1 \mathcal{N}(\boldsymbol{x}|\boldsymbol{\mu}_1, \boldsymbol{\Sigma}_1) + \pi_2 \mathcal{N}(\boldsymbol{x}|\boldsymbol{\mu}_2, \boldsymbol{\Sigma}_2) p(x)=π1N(xμ1,Σ1)+π2N(xμ2,Σ2)

    上式中未知的参数有六个: ( π 1 , μ 1 , Σ 1 ; π 2 , μ 2 , Σ 2 ) (\pi_1, \boldsymbol{\mu}_1, \boldsymbol{\Sigma}_1; \pi_2, \boldsymbol{\mu}_2, \boldsymbol{\Sigma}_2) (π1,μ1,Σ1;π2,μ2,Σ2). 之前提到GMM聚类时分为两步,第一步是随机地在这 K K K个分量中选一个,每个分量被选中的概率即为混合系数 π k \pi_k πk. 可以设定 π 1 = π 2 = 0.5 \pi_1 = \pi_2 = 0.5 π1=π2=0.5,表示每个分量被选中的概率是0.5,即从中抽出一个点,这个点属于第一类的概率和第二类的概率各占一半。但实际应用中事先指定 π k \pi_k πk的值是很笨的做法,当问题一般化后,会出现一个问题:当从图2中的集合随机选取一个点,怎么知道这个点是来自 N ( x ∣ μ 1 , Σ 1 ) N(\boldsymbol{x}|\boldsymbol{\mu}_1, \boldsymbol{\Sigma}_1) N(xμ1,Σ1)还是 N ( x ∣ μ 2 , Σ 2 ) N(\boldsymbol{x}|\boldsymbol{\mu}_2, \boldsymbol{\Sigma}_2) N(xμ2,Σ2)呢?换言之怎么根据数据自动确定 π 1 \pi_1 π1 π 2 \pi_2 π2的值?这就是GMM参数估计的问题。要解决这个问题,可以使用EM算法。通过EM算法,我们可以迭代计算出GMM中的参数: ( π k , x k , Σ k ) (\pi_k, \boldsymbol{x}_k, \boldsymbol{\Sigma}_k) (πk,xk,Σk).

    GMM参数估计过程

    GMM的贝叶斯理解

    在介绍GMM参数估计之前,先改写GMM的形式,改写之后的GMM模型可以方便地使用EM估计参数。GMM的原始形式如下:

    p ( x ) = ∑ k = 1 K π k N ( x ∣ μ k , Σ k ) (1) p(\boldsymbol{x}) = \sum_{k=1}^K\pi_k \mathcal{N}(\boldsymbol{x}|\boldsymbol{\mu}_k, \boldsymbol{\Sigma}_k) \tag{1} p(x)=k=1KπkN(xμk,Σk)(1)

    前面提到 π k \pi_k πk可以看成是第 k k k类被选中的概率。我们引入一个新的 K K K维随机变量 z \boldsymbol{z} z. z k ( 1 ≤ k ≤ K ) z_k (1 \leq k \leq K) zk(1kK)只能取0或1两个值; z k = 1 z_k = 1 zk=1表示第 k k k类被选中的概率,即: p ( z k = 1 ) = π k p(z_k = 1) = \pi_k p(zk=1)=πk;如果 z k = 0 z_k = 0 zk=0表示第 k k k类没有被选中的概率。更数学化一点, z k z_k zk要满足以下两个条件:
    z k ∈ { 0 , 1 } z_k \in \{0,1\} zk{0,1}
    ∑ K z k = 1 \sum_K z_k = 1 Kzk=1

    例如图2中的例子,有两类,则 z \boldsymbol{z} z的维数是2. 如果从第一类中取出一个点,则 z = ( 1 , 0 ) \boldsymbol{z} = (1, 0) z=(1,0);,如果从第二类中取出一个点,则 z = ( 0 , 1 ) \boldsymbol{z} = (0, 1) z=(0,1).

    z k = 1 z_k=1 zk=1的概率就是 π k \pi_k πk,假设 z k z_k zk之间是独立同分布的(iid),我们可以写出 z \boldsymbol{z} z的联合概率分布形式,就是连乘:

    p ( z ) = p ( z 1 ) p ( z 2 ) . . . p ( z K ) = ∏ k = 1 K π k z k (2) p(\boldsymbol{z}) = p(z_1) p(z_2)...p(z_K) = \prod_{k=1}^K \pi_k^{z_k} \tag{2} p(z)=p(z1)p(z2)...p(zK)=k=1Kπkzk(2)

    因为 z k z_k zk只能取0或1,且 z \boldsymbol{z} z中只能有一个 z k z_k zk为1而其它 z j ( j ≠ k ) z_j (j\neq k) zj(j=k)全为0,所以上式是成立的。

    图2中的数据可以分为两类,显然,每一類中的数据都是服从正态分布的。这个叙述可以用条件概率来表示:
    p ( x ∣ z k = 1 ) = N ( x ∣ μ k , Σ k ) p(\boldsymbol{x}|z_k = 1) = \mathcal{N}(\boldsymbol{x}|\boldsymbol{\mu}_k, \boldsymbol{\Sigma}_k) p(xzk=1)=N(xμk,Σk)
    即第 k k k类中的数据服从正态分布。进而上式有可以写成如下形式:
    p ( x ∣ z ) = ∏ k = 1 K N ( x ∣ μ k , Σ k ) z k (3) p(\boldsymbol{x}| \boldsymbol{z}) = \prod_{k=1}^K \mathcal{N}(\boldsymbol{x}|\boldsymbol{\mu}_k, \boldsymbol{\Sigma}_k)^{z_k} \tag{3} p(xz)=k=1KN(xμk,Σk)zk(3)

    上面分别给出了 p ( z ) p(\boldsymbol{z}) p(z) p ( x ∣ z ) p(\boldsymbol{x}| \boldsymbol{z}) p(xz)的形式,根据条件概率公式,可以求出 p ( x ) p(\boldsymbol{x}) p(x)的形式:

    p ( x ) = ∑ z p ( z ) p ( x ∣ z ) = ∑ z ( ∏ k = 1 K π k z k N ( x ∣ μ k , Σ k ) z k ) = ∑ k = 1 K π k N ( x ∣ μ k , Σ k ) (4) \begin{aligned} p(\boldsymbol{x}) &= \sum_{\boldsymbol{z}} p(\boldsymbol{z}) p(\boldsymbol{x}| \boldsymbol{z}) \\ &= \sum_{\boldsymbol{z}} \left(\prod_{k=1}^K \pi_k^{z_k} \mathcal{N}(\boldsymbol{x}|\boldsymbol{\mu}_k, \boldsymbol{\Sigma}_k)^{z_k} \right ) \\ &= \sum_{k=1}^K \pi_k \mathcal{N}(\boldsymbol{x}|\boldsymbol{\mu}_k, \boldsymbol{\Sigma}_k) \end{aligned} \tag{4} p(x)=zp(z)p(xz)=z(k=1KπkzkN(xμk,Σk)zk)=k=1KπkN(xμk,Σk)(4)

    (注:上式第二个等号,对 z \boldsymbol{z} z求和,实际上就是 ∑ k = 1 K \sum_{k=1}^K k=1K。又因为对某个 k k k,只要 i ≠ k i \ne k i=k,则有 z i = 0 z_i = 0 zi=0,所以 z k = 0 z_k=0 zk=0的项为1,可省略,最终得到第三个等号)

    可以看到GMM模型的(1)式与(4)式有一样的形式,且(4)式中引入了一个新的变量 z \boldsymbol{z} z,通常称为隐含变量(latent variable)。对于图2中的数据,『隐含』的意义是:我们知道数据可以分成两类,但是随机抽取一个数据点,我们不知道这个数据点属于第一类还是第二类,它的归属我们观察不到,因此引入一个隐含变量 z \boldsymbol{z} z来描述这个现象。

    注意到在贝叶斯的思想下, p ( z ) p(\boldsymbol{z}) p(z)是先验概率, p ( x ∣ z ) p(\boldsymbol{x}| \boldsymbol{z}) p(xz)是似然概率,很自然我们会想到求出后验概率 p ( z ∣ x ) p(\boldsymbol{z}| \boldsymbol{x}) p(zx)
    γ ( z k ) = p ( z k = 1 ∣ x ) = p ( z k = 1 ) p ( x ∣ z k = 1 ) p ( x , z k = 1 ) = p ( z k = 1 ) p ( x ∣ z k = 1 ) ∑ j = 1 K p ( z j = 1 ) p ( x ∣ z j = 1 )  (全概率公式) = π k N ( x ∣ μ k , Σ k ) ∑ j = 1 K π j N ( x ∣ μ j , Σ j )  (结合(3)、(4)) (5) \begin{aligned} \gamma(z_k) &= p(z_k = 1| \boldsymbol{x}) \\ &= \frac{p(z_k = 1) p(\boldsymbol{x}|z_k = 1)}{p(\boldsymbol{x}, z_k = 1)} \\ &= \frac{p(z_k = 1) p(\boldsymbol{x}|z_k = 1)}{\sum_{j=1}^K p(z_j = 1) p(\boldsymbol{x}|z_j = 1)} \text{ (全概率公式)}\\ &= \frac{\pi_k \mathcal{N}(\boldsymbol{x|\boldsymbol{\mu}_k, \boldsymbol{\Sigma}_k})}{\sum_{j=1}^K \pi_j \mathcal{N}(\boldsymbol{x|\boldsymbol{\mu}_j, \boldsymbol{\Sigma}_j})} \text{ (结合(3)、(4))} \end{aligned} \tag{5} γ(zk)=p(zk=1x)=p(x,zk=1)p(zk=1)p(xzk=1)=j=1Kp(zj=1)p(xzj=1)p(zk=1)p(xzk=1) (全概率公式)=j=1KπjN(xμj,Σj)πkN(xμk,Σk) (结合(3)(4))(5)

    (第2行,贝叶斯定理。关于这一行的分母,很多人有疑问,应该是 p ( x , z k = 1 ) p(\boldsymbol{x}, z_k = 1) p(x,zk=1)还是 p ( x ) p(\boldsymbol{x}) p(x),按照正常写法,应该是 p ( x ) p(\boldsymbol{x}) p(x)。但是为了强调 z k z_k zk的取值,有的书会写成 p ( x , z k = 1 ) p(\boldsymbol{x}, z_k = 1) p(x,zk=1),比如李航的《统计学习方法》,这里就约定 p ( x ) p(\boldsymbol{x}) p(x) p ( x , z k = 1 ) p(\boldsymbol{x}, z_k = 1) p(x,zk=1)是等同的)

    上式中我们定义符号 γ ( z k ) \gamma(z_k) γ(zk)来表示来表示第 k k k个分量的后验概率。在贝叶斯的观点下, π k \pi_k πk可视为 z k = 1 z_k=1 zk=1的先验概率。

    上述内容改写了GMM的形式,并引入了隐含变量 z \boldsymbol{z} z和已知 x {\boldsymbol{x}} x后的的后验概率 γ ( z k ) \gamma(z_k) γ(zk),这样做是为了方便使用EM算法来估计GMM的参数。

    EM算法估计GMM参数

    EM算法(Expectation-Maximization algorithm)分两步,第一步先求出要估计参数的粗略值,第二步使用第一步的值最大化似然函数。因此要先求出GMM的似然函数。

    假设 x = { x 1 , x 2 , . . . , x N } \boldsymbol{x} = \{\boldsymbol{x}_1, \boldsymbol{x}_2, ..., \boldsymbol{x}_N\} x={x1,x2,...,xN},对于图2, x \boldsymbol{x} x是图中所有点(每个点有在二维平面上有两个坐标,是二维向量,因此 x 1 , x 2 \boldsymbol{x}_1, \boldsymbol{x}_2 x1,x2等都用粗体表示)。GMM的概率模型如(1)式所示。GMM模型中有三个参数需要估计,分别是 π \boldsymbol{\pi} π μ \boldsymbol{\mu} μ Σ \boldsymbol{\Sigma} Σ. 将(1)式稍微改写一下:
    p ( x ∣ π , μ , Σ ) = ∑ k = 1 K π k N ( x ∣ μ k , Σ k ) (6) p(\boldsymbol{x}|\boldsymbol{\pi}, \boldsymbol{\mu}, \boldsymbol{\Sigma}) = \sum_{k=1}^K\pi_k \mathcal{N}(\boldsymbol{x}|\boldsymbol{\mu}_k, \boldsymbol{\Sigma}_k) \tag{6} p(xπ,μ,Σ)=k=1KπkN(xμk,Σk)(6)

    为了估计这三个参数,需要分别求解出这三个参数的最大似然函数。先求解 μ k \mu_k μk的最大似然函数。样本符合iid,(6)式所有样本连乘得到最大似然函数,对(6)式取对数得到对数似然函数,然后再对 μ k \boldsymbol{\mu_k} μk求导并令导数为0即得到最大似然函数。

    0 = − ∑ n = 1 N π k N ( x n ∣ μ k , Σ k ) ∑ j π j N ( x n ∣ μ j , Σ j ) Σ k − 1 ( x n − μ k ) (7) 0 = -\sum_{n=1}^N \frac{\pi_k \mathcal{N}(\boldsymbol{x}_n | \boldsymbol{\mu}_k, \boldsymbol{\Sigma}_k)}{\sum_j \pi_j \mathcal{N}(\boldsymbol{x}_n|\boldsymbol{\mu}_j, \boldsymbol{\Sigma}_j)} \boldsymbol{\Sigma}_k^{-1} (\boldsymbol{x}_n - \boldsymbol{\mu}_k) \tag{7} 0=n=1NjπjN(xnμj,Σj)πkN(xnμk,Σk)Σk1(xnμk)(7)

    注意到上式中分数的一项的形式正好是(5)式后验概率的形式。两边同乘 Σ k \boldsymbol{\Sigma}_k Σk,重新整理可以得到:
    μ k = 1 N k ∑ n = 1 N γ ( z n k ) x n (8) \boldsymbol{\mu}_k = \frac{1}{N_k}\sum_{n=1}^N \gamma(z_{nk}) \boldsymbol{x}_n \tag{8} μk=Nk1n=1Nγ(znk)xn(8)

    其中:
    N k = ∑ n = 1 N γ ( z n k ) (9) N_k = \sum_{n=1}^N \gamma(z_{nk}) \tag{9} Nk=n=1Nγ(znk)(9)

    (8)式和(9)式中, N N N表示点的数量。 γ ( z n k ) \gamma(z_{nk}) γ(znk)表示点 n n n x n \boldsymbol{x}_n xn)属于聚类 k k k的后验概率。 N k N_k Nk可以表示属于第 k k k个聚类的点的数量。那么 μ k \boldsymbol{\mu}_k μk表示所有点的加权平均,每个点的权值是 ∑ n = 1 N γ ( z n k ) \sum_{n=1}^N \gamma(z_{nk}) n=1Nγ(znk),跟第 k k k个聚类有关。

    同理求 Σ k \boldsymbol{\Sigma}_k Σk的最大似然函数,可以得到:
    Σ k = 1 N k ∑ n = 1 N γ ( z n k ) ( x n − μ k ) ( x n − μ k ) T (10) \boldsymbol{\Sigma}_k = \frac{1}{N_k} \sum_{n=1}^N \gamma(z_{nk}) (x_n - \boldsymbol{\mu}_k)(x_n - \boldsymbol{\mu}_k)^T \tag{10} Σk=Nk1n=1Nγ(znk)(xnμk)(xnμk)T(10)

    最后剩下 π k \pi_k πk的最大似然函数。注意到 π k \pi_k πk有限制条件 ∑ k = 1 K π k = 1 \sum_{k=1}^K\pi_k = 1 k=1Kπk=1,因此我们需要加入拉格朗日算子:
    ln ⁡ p ( x ∣ π , μ , Σ ) + λ ( ∑ k = 1 K π k − 1 ) \ln p(\boldsymbol{x}|\boldsymbol{\pi}, \boldsymbol{\mu}, \boldsymbol{\Sigma}) + \lambda(\sum_{k=1}^K \pi_k -1) lnp(xπ,μ,Σ)+λ(k=1Kπk1)

    求上式关于 π k \pi_k πk的最大似然函数,得到:
    0 = ∑ n = 1 N N ( x n ∣ μ k , Σ k ) ∑ j π j N ( x n ∣ μ j , Σ j ) + λ (11) 0 = \sum_{n=1}^N \frac{\mathcal{N}(\boldsymbol{x}_n | \boldsymbol{\mu}_k, \boldsymbol{\Sigma}_k)}{\sum_j \pi_j \mathcal{N}(\boldsymbol{x}_n|\boldsymbol{\mu}_j, \boldsymbol{\Sigma}_j)} + \lambda \tag{11} 0=n=1NjπjN(xnμj,Σj)N(xnμk,Σk)+λ(11)

    上式两边同乘 π k \pi_k πk,我们可以做如下推导:

    0 = ∑ n = 1 N π k N ( x n ∣ μ k , Σ k ) ∑ j π j N ( x n ∣ μ j , Σ j ) + λ π k (11.1) 0 = \sum_{n=1}^N \frac{\pi_k \mathcal{N}(\boldsymbol{x}_n | \boldsymbol{\mu}_k, \boldsymbol{\Sigma}_k)}{\sum_j \pi_j \mathcal{N}(\boldsymbol{x}_n|\boldsymbol{\mu}_j, \boldsymbol{\Sigma}_j)} + \lambda \pi_k \tag{11.1} 0=n=1NjπjN(xnμj,Σj)πkN(xnμk,Σk)+λπk(11.1)

    结合公式(5)、(9),可以将上式改写成:

    0 = N k + λ π k (11.2) 0 = N_k + \lambda \pi_k \tag{11.2} 0=Nk+λπk(11.2)

    注意到 ∑ k = 1 K π k = 1 \sum_{k=1}^K \pi_k = 1 k=1Kπk=1,上式两边同时对 k k k求和。此外 N k N_k Nk表示属于第个聚类的点的数量(公式(9))。对 N k , N_k, Nk k = 1 k=1 k=1 k = K k=K k=K求和后,就是所有点的数量 N N N:

    0 = ∑ k = 1 K N k + λ ∑ k = 1 K π k (11.3) 0 = \sum_{k=1}^K N_k + \lambda \sum_{k=1}^K \pi_k \tag{11.3} 0=k=1KNk+λk=1Kπk(11.3)

    0 = N + λ (11.4) 0 = N + \lambda \tag{11.4} 0=N+λ(11.4)

    从而可得到 λ = − N \lambda = -N λ=N,带入(11.2),进而可以得到 π k \pi_k πk更简洁的表达式:
    π k = N k N (12) \pi_k = \frac{N_k}{N} \tag{12} πk=NNk(12)

    EM算法估计GMM参数即最大化(8),(10)和(12)。需要用到(5),(8),(10)和(12)四个公式。我们先指定 π \boldsymbol{\pi} π μ \boldsymbol{\mu} μ Σ \boldsymbol{\Sigma} Σ的初始值,带入(5)中计算出 γ ( z n k ) \gamma(z_{nk}) γ(znk),然后再将 γ ( z n k ) \gamma(z_{nk}) γ(znk)带入(8),(10)和(12),求得 π k \pi_k πk μ k \boldsymbol{\mu}_k μk Σ k \boldsymbol{\Sigma}_k Σk;接着用求得的 π k \pi_k πk μ k \boldsymbol{\mu}_k μk Σ k \boldsymbol{\Sigma}_k Σk再带入(5)得到新的 γ ( z n k ) \gamma(z_{nk}) γ(znk),再将更新后的 γ ( z n k ) \gamma(z_{nk}) γ(znk)带入(8),(10)和(12),如此往复,直到算法收敛。

    EM算法

    1. 定义分量数目 K K K,对每个分量 k k k设置 π k \pi_k πk μ k \boldsymbol{\mu}_k μk Σ k \boldsymbol{\Sigma}_k Σk的初始值,然后计算(6)式的对数似然函数。
    2. E step
      根据当前的 π k \pi_k πk μ k \boldsymbol{\mu}_k μk Σ k \boldsymbol{\Sigma}_k Σk计算后验概率 γ ( z n k ) \gamma(z_{nk}) γ(znk)
      γ ( z n k ) = π k N ( x n ∣ μ n , Σ n ) ∑ j = 1 K π j N ( x n ∣ μ j , Σ j ) \gamma(z_{nk}) = \frac{\pi_k\mathcal{N}(\boldsymbol{x}_n| \boldsymbol{\mu}_n, \boldsymbol{\Sigma}_n)}{\sum_{j=1}^K \pi_j \mathcal{N}(\boldsymbol{x}_n| \boldsymbol{\mu}_j, \boldsymbol{\Sigma}_j)} γ(znk)=j=1KπjN(xnμj,Σj)πkN(xnμn,Σn)
    3. M step
      根据E step中计算的 γ ( z n k ) \gamma(z_{nk}) γ(znk)再计算新的 π k \pi_k πk μ k \boldsymbol{\mu}_k μk Σ k \boldsymbol{\Sigma}_k Σk
      μ k n e w = 1 N k ∑ n = 1 N γ ( z n k ) x n Σ k n e w = 1 N k ∑ n = 1 N γ ( z n k ) ( x n − μ k n e w ) ( x n − μ k n e w ) T π k n e w = N k N \begin{aligned} \boldsymbol{\mu}_k^{new} &= \frac{1}{N_k} \sum_{n=1}^N \gamma(z_{nk}) \boldsymbol{x}_n \\ \boldsymbol{\Sigma}_k^{new} &= \frac{1}{N_k} \sum_{n=1}^N \gamma(z_{nk}) (\boldsymbol{x}_n - \boldsymbol{\mu}_k^{new}) (\boldsymbol{x}_n - \boldsymbol{\mu}_k^{new})^T \\ \pi_k^{new} &= \frac{N_k}{N} \end{aligned} μknewΣknewπknew=Nk1n=1Nγ(znk)xn=Nk1n=1Nγ(znk)(xnμknew)(xnμknew)T=NNk
      其中:
      N k = ∑ n = 1 N γ ( z n k ) N_k = \sum_{n=1}^N \gamma(z_{nk}) Nk=n=1Nγ(znk)
    4. 计算(6)式的对数似然函数
      ln ⁡ p ( x ∣ π , μ , Σ ) = ∑ n = 1 N ln ⁡ { ∑ k = 1 K π k N ( x k ∣ μ k , Σ k ) } \ln p(\boldsymbol{x}|\boldsymbol{\pi}, \boldsymbol{\mu}, \boldsymbol{\Sigma}) = \sum_{n=1}^N \ln \left\{\sum_{k=1}^K \pi_k \mathcal{N}(\boldsymbol{x}_k| \boldsymbol{\mu}_k, \boldsymbol{\Sigma}_k)\right\} lnp(xπ,μ,Σ)=n=1Nln{k=1KπkN(xkμk,Σk)}
    5. 检查参数是否收敛或对数似然函数是否收敛,若不收敛,则返回第2步。

    GMM聚类的可分性评价

    使用GMM得到聚类结果后如何定量评价两个类别的可分性呢?可以通过计算两个或多个类别分布的重叠度来评价模型的可分性。这里介绍一种高斯混合模型的重叠度计算方法:计算高斯混合模型的可分性和重叠度(Overlap Rate, OLR)

    Reference

    1. 漫谈 Clustering (3): Gaussian Mixture Model
    2. Draw Gaussian distribution ellipse
    3. Pang-Ning Tan 等, 数据挖掘导论(英文版), 机械工业出版社, 2010
    4. Christopher M. Bishop etc., Pattern Recognition and Machine Learning, Springer, 2006
    5. 李航, 统计学习方法, 清华大学出版社, 2012
    展开全文
  • gmm

    2015-04-04 10:41:00
    参考大神的博文:http://www.cnblogs.com/tornadomeet/archive/2012/06/02/2531565.html http://www.cnblogs.com/tornadomeet/archive/2012/06/02/2531705.html 转载于:https://www.cnblogs.com/573177...

    参考大神的博文:http://www.cnblogs.com/tornadomeet/archive/2012/06/02/2531565.html

                           http://www.cnblogs.com/tornadomeet/archive/2012/06/02/2531705.html

    转载于:https://www.cnblogs.com/573177885qq/p/4391725.html

    展开全文
  • GMM_GMM_源码

    2021-10-04 09:13:52
    一个基于GMM的聚类例子,基于VS2015的C++写的
  • GMM_EM 实现,产生三个2维高斯模型的分布数据,打乱,用GMM模型去重新分类
  • GMM_GMM提取_matlab前景提取_GMM前景_GMM_混合高斯模型_源码.zip
  • GMM_GMM提取_matlab前景提取_GMM前景_GMM_混合高斯模型_源码.rar
  • 详解EM算法与混合高斯模型(Gaussian mixture model, GMM)

    万次阅读 多人点赞 2018-07-14 23:00:34
    最近在看晓川老(shi)师(shu)的博士论文,接触了混合高斯模型(Gaussian mixture model, GMM)和EM(Expectation Maximization)算法,不禁被论文中庞大的数学公式所吓退。本文通过查阅相关资料,在复杂巧妙的推理...

       最近在看晓川老(shi)师(shu)的博士论文,接触了混合高斯模型(Gaussian mixture model, GMM)和EM(Expectation Maximization)算法,不禁被论文中庞大的数学公式所吓退。本文通过查阅相关资料,在复杂巧妙的推理公式中融入了自己的理解,详细梳理了混合高斯模型和EM算法。

    1 单高斯模型(Gaussian single model, GSM)

       简单回顾一下概率论讲过的高斯模型。
      高斯模型是一种常用的变量分布模型,在数理统计领域有着广泛的应用(……好吧读了这么多年书没白费,教科书般的话语已植入骨髓)。一维高斯分布的概率密度函数如下:
    (1) f ( x ) = 1 2 π σ exp ⁡ ( − ( x − μ ) 2 2 σ 2 ) f(x) = \frac{1}{{\sqrt {2\pi } \sigma }}\exp ( - \frac{{{{(x - \mu )}^2}}}{{2{\sigma ^2}}})\tag{1} f(x)=2π σ1exp(2σ2(xμ)2)(1) 
       μ \mu μ σ 2 {\sigma ^2} σ2分别是高斯分布的均值和方差。
      譬如将男生身高视为变量X, 假设男生的身高服从高斯分布,则 X ∼ N ( μ , σ 2 ) X \sim N(\mu ,{\sigma ^2}) XN(μ,σ2),女生亦如此。只是男女生身高分布可能具有不同的均值和方差。图1是从谷歌图库中搜索到的男女生身高分布图,来源不清,个人觉得男生的均值身高虚高……四个记号分别表示0~3 σ \sigma σ准则。
    图1 男女生身高分布差异

    图1 男女生身高分布差异

       多维变量 X = ( x 1 , x 2 , . . . x n ) X = ({x_1},{x_2},...{x_n}) X=(x1,x2,...xn)的联合概率密度函数为:
    (2) f ( X ) = 1 ( 2 π ) d / 2 ∣ Σ ∣ 1 / 2 exp ⁡ [ − 1 2 ( X − u ) T Σ − 1 ( X − u ) ] , X = ( x 1 , x 2 . . . x n ) f(X) = \frac{1}{{{{(2\pi )}^{d/2}}{{\left| \Sigma \right|}^{1/2}}}}\exp [ - \frac{1}{2}{(X - u)^T}{\Sigma ^{ - 1}}(X - u)],X = ({x_1},{x_2}...{x_n})\tag{2} f(X)=(2π)d/2Σ1/21exp[21(Xu)TΣ1(Xu)],X=(x1,x2...xn)(2)
      其中:
      d:变量维度。对于二维高斯分布,有d=2;
       u = ( u 1 u 2 . . . u n ) u = \left( \begin{array}{l} {u_1}\\ {u_2}\\ ...\\ {u_n} \end{array} \right) u=u1u2...un:各维变量的均值;
       Σ \Sigma Σ:协方差矩阵,描述各维变量之间的相关度。对于二维高斯分布,有:
    (3) Σ = [ δ 11 δ 12 δ 21 δ 22 ] \Sigma= \left[ \begin{matrix} \delta _{11} & \delta _{12}\\ \delta _{21}& \delta _{22} \end{matrix} \right] \tag{3} Σ=[δ11δ21δ12δ22](3)

    这里写图片描述
    图2 二维高斯数据分布

       图2是二维高斯分布产生的数据示例,参数设定为: u = ( 0 0 ) , Σ = [ 1 0.8 0.8 5 ] u = \left( \begin{array}{l} 0\\ 0 \end{array} \right),\Sigma= \left[ \begin{matrix} 1 & 0.8\\ 0.8&5 \end{matrix} \right] u=(00),Σ=[10.80.85]。关于二维高斯分布的参数设定对为高斯曲面的影响,这篇文章二维高斯分布(Two-dimensional Gaussian distribution)的参数分析有提及,主要是为了下文理解混合高斯分布做铺垫。服从二维高斯分布的数据主要集中在一个椭圆内部,服从三维的数据集中在一个椭球内部。

    2 混合高斯模型(Gaussian mixture model, GMM)

    2.1 为什么要有混合高斯模型

    先来看一组数据。 
         
      

    这里写图片描述
    图3 混合高斯分布所产生数据

       如果我们假设这组数据是由某个高斯分布产生的,利用极大似然估计(后文还会提及)对这个高斯分布做参数估计,得到一个最佳的高斯分布模型如下。

    这里写图片描述
    图4 用单高斯模型对样本作分析不合理示意

       有什么问题吗?一般来讲越靠近椭圆的中心样本出现的概率越大,这是由概率密度函数决定的,但是这个高斯分布的椭圆中心的样本量却极少。显然样本服从单高斯分布的假设并不合理。单高斯模型无法产生这样的样本。
      实际上,这是用两个不同的高斯分布模型产生的数据。

    这里写图片描述
    图5 混合高斯模型对样本作分析示意

       正当单高斯模型抓耳挠腮的时候,混合高斯模型就大摇大摆地进场了。它通过求解两个高斯模型,并通过一定的权重将两个高斯模型融合成一个模型,即最终的混合高斯模型。这个混合高斯模型可以产生这样的样本。
      更一般化的描述为:假设混合高斯模型由K个高斯模型组成(即数据包含K个类),则GMM的概率密度函数如下:
    (3) p ( x ) = ∑ k = 1 K p ( k ) p ( x ∣ k ) = ∑ k = 1 K π k N ( x ∣ u k , Σ k ) p(x)=\sum\limits_{k = 1}^K {p(k)p(x|k) = } \sum\limits_{k = 1}^K {{\pi _k}N(x|{u_k},{\Sigma _k})} \tag{3} p(x)=k=1Kp(k)p(xk)=k=1KπkN(xuk,Σk)(3)
      其中, p ( x ∣ k ) = N ( x ∣ u k , Σ k ) p(x|k) = N(x|{u_k},{\Sigma _k}) p(xk)=N(xuk,Σk)是第k个高斯模型的概率密度函数,可以看成选定第k个模型后,该模型产生x的概率; p ( k ) = π k p(k) = {\pi _k} p(k)=πk是第k个高斯模型的权重,称作选择第k个模型的先验概率,且满足 ∑ k = 1 K π k = 1 \sum\limits_{k = 1}^K {{\pi _k}} = 1 k=1Kπk=1
      所以,混合高斯模型并不是什么新奇的东西,它的本质就是融合几个单高斯模型,来使得模型更加复杂,从而产生更复杂的样本。理论上,如果某个混合高斯模型融合的高斯模型个数足够多,它们之间的权重设定得足够合理,这个混合模型可以拟合任意分布的样本。

    2.2 直观上理解混合高斯模型

       下面通过几张图片来帮助理解混合高斯模型。
      首先从简单的一维混合高斯模型说起。
     

    这里写图片描述
    图6 一维混合高斯模型

       在图6中,y1,y2和y3分别表示三个一维高斯模型,他们的参数设定如图所示。y4表示将三个模型的概率密度函数直接相加,注意的是这并不是一个混合高斯模型,因为不满足 ∑ k = 1 K π k = 1 \sum\limits_{k = 1}^K {{\pi _k}} = 1 k=1Kπk=1的条件。而y5和y6分别是由三个相同的高斯模型融合生成的不同混合模型。由此可见,调整权重将极大影响混合模型的概率密度函数曲线。另一方面也可以直观地理解混合高斯模型可以更好地拟合样本的原因:它有更复杂更多变的概率密度函数曲线。理论上,混合高斯模型的概率密度函数曲线可以是任意形状的非线性函数。
      下面再给出一个二维空间3个高斯模型混合的例子。
     

    这里写图片描述
    (a) 3个类别高斯分布截面轮廓线

    这里写图片描述
    (b) 混合高斯分布截面轮廓线

    这里写图片描述
    © 二维混合高斯分布概率密度函数图

    图7 二维混合高斯模型

       (a) 图表示的是3个高斯模型的截面轮廓图,3个模型的权重系数已在图中注明,由截面轮廓图可知3个模型之间存在很多重叠区域。其实这也正是混合高斯模型所希望的。因为如果它们之间的重叠区域较少,那么生成的混合高斯模型一般较为简单,难以生成较为复杂的样本。
      设定好了3个高斯模型和它们之间的权重系数之后,就可以确定二维混合高斯分布的概率密度函数曲面,如图©所示。图(b)是对于图©概率密度曲面的截面轮廓线。从图7也可以看出,整个混合高斯分布曲面相对比于单高斯分布曲面已经异常复杂。实际上,通过调整混合高斯分布的系数 ( π , μ , Σ ) (\pi ,\mu ,\Sigma ) (π,μ,Σ),可以使得图©的概率密度曲面去拟合任意的三维曲面,从而采样生成所需要的数据样本。

    3 极大似然估计(Maximum Likehood Estimate, MLE)(最大化对数似然函数)

    ● 最大化对数似然函数(log-likelihood function)的意义

       首先直观化地解释一下最大化对数似然函数要解决的是什么问题。
      假设我们采样得到一组样本 y t {y_t} yt,而且我们知道变量Y服从高斯分布(本文只提及高斯分布,其他变量分布模型类似),数学形式表示为 Y ∼ N ( μ , Σ ) Y \sim N(\mu ,\Sigma ) YN(μ,Σ)。采样的样本如图8所示,我们的目的就是找到一个合适的高斯分布(也就是确定高斯分布的参数 μ , Σ \mu ,\Sigma μ,Σ),使得这个高斯分布能产生这组样本的可能性尽可能大。
     

    这里写图片描述
    图8 最大化似然函数的意义

       那怎么找到这个合适的高斯分布呢(在图8中的表示就是1~4哪个分布较为合适)?这时候似然函数就闪亮登场了。
      似然函数数学化:设有样本集 Y = y 1 , y 2 . . . y N Y = {y_1},{y_2}...{y_N} Y=y1,y2...yN p ( y n ∣ μ , Σ ) p({y_n}|\mu ,\Sigma ) p(ynμ,Σ)是高斯分布的概率分布函数,表示变量 Y = y n Y = {y_n} Y=yn的概率。假设样本的抽样是独立的,那么我们同时抽到这N个样本的概率是抽到每个样本概率的乘积,也就是样本集Y的联合概率。此联合概率即为似然函数:
    (4) L ( μ , Σ ) = L ( y 1 , y 2 . . . y N ; μ , Σ ) = ∏ n = 1 N p ( y n ; μ , Σ ) L(\mu ,\Sigma ) = L({y_1},{y_2}...{y_N};\mu ,\Sigma ) = \prod\limits_{n = 1}^N {p({y_n};\mu ,\Sigma )}\tag{4} L(μ,Σ)=L(y1,y2...yN;μ,Σ)=n=1Np(yn;μ,Σ)(4)
      对式子(4)进行求导并令导数为0(即最大化似然函数,一般还会先转化为对数似然函数再最大化),所求出的参数就是最佳的高斯分布对应的参数。
      所以最大化似然函数的意义就是:通过使得样本集的联合概率最大来对参数进行估计,从而选择最佳的分布模型。
      对于图8产生的样本用最大化似然函数的方法,最终可以得到序号1对应的高斯分布模型是最佳的模型。

    4 EM算法(最大化Q函数)

    4.1 为什么要有EM算法(EM算法与极大似然估计分别适用于什么问题)

    ● 尝试用极大似然估计的方法来解GMM模型

       解GMM模型,实际上就是确定GMM模型的参数 ( μ , Σ , π ) (\mu ,\Sigma ,\pi ) (μ,Σ,π),使得由这组参数确定的GMM模型最有可能产生采样的样本。
      先试试看用极大似然估计的方法来解GMM模型会出现什么样的问题。
      如第3小节所述,要利用极大似然估计求解模型最重要的一步就是求出似然函数,即样本集出现的联合概率。而对于混合高斯模型,如何求解某个样本 y t {y_t} yt的概率?显然我们得先知道这个样本来源于哪一类高斯模型,然后求这个高斯模型生成这个样本的概率 p ( y t ) p({y_t}) p(yt)
      但是问题来了:我们只有样本。不知道样本到底来源于哪一类的高斯模型。那么如何求解样本的生成概率 p ( y t ) p({y_t}) p(yt)
      先引入一个隐变量 γ \gamma γ。它是一个K维二值随机变量,在它的K维取值中只有某个特定的元素 γ k {\gamma _k} γk的取值为1,其它元素的取值为0。实际上,隐变量描述的就是:每一次采样,选择第k个高斯模型的概率,故有:
    (5) p ( γ k = 1 ) = π k p({\gamma _k} = 1) = {\pi _k}\tag{5} p(γk=1)=πk(5)
      当给定了 γ \gamma γ的一个特定的值之后(也就是知道了这个样本从哪一个高斯模型进行采样),可以得到样本y的条件分布是一个高斯分布,满足:
    (6) p ( y ∣ γ k = 1 ) = N ( y ∣ μ k , Σ k ) p(y|{\gamma _k} = 1) = N(y|{\mu _k},{\Sigma _k})\tag{6} p(yγk=1)=N(yμk,Σk)(6)
      而实际上,每个样本到底是从这K个高斯模型中哪个模型进行采样的,是都有可能的。故样本y的概率为:
    (7) p ( y ) = ∑ γ p ( γ ) p ( y ∣ γ ) = ∑ k = 1 K π k N ( y ∣ μ k , Σ k ) p(y) = \sum\nolimits_\gamma {p(\gamma )} p(y|\gamma ){\rm{ = }}\sum\limits_{{\rm{k}} = 1}^K {{\pi _k}N(y|{\mu _k},{\Sigma _k})} \tag{7} p(y)=γp(γ)p(yγ)=k=1KπkN(yμk,Σk)(7)
      样本集Y(n个样本点)的联合概率为:
    (8) L ( μ , Σ , π ) = L ( y 1 , y 2 . . . y N ; μ , Σ , π ) = ∏ n = 1 N p ( y n ; μ , Σ , π ) = ∏ n = 1 N ∑ k = 1 K π k N ( y n ∣ μ k , Σ k ) L(\mu ,\Sigma ,\pi ) = L({y_1},{y_2}...{y_N};\mu ,\Sigma ,\pi ) = \prod\limits_{n = 1}^N {p({y_n};\mu ,\Sigma ,\pi )} = \prod\limits_{n = 1}^N {\sum\limits_{{\rm{k}} = 1}^K {{\pi _k}N({y_n}|{\mu _k},{\Sigma _k})} } \tag{8} L(μ,Σ,π)=L(y1,y2...yN;μ,Σ,π)=n=1Np(yn;μ,Σ,π)=n=1Nk=1KπkN(ynμk,Σk)(8)
      对数似然函数表示为:
    (9) ln ⁡ L ( μ , Σ , π ) = ∑ n = 1 N ln ⁡ ∑ k = 1 K π k N ( y n ∣ μ k , Σ k ) \ln L(\mu ,\Sigma ,\pi ) = \sum\limits_{n = 1}^N {\ln \sum\limits_{{\rm{k}} = 1}^K {{\pi _k}N({y_n}|{\mu _k},{\Sigma _k})} } \tag{9} lnL(μ,Σ,π)=n=1Nlnk=1KπkN(ynμk,Σk)(9)
      好了,然后求导,令导数为0,得到模型参数 ( μ , Σ , π ) (\mu ,\Sigma ,\pi ) (μ,Σ,π)
      貌似问题已经解决了,喜大普奔。
      然而仔细观察可以发现,对数似然函数里面,对数里面还有求和。实际上没有办法通过求导的方法来求这个对数似然函数的最大值。
      MLE(极大似然估计)略显沮丧。这时候EM算法走过来,安慰着说:兄弟别哭,老哥帮你。

    ● 极大似然估计与EM算法适用问题分析

       下面先阐述一下极大似然估计与EM算法分别适用于解决什么样的问题。
     

    这里写图片描述
    图9 极大似然估计适用问题

    这里写图片描述
    图10 EM算法适用问题

       如果我们已经清楚了某个变量服从的高斯分布,而且通过采样得到了这个变量的样本数据,想求高斯分布的参数,这时候极大似然估计可以胜任这个任务;而如果我们要求解的是一个混合模型,只知道混合模型中各个类的分布模型(譬如都是高斯分布)和对应的采样数据,而不知道这些采样数据分别来源于哪一类(隐变量),那这时候就可以借鉴EM算法。EM算法可以用于解决数据缺失的参数估计问题(隐变量的存在实际上就是数据缺失问题,缺失了各个样本来源于哪一类的记录)。
      下面将介绍EM算法的两个步骤:E-step(expectation-step,期望步)和M-step(Maximization-step,最大化步);

    4.2 E-step

    我们现有样本集 Y = ( y 1 , y 2 . . . y T ) Y = ({y_1},{y_2}...{y_T}) Y=(y1,y2...yT),通过隐变量 γ t , k {\gamma _{t,k}} γt,k(表示 y t {y_t} yt这个样本来源于第k个模型)的引入,可以将数据展开成完全数据:
    ( y t , γ t , 1 , γ t , 2 . . . γ t , K ) , t = 1 , 2... T ({y_t},{\gamma _t}_{,1},{\gamma _{t,2}}...{\gamma _{t,K}}),t = 1,2...T (yt,γt,1,γt,2...γt,K),t=1,2...T

    所谓的完全数据,就是不缺失的数据。只有样本集 Y = ( y 1 , y 2 . . . y T ) Y = ({y_1},{y_2}...{y_T}) Y=(y1,y2...yT)的数据是不完整的,存在信息缺失的。若 y t {y_t} yt由第1类采样而来,则有 γ t , 1 = 1 , γ t , 2 = 0... γ t , K = 0 {\gamma _t}_{,1} = 1,{\gamma _{t,2}} = 0...{\gamma _{t,K}} = 0 γt,1=1,γt,2=0...γt,K=0,表示为 ( y t , 1 , 0 , . . . 0 ) ({y_t},1,0,...0) (yt,1,0,...0)
      所以要求能采到这组数据的可能性,需要分两步走:①第t个样本由哪一类产生?②如果第t个样本由第k类产生,那么第k类产生第t个样本的概率为多少?
      综合考虑上面两步,有了完全数据的似然函数:
    (10) p ( y , γ ∣ μ , Σ , π ) = ∏ t = 1 T p ( y t , γ t , 1 , γ t , 2 . . . γ t , K ∣ μ , Σ , π )               = ∏ t = 1 T ∏ k = 1 K ( π k N ( y t ; μ k , Σ k ) ) γ t , k               = ∏ k = 1 K π k ∑ t = 1 T γ t , k ∏ t = 1 T ( N ( y t ; μ k , Σ k ) ) γ t , k \begin{array}{l} p(y,\gamma |\mu ,\Sigma ,\pi ) = \prod\limits_{t = 1}^T {p({y_t},{\gamma _t}_{,1},{\gamma _{t,2}}...{\gamma _{t,K}}|\mu ,\Sigma ,\pi )} \\ {\rm{        }} = \prod\limits_{t = 1}^T {\prod\limits_{k = 1}^K {{{({\pi _k}N({y_t};{\mu _k},{\Sigma _k}))}^{{\gamma _{t,k}}}}} } \\ {\rm{        }} = \prod\limits_{k = 1}^K {\pi _k^{\sum\nolimits_{t = 1}^T {^{{\gamma _{t,k}}}} }} \prod\limits_{t = 1}^T {{{(N({y_t};{\mu _k},{\Sigma _k}))}^{{\gamma _{t,k}}}}} \end{array} \tag{10} p(y,γμ,Σ,π)=t=1Tp(yt,γt,1,γt,2...γt,Kμ,Σ,π)       =t=1Tk=1K(πkN(yt;μk,Σk))γt,k       =k=1Kπkt=1Tγt,kt=1T(N(yt;μk,Σk))γt,k(10)
      第1个等号到第2个等号的理解:若 y t {y_t} yt由第1类采样而来,则有 γ t , 1 = 1 , γ t , 2 = 0... γ t , K = 0 {\gamma _t}_{,1} = 1,{\gamma _{t,2}} = 0...{\gamma _{t,K}} = 0 γt,1=1,γt,2=0...γt,K=0
    (11) p ( y t , γ t , 1 , γ t , 2 . . . γ t , K ∣ μ , Σ , π ) = ∏ k = 1 K ( π k N ( y t ; μ k , Σ k ) ) γ t , k                             = ( π 1 N ( y t ; μ 1 , Σ 1 ) ) γ t , 1 ( π 2 N ( y t ; μ 2 , Σ 2 ) ) γ t , 2 . . . ( π K N ( y t ; μ K , Σ K ) ) γ t , K                             = ( π 1 N ( y t ; μ 1 , Σ 1 ) ) 1 ( π 2 N ( y t ; μ 2 , Σ 2 ) ) 0 . . . ( π K N ( y t ; μ K , Σ K ) ) 0                             = π 1 N ( y t ; μ 1 , Σ 1 ) \begin{array}{l} p({y_t},{\gamma _t}_{,1},{\gamma _{t,2}}...{\gamma _{t,K}}|\mu ,\Sigma ,\pi ){\rm{ = }}\prod\limits_{k = 1}^K {{{({\pi _k}N({y_t};{\mu _k},{\Sigma _k}))}^{{\gamma _{t,k}}}}} \\ {\rm{               = }}{({\pi _1}N({y_t};{\mu _1},{\Sigma _1}))^{{\gamma _{t,1}}}}{({\pi _2}N({y_t};{\mu _2},{\Sigma _2}))^{{\gamma _{t,2}}}}...{({\pi _K}N({y_t};{\mu _K},{\Sigma _K}))^{{\gamma _{t,K}}}}\\ {\rm{                }} = {({\pi _1}N({y_t};{\mu _1},{\Sigma _1}))^1}{({\pi _2}N({y_t};{\mu _2},{\Sigma _2}))^0}...{({\pi _K}N({y_t};{\mu _K},{\Sigma _K}))^0}\\ {\rm{                }} = {\pi _1}N({y_t};{\mu _1},{\Sigma _1}) \end{array} \tag{11} p(yt,γt,1,γt,2...γt,Kμ,Σ,π)=k=1K(πkN(yt;μk,Σk))γt,k              =(π1N(yt;μ1,Σ1))γt,1(π2N(yt;μ2,Σ2))γt,2...(πKN(yt;μK,ΣK))γt,K              =(π1N(yt;μ1,Σ1))1(π2N(yt;μ2,Σ2))0...(πKN(yt;μK,ΣK))0              =π1N(yt;μ1,Σ1)(11)
      注意式子(11)与式子(7)的差别:如果求 p ( y t ) p({y_t}) p(yt)则需要考虑 y t {y_t} yt有可能来源于k个类;而如果求的是 p ( y t , γ t , 1 , γ t , 2 . . . γ t , K ) p({y_t},{\gamma _t}_{,1},{\gamma _{t,2}}...{\gamma _{t,K}}) p(yt,γt,1,γt,2...γt,K)则已经限定了 y t {y_t} yt只会来源于某个类。
      第2个等式到第3个等式的理解:先交换累乘符号。由于 π k {\pi _k} πk与t无关,故而可以从内部的累乘符号中提取出来。
      实际上完全数据的似然函数描述的就是采集到这些样本的可能性。
      完全数据的对数似然函数为:
    (12) ln ⁡ p ( y , γ ∣ μ , Σ , π ) = ∑ k = 1 K ( ∑ t = 1 T γ t , k ) ln ⁡ π k + ∑ t = 1 T γ t , k ( − ln ⁡ ( 2 π ) − 1 2 ln ⁡ ∣ Σ k ∣ − 1 2 ( y t − μ t ) T ( Σ k ) − 1 ( y t − μ t ) ) \ln p(y,\gamma |\mu ,\Sigma ,\pi ) = \sum\limits_{k = 1}^K {(\sum\limits_{t = 1}^T {{\gamma _{t,k}}} )\ln {\pi _k}} + \sum\limits_{t = 1}^T {{\gamma _{t,k}}} ( - \ln (2\pi ) - \frac{1}{2}\ln \left| {{\Sigma _k}} \right| - \frac{1}{2}{({y_t} - {\mu _t})^T}{({\Sigma _k})^{ - 1}}({y_t} - {\mu _t})) \tag{12} lnp(y,γμ,Σ,π)=k=1K(t=1Tγt,k)lnπk+t=1Tγt,k(ln(2π)21lnΣk21(ytμt)T(Σk)1(ytμt))(12)
      这一步应该没啥问题吧。。。注意的是,此处考虑的是二维高斯分布的情况,对应于式子(2)中的d=2。
      我们的目标就是找出一组参数 ( μ ∗ , Σ ∗ , π ∗ ) (\mu *,\Sigma *,\pi *) (μ,Σ,π)使得 ln ⁡ p ( y , γ ∣ μ , Σ , π ) \ln p(y,\gamma |\mu ,\Sigma ,\pi ) lnp(y,γμ,Σ,π)最大。
      那么问题来了: ln ⁡ p ( y , γ ∣ μ , Σ , π ) \ln p(y,\gamma |\mu ,\Sigma ,\pi ) lnp(y,γμ,Σ,π)中含有隐变量 γ \gamma γ γ \gamma γ的存在使得我们没法最大化 ln ⁡ p ( y , γ ∣ μ , Σ , π ) \ln p(y,\gamma |\mu ,\Sigma ,\pi ) lnp(y,γμ,Σ,π) 。如果我们知道了 γ \gamma γ,那么最大化 ln ⁡ p ( y , γ ∣ μ , Σ , π ) \ln p(y,\gamma |\mu ,\Sigma ,\pi ) lnp(y,γμ,Σ,π)就显得水到渠成。
      但是坑爹的就是:我们只有采样数据 y t {y_t} yt γ \gamma γ未知。
      那么怎么办呢? γ \gamma γ来一个估计
      猜想我们给了一组起始参数 ( μ 0 , Σ 0 , π 0 ) ({\mu ^0},{\Sigma ^0},{\pi ^0}) (μ0,Σ0,π0)或者优化过的第i次迭代的参数 ( μ i , Σ i , π i ) ({\mu ^i},{\Sigma ^i},{\pi ^i}) (μi,Σi,πi),也就是说每一个高斯分布的参数我们都有了, γ \gamma γ做的事不就是决定每个样本由哪一个高斯分布产生的嘛,有了每个高斯分布的参数那我们就可以猜想每个样本最有可能来源于哪个高斯分布没错吧!Done!
      为此我们不最大化 ln ⁡ p ( y , γ ∣ μ , Σ , π ) \ln p(y,\gamma |\mu ,\Sigma ,\pi ) lnp(y,γμ,Σ,π)(也无法最大化它),而是最大化Q函数。Q函数如下:
    Q ( μ , Σ , π , μ i , Σ i , π i ) = E γ [ ln ⁡ p ( y , γ ∣ μ , Σ , π ) ∣ Y , μ i , Σ i , π i ] = E γ [ ∑ k = 1 K ( ∑ t = 1 T γ t , k ∣ y t , μ i , Σ i , π i ) ln ⁡ π k + ∑ t = 1 T ( γ t , k ∣ y t , μ i , Σ i , π i ) ( − ln ⁡ ( 2 π ) − 1 2 ln ⁡ ∣ Σ k ∣ − 1 2 ( y t − μ t ) T ( Σ k ) − 1 ( y t − μ t ) ) ] = ∑ k = 1 K ( ∑ t = 1 T E ( γ t , k ∣ y t , μ i , Σ i , π i ) ln ⁡ π k + ∑ t = 1 T E ( γ t , k ∣ y t , μ i , Σ i , π i ) ( − ln ⁡ ( 2 π ) − 1 2 ln ⁡ ∣ Σ k ∣ − 1 2 ( y t − μ t ) T ( Σ k ) − 1 ( y t − μ t ) ) ) \begin{array}{l} Q(\mu ,\Sigma ,\pi ,{\mu ^i},{\Sigma ^i},{\pi ^i}) = {E_\gamma }[\ln p(y,\gamma |\mu ,\Sigma ,\pi )|Y,{\mu ^i},{\Sigma ^i},{\pi ^i}]\\ = {E_\gamma }[\sum\limits_{k = 1}^K {(\sum\limits_{t = 1}^T {{\gamma _{t,k}}|{y_t},{\mu ^i},{\Sigma ^i},{\pi ^i}} )\ln {\pi _k}} + \sum\limits_{t = 1}^T {({\gamma _{t,k}}|{y_t},{\mu ^i},{\Sigma ^i},{\pi ^i})} ( - \ln (2\pi ) - \frac{1}{2}\ln \left| {{\Sigma _k}} \right| - \frac{1}{2}{({y_t} - {\mu _t})^T}{({\Sigma _k})^{ - 1}}({y_t} - {\mu _t}))]\\ = \sum\limits_{k = 1}^K {(\sum\limits_{t = 1}^T {E({\gamma _{t,k}}|{y_t},{\mu ^i},{\Sigma ^i},{\pi ^i})} \ln {\pi _k}} + \sum\limits_{t = 1}^T {E({\gamma _{t,k}}|{y_t},{\mu ^i},{\Sigma ^i},{\pi ^i})} ( - \ln (2\pi ) - \frac{1}{2}\ln \left| {{\Sigma _k}} \right| - \frac{1}{2}{({y_t} - {\mu _t})^T}{({\Sigma _k})^{ - 1}}({y_t} - {\mu _t}))) \end{array} Q(μ,Σ,π,μi,Σi,πi)=Eγ[lnp(y,γμ,Σ,π)Y,μi,Σi,πi]=Eγ[k=1K(t=1Tγt,kyt,μi,Σi,πi)lnπk+t=1T(γt,kyt,μi,Σi,πi)(ln(2π)21lnΣk21(ytμt)T(Σk)1(ytμt))]=k=1K(t=1TE(γt,kyt,μi,Σi,πi)lnπk+t=1TE(γt,kyt,μi,Σi,πi)(ln(2π)21lnΣk21(ytμt)T(Σk)1(ytμt)))
      其中, E ( γ t , k ∣ y t , μ i , Σ i , π i ) E({\gamma _{t,k}}|{y_t},{\mu ^i},{\Sigma ^i},{\pi ^i}) E(γt,kyt,μi,Σi,πi)就是对 γ \gamma γ的估计:
    (14) E ( γ t , k ∣ y t , μ i , Σ i , π i ) = p ( γ t , k = 1 ∣ y t , μ i , Σ i , π i )                     = p ( γ t , k = 1 , y t ∣ μ i , Σ i , π i ) p ( y t )                     = p ( γ t , k = 1 , y t ∣ μ i , Σ i , π i ) ∑ k = 1 K p ( γ t , k = 1 , y t ∣ μ i , Σ i , π i )                     = p ( y t ∣ γ t , k = 1 , μ i , Σ i , π i ) p ( γ t , k = 1 ∣ μ i , Σ i , π i ) ∑ k = 1 K p ( y t ∣ γ t , k = 1 , μ i , Σ i , π i ) p ( γ t , k = 1 ∣ μ i , Σ i , π i )                     = π k i N ( y t ; μ k i , Σ k i ) ∑ k = 1 K π k i N ( y t ; μ k i , Σ k i ) \begin{array}{l} E({\gamma _{t,k}}|{y_t},{\mu ^i},{\Sigma ^i},{\pi ^i}){\rm{ = }}p({\gamma _{t,k}} = 1|{y_t},{\mu ^i},{\Sigma ^i},{\pi ^i})\\           = \frac{{p({\gamma _{t,k}} = 1,{y_t}|{\mu ^i},{\Sigma ^i},{\pi ^i})}}{{p({y_t})}}\\           = \frac{{p({\gamma _{t,k}} = 1,{y_t}|{\mu ^i},{\Sigma ^i},{\pi ^i})}}{{\sum\nolimits_{k = 1}^K {p({\gamma _{t,k}} = 1,{y_t}|{\mu ^i},{\Sigma ^i},{\pi ^i})} }}\\           = \frac{{p({y_t}|{\gamma _{t,k}} = 1,{\mu ^i},{\Sigma ^i},{\pi ^i})p({\gamma _{t,k}} = 1|{\mu ^i},{\Sigma ^i},{\pi ^i})}}{{\sum\nolimits_{k = 1}^K {p({y_t}|{\gamma _{t,k}} = 1,{\mu ^i},{\Sigma ^i},{\pi ^i})p({\gamma _{t,k}} = 1|{\mu ^i},{\Sigma ^i},{\pi ^i})} }}\\           = \frac{{\pi _k^iN({y_t};\mu _k^i,\Sigma _k^i)}}{{\sum\nolimits_{k = 1}^K {\pi _k^iN({y_t};\mu _k^i,\Sigma _k^i)} }} \end{array} \tag{14} E(γt,kyt,μi,Σi,πi)=p(γt,k=1yt,μi,Σi,πi)          =p(yt)p(γt,k=1,ytμi,Σi,πi)          =k=1Kp(γt,k=1,ytμi,Σi,πi)p(γt,k=1,ytμi,Σi,πi)          =k=1Kp(ytγt,k=1,μi,Σi,πi)p(γt,k=1μi,Σi,πi)p(ytγt,k=1,μi,Σi,πi)p(γt,k=1μi,Σi,πi)          =k=1KπkiN(yt;μki,Σki)πkiN(yt;μki,Σki)(14)
      这公式是不是很可怕??别急,带上几点声明,再去看公式就很好理解了!
      ① Q函数描述的其实就是在给定 ( μ i , Σ i , π i ) ({\mu ^i},{\Sigma ^i},{\pi ^i}) (μi,Σi,πi)参数下,先对样本Y做一个最有可能的划分(每个样本来源于各个类的可能性,即对 γ \gamma γ的估计 E ( γ t , k ∣ y t , μ i , Σ i , π i ) E({\gamma _{t,k}}|{y_t},{\mu ^i},{\Sigma ^i},{\pi ^i}) E(γt,kyt,μi,Σi,πi)),再描述能够产生这组样本的可能性(Q函数);
      ② 有了对于 γ \gamma γ的估计之后,Q函数只和样本有关(传统意义上的似然函数亦如此,完全数据的似然函数还与 γ \gamma γ有关),而不再含有隐变量,从而使得最大化Q函数成为可能;
      ③ 最大化Q函数的过程实则就是使得能够产生这组样本的可能性最大,与最大化似然函数的思路如出一辙。

    4.3 M-step

    有个Q函数,就可以对Q函数进行最大化,得到下一次迭代的模型参数了,即:
    (15) μ i + 1 , Σ i + 1 , π i + 1 = arg ⁡ max ⁡ Q ( μ , Σ , π , μ i , Σ i , π i ) {\mu ^{i{\rm{ + }}1}},{\Sigma ^{i{\rm{ + }}1}},{\pi ^{i{\rm{ + }}1}}{\rm{ = }}\arg \max Q(\mu ,\Sigma ,\pi ,{\mu ^i},{\Sigma ^i},{\pi ^i}) \tag{15} μi+1,Σi+1,πi+1=argmaxQ(μ,Σ,π,μi,Σi,πi)(15)
      对Q函数进行求导,并另其导数为0,可得:
    (16) μ k i + 1 = ∑ t = 1 T π k i N ( y t ; μ k i , Σ k i ) ∑ k = 1 K π k i N ( y t ; μ k i , Σ k i ) y t E ( γ t , k ∣ y t , μ i , Σ i , π i ) , k = 1 , 2... K \mu _k^{i + 1} = \frac{{\sum\nolimits_{t = 1}^T {\frac{{\pi _k^iN({y_t};\mu _k^i,\Sigma _k^i)}}{{\sum\nolimits_{k = 1}^K {\pi _k^iN({y_t};\mu _k^i,\Sigma _k^i)} }}} {y_t}}}{{E({\gamma _{t,k}}|{y_t},{\mu ^i},{\Sigma ^i},{\pi ^i})}},k = 1,2...K \tag{16} μki+1=E(γt,kyt,μi,Σi,πi)t=1Tk=1KπkiN(yt;μki,Σki)πkiN(yt;μki,Σki)yt,k=1,2...K(16)
    (17) Σ k i + 1 = ∑ t = 1 T π k i N ( y t ; μ k i , Σ k i ) ∑ k = 1 K π k i N ( y t ; μ k i , Σ k i ) ( y t − μ k i ) 2 E ( γ t , k ∣ y t , μ i , Σ i , π i ) , k = 1 , 2... K \Sigma _k^{i + 1} = \frac{{\sum\nolimits_{t = 1}^T {\frac{{\pi _k^iN({y_t};\mu _k^i,\Sigma _k^i)}}{{\sum\nolimits_{k = 1}^K {\pi _k^iN({y_t};\mu _k^i,\Sigma _k^i)} }}} {{({y_t} - \mu _k^i)}^2}}}{{E({\gamma _{t,k}}|{y_t},{\mu ^i},{\Sigma ^i},{\pi ^i})}},k = 1,2...K\tag{17} Σki+1=E(γt,kyt,μi,Σi,πi)t=1Tk=1KπkiN(yt;μki,Σki)πkiN(yt;μki,Σki)(ytμki)2,k=1,2...K(17)
    (18) π k i + 1 = E ( γ t , k ∣ y t , μ i , Σ i , π i ) T , k = 1 , 2... K \pi _k^{i + 1} = \frac{{E({\gamma _{t,k}}|{y_t},{\mu ^i},{\Sigma ^i},{\pi ^i})}}{T},k = 1,2...K\tag{18} πki+1=TE(γt,kyt,μi,Σi,πi),k=1,2...K(18)

      其中 μ k i + 1 , Σ k i + 1 , π k i + 1 \mu _k^{i + 1},\Sigma _k^{i + 1},\pi _k^{i + 1} μki+1,Σki+1,πki+1分别表示第(i+1)次迭代,第k个类的均值,协方差矩阵和所占的权重。

    4.4 一个例子梳理EM算法的整个过程

       EM算法的核心思想是:通过迭代的过程来找到一组最优的参数 ( μ ∗ , Σ ∗ , π ∗ ) (\mu *,\Sigma *,\pi *) (μ,Σ,π),使得这组参数表示的模型最有可能产生现有的采样数据。每次迭代的过程就是参数矫正的过程。
     

    这里写图片描述
    图11 EM算法参数优化过程

       现假设初始化一组参数 ( μ 0 , Σ 0 , π 0 ) ({\mu ^0},{\Sigma ^0},{\pi ^0}) (μ0,Σ0,π0)。在这组参数下,2类二维高斯分布如图11绿色椭圆所示。然后利用现有的参数,E-step开始对样本数据进行划分(对 γ \gamma γ进行估计)。蓝色的样本大多都被划分给第1类模型,橘黄色的样本大多都被划分给第2类模型。但是第1类模型还有优化空间:第1类模型还不能使得蓝色样本出现的联合概率达到最大。第2类模型也是如此。M-step便优化了2类模型的参数,得到新的参数 ( μ 1 , Σ 1 , π 1 ) ({\mu ^1},{\Sigma ^1},{\pi ^1}) (μ1,Σ1,π1),使得优化后2类高斯分布如图11红色椭圆所示。其中,第1类模型主要优化的是模型均值(即椭圆的中心),第二类模型主要优化的是模型协方差矩阵(即椭圆的长轴、短轴和长短轴的方向)。然后重复进行E-step和M-step,直到参数 ( μ , Σ , π ) (\mu ,\Sigma ,\pi ) (μ,Σ,π)收敛。
      最后谈谈混合高斯模型的参数 π \pi π
      混合高斯模型的参数 μ , Σ \mu ,\Sigma μ,Σ比较好理解,用于描述各个高斯分布的形状,对于它们的调整也比较直观:使得本高斯分布能够更好地接纳被划分到这类分布的样本。而为什么要有参数 π \pi π?它描述的是各个高斯分布所占的比重,如果不加“歧视”的话(样本来源于各个高斯分布的可能性一致),则有 π k = 1 / K {\pi _k} = 1/K πk=1/K;而如果对于某一类高斯分布(即为i)有侧重的话,则相应的 π i {\pi _i} πi较大,体现在图11中就是被分配给各个类的样本数占样本总数的比例。如果一轮优化后,某一类高斯分布又接纳了更多样本,则其 π i {\pi _i} πi变大,反之变小(所以图11从绿色椭圆调整为红色椭圆实际上两个类所对应的权重也被优化了)。
      而从本质上来看参数 π \pi π,则是为了混合高斯模型能有更好的曲面拟合能力。当参数 π \pi π退化为某一类高斯分布的权重远远大于其他类高斯分布的时候,混合高斯模型就退化成了单高斯模型!

    5 总结

       图12和图13梳理了高斯分布和混合高斯分布参数估计的逻辑流程。
     

    这里写图片描述
    图12 高斯分布参数估计逻辑流程

    这里写图片描述
    图13 混合高斯分布参数估计逻辑流程

       相对比于高斯分布的参数估计,混合高斯分布的参数估计更加复杂。主要原因在于隐变量的存在。而为什么混合高斯分布的参数估计需要多次迭代循环进行?是因为EM算法中对于 γ \gamma γ的估计利用的是初始化或者第i步迭代的参数 ( μ i , Σ i , π i ) ({\mu ^i},{\Sigma ^i},{\pi ^i}) (μi,Σi,πi),这对于样本的分类划分是有误差的。所以它只能通过多次迭代优化寻找更佳的参数来抵消这一误差。
      终于把这篇文章梳理完了。世界杯要结束了,伪球迷也想见证一下冠军诞生。至此,本文结束。

    展开全文
  • 利用EM算法以及GMM高斯混合模型来进行数据分析
  • 基于GMM的语音识别,能辨别出文件的声音性别,并且打印出来,可以一次性读入很多音频文件,结果通过文本档案显示
  • GMM-master_gmmmatlab_源码

    2021-09-30 02:46:34
    产生多维高斯分布产生的数据点,对产生的高斯分布点进行GMM归类
  • 实现了gmm分类算法,并对参数进行优化,实现了算法的优化
  • GMM是语音识别中比较成熟的算法之一,这个MATALB完整的实现了基于GMM算法的识别训练程
  • gmm的matlab代码
  • GMM matlab程序

    2020-03-29 09:46:51
    可以直接使用的高斯混合模型matlab程序,gmm/mog,含有E步和M布。GMM matlab程序 博客地址:https://blog.csdn.net/weixin_43290523/article/details/104967186
  • 使用matlab随机生成符合高斯混合模型的数据,随后根据生成的数据拟合出GMM模型
  • gmm的matlab代码项目SID-GMM-UBM project-SID-GMM-UBM#此软件包包含Matlab代码和Python代码## 1。如果不使用我们的数据集,请使用三个pyfile预处理数据集。 ## 2。VocalSeparation软件包用于人声提取## 3.Datasets...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 13,296
精华内容 5,318
关键字:

gmm