01. 高斯混合模型简介

高斯混合模型(Gaussian Mixed Model,GMM)和隐马尔可夫模型(Hidden Markov Model, HMM)是语音算法中常用的统计模型。HMM前面已经讲过了,这里介绍一下GMM算法。当数据分布中有多个峰值的时候,如果使用单峰分布函数去拟合会导致结果不佳,这时候可以使用具有多个峰值的分布去拟合,如下图所示,可以明显的看到使用两个峰值的高斯模型比单个峰值的高斯模型能更好的拟合数据。

高斯混合回归模型 高斯混合模型分类_高斯混合模型

GMM同K-means算法一样也使用了EM算法进行迭代计算。GMM假设每个簇的数据都是符合高斯分布的,当前数据呈现的分布就是各个簇的高斯分布叠加在一起的结果,即

高斯混合回归模型 高斯混合模型分类_数据_02

其中

高斯混合回归模型 高斯混合模型分类_高斯混合模型_03

 

02 高斯混合模型

一般情况下我们不能直接求解GMM的参数,而是在观察一系列数据的基础之上给出类别数量K,希望求得最佳的K个高斯分模型。此时问题转化为最佳的K个高斯模型的均值μ,方差σ、以及混合权重α的求解。这类问题通常通过最大似然估计来求解。遗憾的是,高斯混合模型中如果直接使用最大似然估计将会得到一个复杂的非凸函数,目标函数是和的对数,难以展开和对其求偏导。因此我们使用EM算法来逐渐逼近最优解。EM算法原理在前面的机器学习文章中已经讲过很多了这里就不再赘述了。我们假设观测变量yj中来自第个模型的分量为隐变量,记为γjk。γjk是第j个观测数据来自第k个模型的概率,被称第k个分模型对观测数据yj的响应度并且满足

高斯混合回归模型 高斯混合模型分类_拟合_04

其中N为样本数目,K为分模型的数目。此时对数似然函数可以写为

高斯混合回归模型 高斯混合模型分类_拟合_05

在EM算法中的E步,求Q函数

高斯混合回归模型 高斯混合模型分类_高斯混合模型_06

其中

高斯混合回归模型 高斯混合模型分类_高斯混合模型_07

在EM算法中的M步,极大化Q函数

高斯混合回归模型 高斯混合模型分类_数据_08

并且分别对μk, σk,αk求偏导,并令偏导等于0,可以求得

高斯混合回归模型 高斯混合模型分类_数据_09

高斯混合回归模型 高斯混合模型分类_高斯混合回归模型_10

高斯混合回归模型 高斯混合模型分类_高斯混合模型_11

不断重复E步和M步直到对数似然函数收敛即完成训练。无监督对应代码如下:

def train(self, train_data, plotResult=True):
        self.N = len(train_data)
        self.gamma = np.zeros([self.N, self.K])

        for i in tqdm(range(self.iterations)):
            # E-step
            for k in range(self.K):
                self.gamma[:,k] = self.GaussianPDF(self.mu[k], self.sigma[k], train_data)

            for j in range(self.N):
                self.gamma[j,:] = self.gamma[j,:] / np.sum(self.gamma[j,:])

            # M-step
            for k in range(self.K):
                gamma_sum = np.sum(self.gamma[:,k])
                self.mu[k] = np.sum(np.dot(self.gamma[None,:, k], train_data), axis=0) / gamma_sum
                self.sigma[k] = (train_data - self.mu[k]).T * np.multiply(np.mat(train_data - self.mu[k]), np.mat(self.gamma[:, k]).T) / gamma_sum
                self.alpha[k] = gamma_sum / self.N
        self.label = np.argmax(self.gamma, axis=1)

        if plotResult:
            self.plotResult(train_data)
        return self.label

 

03 总结与分析

对于GMM的预测很简单只用样本数据对于每个分模线的响应度,响应度最大的类别就是该样本的标签,即计算一次M步。最后对比下我们写的GMM和Sklearn的GMM,结果如下图所示。值得一提的是,GMM算法的结果和初始状态有很大的关系,不同的初始状态得到的结果可能相差很大。

高斯混合回归模型 高斯混合模型分类_拟合_12

高斯混合回归模型 高斯混合模型分类_高斯混合回归模型_13