无监督学习 | GMM 高斯混合聚类原理及Sklearn实现

文章目录

  • 1. 高斯混合聚类
    • 1.1 高斯混合分布
    • 1.2 参数求解
    • 1.3 EM 算法
  • 2. Sklearn 实现
  • 参考文献

相关文章:

机器学习 | 目录

机器学习 | 聚类评估指标

机器学习 | EM 算法原理

无监督学习 | KMeans与KMeans++原理

无监督学习 | KMeans之Sklearn实现:电影评分聚类

无监督学习 | 层次聚类 之凝聚聚类原理及Sklearn实现

无监督学习 | DBSCAN 原理及Sklearn实现

本文大部分内容搬运自周至华老师的《机器学习》[1]

1. 高斯混合聚类

k k k 均值 用原型向量来刻画聚类结构不同,高斯混合(Mixture-of-Gaussian)聚类采用概率模型来表达聚类原型

我们先简单回顾下多元高斯(正态)分布的定义。对 n n n 维样本空间 X \mathcal{X} X 中的随机向量 x x x,若服从高斯分布,其概率密度函数为:

p ( x ) = 1 ( 2 π ) n 2 ∣ Σ ∣ 1 2 e − 1 2 ( x − μ ) T Σ − 1 ( x − μ ) (1) p(\boldsymbol{x})=\frac{1}{(2 \pi)^{\frac{n}{2}}|\boldsymbol{\Sigma}|^{\frac{1}{2}}} e^{-\frac{1}{2}(\boldsymbol{x}-\boldsymbol{\mu})^{\mathrm{T}} \boldsymbol{\Sigma}^{-1}(\boldsymbol{x}-\boldsymbol{\mu})} \tag{1} p(x)=(2π)2nΣ211e21(xμ)TΣ1(xμ)(1)

其中 μ \mu μ n n n 维均值向量, Σ \Sigma Σ n × n n \times n n×n 的协方差矩阵。由上式可知,高斯分布完全由均值向量 μ \mu μ 和协方差矩阵 Σ \Sigma Σ 这两个参数确定。为了明确显示高斯分布与相应参数的依赖关系,将概率密度函数记为 p ( x ∣ μ , Σ ) p(x|\mu,\Sigma) p(xμ,Σ)

1.1 高斯混合分布

我们可以定义高斯混合分布

p M = α i ⋅ p ( x ∣ μ i , Σ i ) (2) p_{\mathcal{M}}= \alpha_i \cdot p(x|\mu_i,\Sigma_i) \tag{2} pM=αip(xμi,Σi)(2)

该分布共由 k k k 个混合成分组成,每个混合成分对应一个高斯分布。其中 μ i \mu_i μi Σ i \Sigma_i Σi 是第 i i i 个高斯混合成分的参数,而 α i > 0 \alpha_i >0 αi>0 为对应的“混合系数”(muxture coefficient),且 ∑ i = 1 k α i = 1 \sum_{i=1}^k \alpha_i =1 i=1kαi=1

假设样本的生成过程由高斯混合分布给出:首先,根据 α 1 , α 2 , . . . , α k \alpha_1,\alpha_2,...,\alpha_k α1,α2,...,αk 定义的先验分布选择高斯混合成分,其中 α i \alpha_i αi 为选择第 i i i 个混合成分的概率;然后,根据被选择的混合成分的概率密度函数进行采样,从而生成相应的样本。

若训练集 D = { x 1 , x 2 , . . . , x m } D = \{x_1,x_2,...,x_m\} D={x1,x2,...,xm} 由上述过程生成,令随机变量 z j ∈ { 1 , 2 , . . . , k } z_j \in \{1,2,...,k\} zj{1,2,...,k} 表示生成样本 x j x_j xj 的高斯混合成分,其取值未知。显然, z j z_j zj 的先验概率 P ( z j = i ) P(z_j=i) P(zj=i) 对应于 α i ( i = 1 , 2 , . . . , k ) \alpha_i(i=1,2,...,k) αi(i=1,2,...,k)

根据贝叶斯定理,有:

p M ( x j , z j = i ) = p M ( x j ) ⋅ p M ( z j = i ∣ x j ) (3) p_{\mathcal{M}}(x_j,z_j=i)=p_{\mathcal{M}}(x_j) \cdot p_{\mathcal{M}}(z_j=i|x_j) \tag{3} pM(xj,zj=i)=pM(xj)pM(zj=ixj)(3)

p M ( x j , z j = i ) = P ( z j = i ) ⋅ p M ( x j ∣ z j = i ) (4) p_{\mathcal{M}}(x_j,z_j=i)=P(z_j=i)\cdot p_{\mathcal{M}}(x_j|z_j=i) \tag{4} pM(xj,zj=i)=P(zj=i)pM(xjzj=i)(4)

所以 z j z_j zj 的后验分布对应于:

p M ( z j = i ∣ x j ) = P ( z j = i ) ⋅ p M ( x j ∣ z j = i ) p M ( x j ) = α i ⋅ p ( x j ∣ μ i , Σ i ) ∑ l = 1 k α l ⋅ p ( x j ∣ μ l , Σ l ) (5) \begin{aligned} p_{\mathcal{M}}\left(z_{j}=i | \boldsymbol{x}_{j}\right) &=\frac{P\left(z_{j}=i\right) \cdot p_{\mathcal{M}}\left(\boldsymbol{x}_{j} | z_{j}=i\right)}{p_{\mathcal{M}}\left(\boldsymbol{x}_{j}\right)} \\ &=\frac{\alpha_{i} \cdot p\left(\boldsymbol{x}_{j} | \boldsymbol{\mu}_{i}, \boldsymbol{\Sigma}_{i}\right)}{\sum_{l=1}^{k} \alpha_{l} \cdot p\left(\boldsymbol{x}_{j} | \boldsymbol{\mu}_{l}, \mathbf{\Sigma}_{l}\right)} \end{aligned} \tag{5} pM(zj=ixj)=pM(xj)P(zj=i)pM(xjzj=i)=l=1kαlp(xjμl,Σl)αip(xjμi,Σi)(5)

换言之, p M ( z j = i ∣ x j ) p_{\mathcal{M}}(z_j=i|x_j) pM(zj=ixj) 给出了样本 x j x_j xj 由第 i i i 个高斯混合成分生成的后验概率,为方便叙述,将其简记为 γ j i ( i = 1 , 2 , . . . , k ) \gamma_{ji} (i=1,2,...,k) γji(i=1,2,...,k)

当高斯混合分布 (2) 已知时,高斯混合聚类将样本集 D D D 划分为 k k k 个簇 C = { C 1 , C 2 , . . . , C k } C=\{C_1,C_2,...,C_k\} C={C1,C2,...,Ck},每个样本 x j x_j xj 的簇标记 λ j \lambda_j λj 如下确定:

λ j = arg ⁡ max ⁡ i ∈ { 1 , 2 , … , k } γ j i (6) \lambda_{j}=\underset{i \in\{1,2, \ldots, k\}}{\arg \max } \gamma_{j i} \tag{6} λj=i{1,2,,k}argmaxγji(6)

因此,从原型聚类的角度来看,高斯混合聚类时采用概率模型(高斯分布)对原型进行刻画,簇划分则由原型对应后验概率确定。

1.2 参数求解

对于高斯混合分布中的参数 { ( α i , μ i , Σ i ) ∣ 1 ≤ i ≤ k } \{(\alpha_i,\mu_i,\Sigma_i) | 1\leq i\leq k\} {(αi,μi,Σi)1ik} 的求解,对于给定样本集 D D D,可采用极大似然估计,即:

L L ( D ) = ln ⁡ ( ∏ j = 1 m p M ( x j ) ) = ∑ j = 1 m ln ⁡ ( ∑ i = 1 k α i ⋅ p ( x j ∣ μ i , Σ i ) ) (7) \begin{aligned} L L(D) &=\ln \left(\prod_{j=1}^{m} p_{\mathcal{M}}\left(\boldsymbol{x}_{j}\right)\right) \\ &=\sum_{j=1}^{m} \ln \left(\sum_{i=1}^{k} \alpha_{i} \cdot p\left(\boldsymbol{x}_{j} | \boldsymbol{\mu}_{i}, \mathbf{\Sigma}_{i}\right)\right) \end{aligned} \tag{7} LL(D)=ln(j=1mpM(xj))=j=1mln(i=1kαip(xjμi,Σi))(7)

常采用 EM 算法 进行迭代优化求解。下面我们做一个简单的推导。

若参数 { ( α i , μ i , Σ i ) ∣ 1 ≤ i ≤ k } \{(\alpha_i,\mu_i,\Sigma_i) | 1\leq i\leq k\} {(αi,μi,Σi)1ik} 能使式 (7) 最大化,则由 ∂ L L ( D ) ∂ μ i = 0 \frac{\partial L L(D)}{\partial \boldsymbol{\mu}_{i}}=0 μiLL(D)=0 ∂ L L ( D ) ∂ Σ i = 0 \frac{\partial L L(D)}{\partial \boldsymbol{\Sigma}_{i}}=0 ΣiLL(D)=0 有:

μ i = ∑ j = 1 m γ j i x j ∑ j = 1 m γ j i (8) \boldsymbol{\mu}_{i}=\frac{\sum_{j=1}^{m} \gamma_{j i} \boldsymbol{x}_{j}}{\sum_{j=1}^{m} \gamma_{j i}} \tag{8} μi=j=1mγjij=1mγjixj(8)

Σ i = ∑ j = 1 m γ j i ( x j − μ i ) ( x j − μ i ) T ∑ j = 1 m γ j i (9) \mathbf{\Sigma}_{i}=\frac{\sum_{j=1}^{m} \gamma_{j i}\left(\boldsymbol{x}_{j}-\boldsymbol{\mu}_{i}\right)\left(\boldsymbol{x}_{j}-\boldsymbol{\mu}_{i}\right)^{\mathrm{T}}}{\sum_{j=1}^{m} \gamma_{j i}} \tag{9} Σi=j=1mγjij=1mγji(xjμi)(xjμi)T(9)

从式 (8) 可以看出各混合成分的均值 μ i \mu_i μi 可通过样本加权平均来估计,样本权重是每个样本属于该成分的后验概率。

对于混合系数 α i \alpha_i αi,除了要最大化 L L ( D ) L L(D) LL(D),还要满足 α i ≥ 0 , ∑ i = 1 k α i = 1 \alpha_i \geq 0,\sum_{i=1}^k \alpha_i =1 αi0,i=1kαi=1。考虑 L L ( D ) L L(D) LL(D) 的拉格朗日形式:

L L ( D ) + λ ( ∑ i = 1 k α i − 1 ) (10) L L(D)+\lambda\bigg(\sum_{i=1}^k \alpha_i -1 \bigg) \tag{10} LL(D)+λ(i=1kαi1)(10)

其中 λ \lambda λ 为拉格朗日乘子。对式 (10) 求 α i \alpha_i αi 的导数为 0,有:

∑ j = 1 m p ( x j ∣ μ i , Σ i ) ∑ l = 1 k α l ⋅ p ( x j ∣ μ l , Σ l ) + λ = 0 (11) \sum_{j=1}^{m} \frac{p\left(\boldsymbol{x}_{j} | \boldsymbol{\mu}_{i}, \mathbf{\Sigma}_{i}\right)}{\sum_{l=1}^{k} \alpha_{l} \cdot p\left(\boldsymbol{x}_{j} | \boldsymbol{\mu}_{l}, \mathbf{\Sigma}_{l}\right)}+\lambda=0 \tag{11} j=1ml=1kαlp(xjμl,Σl)p(xjμi,Σi)+λ=0(11)

两边同乘以 α i \alpha_i αi ,对所有样本求和可知 λ = − m \lambda = -m λ=m,有:

α i = 1 m ∑ j = 1 m γ j i (12) \alpha_i = \frac{1}{m} \sum_{j=1}^m \gamma_{ji} \tag{12} αi=m1j=1mγji(12)

即每个高斯成分的混合系数有样本属于该成分的平均后验概率确定。


1.3 EM 算法

由上述推导即可获得高斯混合模型的 EM 算法:E 步:在每步迭代中,先根据当前参数来计算每个样本属于每个高斯成分的后验概率 γ j i \gamma_{ji} γjiM 步:根据式 (8)、(9)、(11) 更新模型参数 { ( α i , μ i , Σ i ) ∣ 1 ≤ i ≤ k } \{(\alpha_i,\mu_i,\Sigma_i) | 1\leq i\leq k\} {(αi,μi,Σi)1ik}

高斯混合聚类算法如下图所示。算法第 1 行对高斯混合分布的模型参数进行初始化(通常是随机或使用 KMeans 进行初始化),然后,在第 2-12 行基于 EM 算法对模型参数进行迭代更新。若 EM 算法的停止条件满足(例如已到达最大迭代轮数,或似然函数 L L ( D ) L L(D) LL(D) 增长很少甚至不再增长),则在第 14-17 行根据高斯混合分布确定簇划分,在第 18 行返回最终结果。

无监督学习 | GMM 高斯混合聚类原理及Sklearn实现_第1张图片
图1 高斯混合聚类算法的 EM 算法

2. Sklearn 实现

sklearn.mixture.GaussianMixture(n_components=1, covariance_type=’full’, tol=0.001, reg_covar=1e-06, max_iter=100, n_init=1, init_params=’kmeans’, weights_init=None, means_init=None, precisions_init=None, random_state=None, warm_start=False, verbose=0, verbose_interval=10)

参数 [2]

  1. n_components:混合高斯模型个数,默认为1
  2. covariance_type:协方差类型,包括{‘full’,‘tied’, ‘diag’, ‘spherical’}四种,分别对应完全协方差矩阵(元素都不为零),相同的完全协方差矩阵(HMM会用到),对角协方差矩阵(非对角为零,对角不为零),球面协方差矩阵(非对角为零,对角完全相同,球面特性),默认‘full’ 完全协方差矩阵
  3. tol:EM迭代停止阈值,默认为1e-3.
  4. reg_covar:协方差对角非负正则化,保证协方差矩阵均为正,默认为0
  5. max_iter:最大迭代次数,默认100
  6. n_init:初始化次数,用于产生最佳初始参数,默认为1
  7. init_params: {‘kmeans’, ‘random’}, defaults to ‘kmeans’.初始化参数实现方式,默认用kmeans实现,也可以选择随机产生
  8. weights_init:各组成模型的先验权重,可以自己设,默认按照7产生
  9. means_init:初始化均值,同8
  10. precisions_init:初始化精确度(模型个数,特征个数),默认按照7实现
  11. random_state :随机数发生器
  12. warm_start :若为True,则fit()调用会以上一次fit()的结果作为初始化参数,适合相同问题多次fit的情况,能加速收敛,默认为False。
  13. verbose :使能迭代信息显示,默认为0,可以为1或者大于1(显示的信息不同)
  14. verbose_interval :与13挂钩,若使能迭代信息显示,设置多少次迭代后显示信息,默认10次。

参考文献

[1] 李航. 统计学习方法[M]. 北京: 清华大学出版社, 2012: 95-96.

[2] QuantumChaos.SKlearn库EM算法混合高斯模型参数说明及代码实现[EB/OL].https://blog.csdn.net/lihou1987/article/details/70833229?utm_source=copy, 2017-04-26.

你可能感兴趣的:(无监督学习,#,聚类算法)