Python 全栈 60 天精通之路

Day 54:高斯混合模型聚类原理分析和算法实现总结

发布日期:2022年3月14日 14:56 阅读: 358 访问: 358

今天学习高斯混合模型,经典的聚类算法之一,高斯混合模型的基础思想是期望最大算法,下面我们先通过模型的背景展开高斯混合模型算法的学习。 1. 模型背景 高斯混合模型,顾名思义,多个高斯分布的结合组成的概率分布模型,简称为 GMM。 GMM 的归纳偏好为数据服从 Gaussian Distribution,换句话说,数据可以看作是从数个

今天学习高斯混合模型,经典的聚类算法之一,高斯混合模型的基础思想是期望最大算法,下面我们先通过模型的背景展开高斯混合模型算法的学习。

1. 模型背景

高斯混合模型,顾名思义,多个高斯分布的结合组成的概率分布模型,简称为 GMM。

GMM 的归纳偏好为数据服从 Gaussian Distribution,换句话说,数据可以看作是从数个 Gaussian Distribution 中生成出来的。在此假设前提下,我们再反推已知一堆数据,必须还得知道这些数据有几个部分(类)组成,知道这个基本参数,才能正确的进行聚类吧。

模型本身是可以变得任意复杂的,通过增加高斯分布的个数,可以任意地逼近任何连续的概率分布。

下面重点理解已知高斯混合模型生成的一堆数据和高斯混合模型的个数,如何正确地对它们进行聚类,把具有相似特征的数据点聚集到一起。

2. 模型案例

现在,货运公司帮小李庄运输来一大车苹果,并告知乡亲们这批苹果是从烟台、威海、青岛拉过来的。

现在车上的这些苹果都混到一起,并且还有一张表格,详细的记录着每个苹果的质量状况,最好的苹果质量得分为 1.0,最烂的接近 0.0,并且按照地域看大致分布满足:烟台的苹果质量是最好的,威海的其次,青岛的最次。

根据这些信息,检验员想着如何对它们分类,哪些苹果来自于烟台,哪些来自威海,哪些来自青岛?

利用高斯混合 GMM 模型如何最终预测出某个苹果到底来自哪个地域吗?注意 GMM 最终预测会得到每个数据(苹果)属于每个类别的概率值,而不是简单地属于谁。

比如,GMM 会分析得出苹果 k 来自烟台的概率为 0.8,来自威海的概率为 0.12,自然来自青岛的概率为 0.08,然后根据概率最大的原则确定来自的地域,如对于苹果 k,它很有可能来自烟台。

能得出一个概率值有很大好处,因为概率值可以转化为一个得分值,比单纯的得出一个 Bool 型的值要好,尤其是在某些特殊场合,GMM 的意义会更为凸显。

假如一个检测报告出来的结果:某项体侧正常;

另外一家医院给同一个人做同样的检测出来的报告:55% 可能性是正常的。

大家说说谁的预测更全面,当然是后者,因为 45% 的可能性意味着不正常,有可能亚健康,这时候可以早发现早治疗。比第一家只告诉你正常好吧,你还以为自己 99% 健康的,结果再去胡吃海塞。

3. 模型原理通俗理解

一般地,假设高斯混合模型由 k 个高斯分布组成,每个高斯分布称为一个 component,这些 component 线性组合在一起就构成高斯混合模型的概率密度函数:

$$P(x) = \sum_{i=1}^K \pi_if(x|\mu_i,\sigma_i)$$

上式就是 GMM 的概率密度函数,看到它是 K 个高斯模型的线性叠加,其中每个高斯分布对 GMM 整体的概率密度所做的贡献为系数 $\pi_i$,每个 component 是苹果质量事件的连续型随机变量的高斯分布。

确定 GMM 的概率密度函数模型后,下一步该确定上面的 3 个参数 $\pi_i$、$\mu_i$、$\sigma_i$。

根据数据确定分布参数的利器是最大似然估计,GMM 求解参数也不例外。

GMM 首先要确定数据样本 $x$ 来自于第 $k$ 个 component 的概率,也可以理解为样本 $x$ 对第 $k$ 个 component 的贡献大小。

并且第 $k$ 个 component 又对整体所做贡献,这样间接地传递到样本 $x$ 对整体 GMM 所做贡献。从而带出参数 $\pi_i$。

然后,再用最大似然估计确定所有的样本点对第 $k$ 个 component 的影响进而获得分布参数,即:均值 $\mu_k$ 和方差 $\sigma_k$。

4. 模型求解推导

现在正式推导 GMM 的求解过程,先说明几个符号表示:

  • $\pi_k$:表示第 $k$ 个簇对所有簇的贡献系数
  • $\gamma(x_i,k)$:表示样本 $x_i$ 对第 $k$ 个簇的贡献系数,这两个符号意义在第 3 节中已经做出解释。
  • $\mu_k$:表示第 $k$ 个簇的均值分布参数
  • $\sigma_k^2$:表示第 $k$ 个簇的方差分布参数
  • $f(x_i|\mu_k,\sigma_k^2)$:表示样本在第 $k$ 个簇分布已知情况下,样本 $x_i$ 的概率密度值

GMM 的推导原理是期望最大(EM)算法,共分为以下两步。

先科普多维高斯分布的概率密度公式见下:

$$f(X) = \frac{1}{(2\pi)^{d/2}|\sum|^{1/2}}e^{-\frac{1}{2}(X-\mu)^T\sum^{-1}(X-\mu)} $$

式中:

  • $X$:连续性随机变量
  • $d$:维数(也就是特征个数)
  • $\sum$:协方差(二维及以上是方阵)
  • $\mu$:均值

4.1 期望步

确定第 $i$ 个样本对第 $k$ 个簇的贡献系数:

$$\gamma(i,k) = \frac{\pi_kf(x_i|\mu_k,\sum_k)}{\sum_{j=1}^k\pi_jf(x_i|\mu_j,\sum_k)}$$

确定所有 $N$ 个样本对第 $k$ 个簇的贡献系数之和:

$$N_k = \sum_{i=1}^N\gamma(i,k)$$

4.2 最大似然步

根据最大似然估计求得高斯混合分布的两个参数值公式如下:

$$\mu_k = \frac{1}{N_k}\sum_{i=1}^N{\gamma(i,k)x_i}$$

$$\sum_k = \frac{1}{N_k}\sum_{i=1}^N{\gamma(i,k)(x_i}-\mu_k)(x_i-\mu_k)^T$$

利用此步求得的参数 $\mu_k$、$\sum_k$ 重复带入到 4.1 步中,重新计算出 $\gamma(i,k)$、$N_k$,再带入到 4.2 步中。

重复以上两步,直至各个样本点的最大似然估计值趋于稳定,最大似然估计公式,也是选用的目标函数如下:

$$loss = \sum_{i=1}^N log\{{\sum_{k=1}^K\pi_kf(x_i|\mu_k,\sum_k)}\}$$

前后两次迭代的目标函数差值不大于某个阈值,如 $10^{-15}$,即下方不等式成立时模型收敛:

$$|loss_{pre} - loss_{cur}| <= 10^{-15}$$

以上求解过程的示意图如下:

5. 小结

今天主要介绍经典聚类算法:高斯混合聚类算法,首先介绍模型的背景,借助案例讨论高斯混合模型的基本原理,最后给出模型的推导过程,主要分两步,期望步和最大似然步。