机器学习之高斯混合模型

前言

极大似然估计:只是一种概率论在统计学的应用,它是参数估计的方法之一。说的是已知某个随机样本满足某种概率分布,但是其中具体的参数不清楚,则可通过极大似然估计来估计模型的参数。

参数估计:通过若干次试验,观察其结果,利用结果推出参数的大概值。

最大似然估计:已知某个参数能使这个样本出现的概率最大,我们当然不会再去选择其他小概率的样本,所以干脆就把这个参数作为估计的真实值。

高斯分布

高斯分布(Gaussian distribution)有时也被称为正态分布(normal distribution),是一种在自然界大量的存在的、最为常见的分布形式。
其概率密度函数为:
$$f\left( x\right) =\dfrac {1}{\sqrt {2\pi }\sigma }\exp \left( -\dfrac {\left( x-\mu \right)^2 }{2\sigma ^{2}}\right)$$
如果随机变量服从的正态分布,记作$X\sim N\left( \mu ,\sigma ^{2}\right)$

可见高斯分布包含两个参数,参数μ表示均值,参数σ表示标准差。

高斯混合模型(GMM)

高斯混合模型是对高斯模型进行简单的扩展,GMM使用多个高斯分布的组合来刻画数据分布。每个高斯模型就代表了一个类(一个Cluster)。

混合高斯模型定义为
$$p\left( x\right) =\sum ^{k}_{i=1}\pi _{k}p\left( x{\rm{|}}{\theta _k}\right)$$

其中 K 为模型的个数;$π_k$ 为第 k 个高斯的权重;$p(x {\rm{|}}{\theta _k})$ 则为第 k 个高斯概率密度,其均值为$μ_k$,方差为$σ_k$。对此概率密度的估计就是要求出 $π_k$、$μ_k$ 和 $σ_k$ 各个变量。当求出$p(x)$的表达式后,求和式的各项的结果就分别代表样本 x 属于各个类的概率。

对于一个高斯分布,我们可以使用极大似然估计来估计 $μ_k$ 和 $σ_k$,但问题是存在很多高斯分布,我们空有许多样本点,却无法知道 $π_k$ (我们需要使用GMM模型对样本分类,因此不知道每个样本属于哪个类,自然也就不知道类的权重 $π_k$)。那么究竟如何进行参数估计呢?GMM通常使用最大期望( Expectation Maximum,简称EM)进行参数评估。

EM算法(Expectation maximization,期望最大化)

引入一个二进制向量指标$s = { {s_k}} {\rm{,}}\;k = 1{\rm{,}}2{\rm{,}} \cdots {\rm{,}}K$来代表$x$属于哪个集群
$$s_k = 1\ \ if\ x\ belong\ to\ k_{th}\ pattern\ ,otherwire\ 0 $$

这里$p({s_{k}} = 1) = {w_k}$,是$x$ 的先验概率,模型可改写为:
$$p(x) = \sum \limits^K _ {k = 1} p({s_{k}} = 1)p(x{\rm{|}}{\theta _k})$$

后验概率分布$p({s_{nk}} = 1{\rm{|}}x)$ 可以通过贝叶斯推断如下计算

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

  1. 定义分量数目K,对每个分量k设置$π_k$,$μ_k$和$\sigma_k$的初始值,然后计算对数似然函数$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)$。
  2. E step:根据当前的$π_k$,$μ_k$和$\sigma_k$计算后验概率$p({s_{nk}} = 1{\rm{|}}x)$。

$$p({s_{nk}} = 1{\rm{|}}x) = \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)}$$

  1. M step :根据E step中计算的$p({s_{nk}} = 1{\rm{|}}x)$再计算新的$π_k$,$μ_k$和$\sigma_k$
    $$\boldsymbol{\mu}_k^{new} = \frac{1}{N_k} \sum_{n=1}^N p({s_{nk}} = 1{\rm{|}}x) \boldsymbol{x}_n$$

$$\boldsymbol{\sigma}_k^{new} = \frac{1}{N_k} \sum_{n=1}^N p({s_{nk}} = 1{\rm{|}}x) (\boldsymbol{x}_n - \boldsymbol{\mu}_k^{new}) (\boldsymbol{x}_n - \boldsymbol{\mu}_k^{new})^T $$

$$\pi_k^{new} = \frac{N_k}{N}$$

注:以上3式为分别为似然函数对$π_k$,$μ_k$和$\sigma_k$求导并令倒数为0得到。

其中:
$$N_k = \sum_{n=1}^N p({s_{nk}} = 1{\rm{|}}x)$$

  1. 计算对数似然函数
    $$\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]$$
  2. 检查参数是否收敛或对数似然函数是否收敛,若不收敛,则返回第2步。
  1. 此部分参考自:https://blog.csdn.net/jinping_shi/article/details/59613054
  2. EM算法源码可参考:https://blog.csdn.net/lihou1987/article/details/70833229
  3. 有关EM算法的通俗解释(推荐):https://www.jianshu.com/p/1121509ac1dc
  4. https://blog.csdn.net/livecoldsun/article/details/40833829

GMM模型的简单使用

使用sklearn中的isrs数据集与GMM模型进行简单使用。代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# %matplotlib inline
# -*- coding: utf-8 -*-
# python3.6
import numpy as np
from sklearn.datasets import load_iris
from sklearn import mixture
import matplotlib.pyplot as plt
iris = load_iris()
obs = iris.data
clf = mixture.GaussianMixture(n_components=3)
clf.fit(obs)
#预测
labels = clf.predict(obs)
#GMM为无监督学习,因此输出的分类label可能与原label不一致
#以下3行代码将输出的分类label改正,或许在你的电脑上输出的label与我的label也不一致,请自行改正
for i in range(len(labels)):
if labels[i]!=2:
labels[i]=0 if labels[i]==1 else 1
X = [x[0] for x in obs]
Y = [x[1] for x in obs]
# 图像可视化
fig, ((ax1, ax2)) = plt.subplots(1, 2, sharex = True, sharey = True)
plt.figure()
ax1.scatter(X, Y, c=labels, s=40, cmap='viridis')
ax1.set_title('predict')
ax2.scatter(X, Y, c=iris.target, s=40, cmap='viridis')
ax2.set_title('target')
error=[0 if i==0 else 1 for i in labels-iris.target]
print("正确率为",1-sum(error)/len(error))

输出结果

正确率为 0.9066666666666666

从预测结果可看出,黄色与绿色重叠部分存在部分样本分类错误,整体分类准确率为90%。

参考资料

  1. https://www.cnblogs.com/wjy-lulu/p/7009038.html
  2. http://blog.sina.com.cn/s/blog_69e75efd0102wylw.html
  3. https://www.cnblogs.com/txg198955/p/4097543.html

本文标题:机器学习之高斯混合模型

文章作者:微石

发布时间:2018年06月26日 - 21:06

最后更新:2018年07月25日 - 15:07

原始链接:akihoo.github.io/posts/f1703e5d.html

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。