2.1. 高斯混合模型#
sklearn.mixture
是一个包,它使人们能够学习高斯混合模型(支持对角、球面、绑定和全协方差矩阵),对其进行抽样,并从数据中估计它们。还提供了有助于确定合适组件数量的功能。

双组分高斯混合模型:数据点和模型的等概率曲面。#
高斯混合模型是一种概率模型,它假设所有数据点都由有限数量的具有未知参数的高斯分布混合生成。可以将混合模型视为将 k-均值聚类推广,以纳入有关数据协方差结构以及潜在高斯分布中心的信息。
Scikit-learn 实现了不同的类来估计高斯混合模型,这些类对应于不同的估计策略,详情如下。
2.1.1. 高斯混合#
GaussianMixture
对象实现了用于拟合高斯混合模型的期望最大化 (EM) 算法。它还可以为多变量模型绘制置信椭球,并计算贝叶斯信息准则来评估数据中的聚类数量。提供了 GaussianMixture.fit
方法,该方法从训练数据中学习高斯混合模型。给定测试数据,它可以使用 GaussianMixture.predict
方法将每个样本分配到其最可能属于的高斯分布。
GaussianMixture
提供了不同的选项来约束所估计的不同类别的协方差:球面协方差、对角协方差、绑定协方差或全协方差。

示例
GaussianMixture 类的优缺点#
优点
- 速度:
它是学习混合模型最快的算法
- 无偏性:
由于此算法仅最大化似然,它不会使均值偏向零,也不会使聚类大小偏向于可能适用也可能不适用的特定结构。
缺点
- 奇异性:
当每个混合的点数不足时,估计协方差矩阵会变得困难,并且已知该算法会发散并找到具有无限似然的解,除非人工对协方差进行正则化。
- 组件数量:
该算法将始终使用它能访问到的所有组件,在没有外部线索的情况下,需要留出数据或信息理论准则来决定使用多少组件。
在经典高斯混合模型中选择组件数量#
估计算法:期望最大化#
从无标签数据学习高斯混合模型的主要困难在于,通常不知道哪些点来自哪个潜在组件(如果可以获得这些信息,那么为每组点拟合单独的高斯分布就变得非常容易)。期望最大化是一种基础良好的统计算法,通过迭代过程来解决这个问题。首先,假设随机组件(随机以数据点为中心,从 k-均值学习,或者只是在原点周围正态分布),并计算每个点由模型每个组件生成的概率。然后,调整参数以最大化在这些分配下数据的似然。重复此过程保证始终收敛到局部最优。
初始化方法的选择#
有四种初始化方法可供选择(以及输入用户定义的初始均值)来为模型组件生成初始中心
- k-均值(默认)
这应用了传统的 k-均值聚类算法。与其他初始化方法相比,这可能计算开销较大。
- k-均值++
这使用了 k-均值聚类的初始化方法:k-均值++。它将从数据中随机选择第一个中心。随后的中心将从数据的加权分布中选择,偏向于距离现有中心更远的点。k-均值++ 是 k-均值的默认初始化方法,因此比运行完整的 k-均值要快,但对于具有许多组件的大型数据集,仍然可能花费大量时间。
- random_from_data
这将从输入数据中随机选择数据点作为初始中心。这是一种非常快速的初始化方法,但如果选择的点彼此太近,可能会产生不收敛的结果。
- random
中心被选择为与所有数据的均值略微偏离的扰动。此方法简单,但可能导致模型收敛时间更长。

示例
有关在高斯混合中使用不同初始化的示例,请参阅GMM 初始化方法。
2.1.2. 变分贝叶斯高斯混合#
BayesianGaussianMixture
对象实现了高斯混合模型的一个变体,带有变分推断算法。其 API 类似于由 GaussianMixture
定义的。
估计算法:变分推断
变分推断是期望最大化的一种扩展,它最大化模型证据(包括先验)的下界,而不是数据似然。变分方法的原理与期望最大化相同(即两者都是迭代算法,交替进行为每个点找到由每个混合生成的概率,并将混合拟合到这些分配的点),但变分方法通过整合先验分布中的信息来添加正则化。这避免了期望最大化解中常见的奇异性,但对模型引入了一些微妙的偏差。推断通常明显更慢,但通常不足以使其无法实际使用。
由于其贝叶斯性质,变分算法需要比期望最大化更多的超参数,其中最重要的是集中参数 weight_concentration_prior
。为集中先验指定较低的值将使模型将大部分权重放在少数组件上,并将剩余组件的权重设置为非常接近零。较高的集中先验值将允许更多组件在混合中活跃。
BayesianGaussianMixture
类的参数实现为权重分布提出了两种类型的先验:带有狄利克雷分布的有限混合模型和带有狄利克雷过程的无限混合模型。实际上,狄利克雷过程推断算法是近似的,并使用具有固定最大组件数量的截断分布(称为裂棒表示)。实际使用的组件数量几乎总是取决于数据。
下图比较了不同类型的权重集中先验(参数 weight_concentration_prior_type
)在 weight_concentration_prior
不同值下的结果。在这里,我们可以看到 weight_concentration_prior
参数的值对获得的有效活跃组件数量有很强的影响。我们还可以注意到,当先验类型为“dirichlet_distribution”时,较高的集中权重先验值会导致更均匀的权重,而对于“dirichlet_process”类型(默认使用)则不一定如此。
下面的示例比较了固定组件数量的高斯混合模型与带有狄利克雷过程先验的变分高斯混合模型。在这里,一个经典高斯混合模型在一个由 2 个聚类组成的数据集上拟合了 5 个组件。我们可以看到,带有狄利克雷过程先验的变分高斯混合模型能够将自身限制为仅 2 个组件,而高斯混合模型则使用用户必须先验设置的固定数量组件来拟合数据。在这种情况下,用户选择了 n_components=5
,这与此玩具数据集的真实生成分布不符。请注意,在观测值非常少的情况下,带有狄利克雷过程先验的变分高斯混合模型可以采取保守立场,只拟合一个组件。

在下图中,我们正在拟合一个不能很好地由高斯混合描绘的数据集。调整 BayesianGaussianMixture
的 weight_concentration_prior
参数可以控制用于拟合此数据的组件数量。我们还在最后两张图中展示了从两个结果混合中生成的随机采样。

示例
有关绘制
GaussianMixture
和BayesianGaussianMixture
的置信椭球的示例,请参阅高斯混合模型椭球。高斯混合模型正弦曲线展示了如何使用
GaussianMixture
和BayesianGaussianMixture
拟合正弦波。有关绘制
BayesianGaussianMixture
在不同weight_concentration_prior_type
类型下以及参数weight_concentration_prior
不同值下的置信椭球的示例,请参阅变分贝叶斯高斯混合的集中先验类型分析。
使用 BayesianGaussianMixture 进行变分推断的优缺点#
优点
- 自动选择:
当
weight_concentration_prior
足够小且n_components
大于模型发现的必要数量时,变分贝叶斯混合模型有一种自然倾向,会将某些混合权重值设置为接近零。这使得模型能够自动选择合适的有效组件数量。只需提供此数量的上限即可。然而,请注意,“理想”的活跃组件数量是高度应用特定的,并且在数据探索环境中通常定义不明确。- 对参数数量的敏感性较低:
与有限模型不同,有限模型几乎总是会尽可能多地使用所有组件,因此对于不同数量的组件会产生截然不同的解决方案;而带有狄利克雷过程先验(
weight_concentration_prior_type='dirichlet_process'
)的变分推断不会随参数变化而变化很大,从而带来更高的稳定性和更少的调优。- 正则化:
由于纳入了先验信息,变分解决方案比期望最大化解决方案具有更少的病态特殊情况。
缺点
- 速度:
变分推断所需的额外参数化会使推断变慢,尽管不多。
- 超参数:
此算法需要一个额外的超参数,可能需要通过交叉验证进行实验性调优。
- 偏差:
推断算法中存在许多隐式偏差(如果使用了狄利克雷过程,也存在其中),每当这些偏差与数据不匹配时,就有可能使用有限混合来拟合更好的模型。
2.1.2.1. 狄利克雷过程#
在这里,我们描述了狄利克雷过程混合上的变分推断算法。狄利克雷过程是针对具有无限、无界分区数量的聚类的先验概率分布。与有限高斯混合模型相比,变分技术使我们能够在高斯混合模型上纳入这种先验结构,而推断时间几乎没有损失。
一个重要问题是,狄利克雷过程如何使用无限、无界数量的聚类并仍然保持一致性。虽然完整的解释不适合本手册,但可以将其裂棒过程类比来帮助理解。裂棒过程是狄利克雷过程的一个生成故事。我们从一根单位长度的棒子开始,每一步折断剩余棒子的一部分。每次,我们将棒子片段的长度与落入混合组的点所占比例关联起来。最后,为了表示无限混合,我们将最后剩余的棒子片段与不落入所有其他组的点所占比例关联起来。每个片段的长度是一个随机变量,其概率与集中参数成比例。较小的集中值会将单位长度分成较大的棒子片段(定义更集中的分布)。较大的集中值将创建较小的棒子片段(增加非零权重的组件数量)。
狄利克雷过程的变分推断技术仍然使用这个无限混合模型的有限近似,但无需先验指定要使用多少组件,只需指定集中参数和混合组件数量的上限(这个上限,假设它高于“真实”的组件数量,只影响算法复杂度,不影响实际使用的组件数量)。