2.1. 高斯混合模型#

sklearn.mixture 是一个包,它允许学习高斯混合模型(支持对角、球形、绑定和完全协方差矩阵),对它们进行采样,并从数据中估计它们。还提供了帮助确定适当成分数量的工具。

../_images/sphx_glr_plot_gmm_pdf_001.png

双成分高斯混合模型: 数据点和模型的等概率曲面。#

高斯混合模型是一种概率模型,它假设所有数据点都是从有限数量的具有未知参数的高斯分布的混合中生成的。可以将混合模型视为对 k 均值聚类的一种泛化,它不仅包含潜在高斯分布的中心信息,还包含数据的协方差结构信息。

Scikit-learn 实现不同的类来估计高斯混合模型,这些类对应于不同的估计策略,详述如下。

2.1.1. 高斯混合#

GaussianMixture 对象实现了 期望最大化 (EM) 算法来拟合高斯混合模型。它还可以绘制多变量模型的置信椭圆,并计算贝叶斯信息准则来评估数据中聚类的数量。提供了 GaussianMixture.fit 方法,它可以从训练数据中学习高斯混合模型。给定测试数据,它可以使用 GaussianMixture.predict 方法将每个样本分配到它最可能属于的高斯分布。

GaussianMixture 提供了不同的选项来约束估计的不同类的协方差:球形、对角、绑定或完全协方差。

../_images/sphx_glr_plot_gmm_covariances_001.png

示例

GaussianMixture 类别的优缺点#

优点

速度:

它是学习混合模型最快的算法

无偏:

由于该算法仅最大化似然函数,因此它不会将均值偏向零,也不会将聚类大小偏向可能存在也可能不存在的特定结构。

缺点

奇异性:

当每个混合成分的点数不足时,估计协方差矩阵变得困难,除非人为地对协方差进行正则化,否则该算法已知会发散并找到似然函数为无穷大的解。

成分数量:

该算法始终会使用所有可用的成分,需要保留数据或信息论标准来决定在没有外部线索的情况下使用多少成分。

在经典高斯混合模型中选择成分数量#

BIC 准则可用于有效地选择高斯混合模型中的成分数量。理论上,它仅在渐近状态下才能恢复真实的成分数量(即,如果可用大量数据,并且假设数据实际上是从高斯分布混合中独立同分布生成的)。请注意,使用 变分贝叶斯高斯混合 可以避免为高斯混合模型指定成分数量。

../_images/sphx_glr_plot_gmm_selection_002.png

示例

估计算法期望最大化#

从未标记数据中学习高斯混合模型的主要困难在于,通常不知道哪些点来自哪个潜在成分(如果可以访问此信息,则很容易为每个点集拟合一个单独的高斯分布)。期望最大化 是一种经过充分验证的统计算法,可以通过迭代过程解决此问题。首先,假设随机成分(随机地以数据点为中心,从 k 均值学习,甚至只是以原点为中心呈正态分布),并计算每个点由模型的每个成分生成的概率。然后,调整参数以最大化给定这些分配的数据的似然函数。重复此过程保证始终收敛到局部最优解。

初始化方法的选择#

有四种初始化方法可供选择(以及输入用户定义的初始均值)来生成模型成分的初始中心:

k 均值(默认)

这将应用传统的 k 均值聚类算法。与其他初始化方法相比,这在计算上可能很昂贵。

k 均值++

这将使用 k 均值聚类的初始化方法:k 均值++。这将从数据中随机选择第一个中心。后续中心将从数据的加权分布中选择,该分布有利于远离现有中心的点。k 均值++ 是 k 均值的默认初始化,因此将比运行完整的 k 均值更快,但对于具有许多成分的大型数据集,它仍然可能需要大量时间。

random_from_data

这将从输入数据中随机选择数据点作为初始中心。这是一种非常快的初始化方法,但如果所选点彼此过于接近,则可能会产生不收敛的结果。

random

中心被选择为远离所有数据的平均值的小扰动。这种方法很简单,但会导致模型收敛时间更长。

../_images/sphx_glr_plot_gmm_init_001.png

示例

2.1.2. 变分贝叶斯高斯混合#

BayesianGaussianMixture 对象实现了高斯混合模型的一种变体,该变体使用变分推理算法。API 与 GaussianMixture 定义的 API 类似。

估计算法:变分推理

变分推理是期望最大化的扩展,它最大化模型证据(包括先验)的下界,而不是数据似然函数。变分方法背后的原理与期望最大化相同(即两者都是迭代算法,在找到每个点由每个混合生成的概率和将混合拟合到这些分配的点之间交替),但变分方法通过整合来自先验分布的信息来添加正则化。这避免了期望最大化解中经常出现的奇异性,但会对模型引入一些细微的偏差。推理通常明显更慢,但通常不会慢到使使用变得不切实际。

由于其贝叶斯性质,变分算法比期望最大化需要更多的超参数,其中最重要的超参数是浓度参数 weight_concentration_prior。为浓度先验指定较低的值将使模型将大部分权重放在少数成分上,并将剩余成分的权重设置为非常接近零。浓度先验的高值将允许混合中更多的成分处于活动状态。

BayesianGaussianMixture 类的参数实现为权重分布提出了两种类型的先验:具有狄利克雷分布的有限混合模型和具有狄利克雷过程的无限混合模型。在实践中,狄利克雷过程推理算法是近似的,并使用具有固定最大成分数量的截断分布(称为“Stick-breaking”表示)。实际使用的成分数量几乎总是取决于数据。

下图比较了针对不同类型的权重浓度先验(参数 weight_concentration_prior_type)在不同 weight_concentration_prior 值下获得的结果。在这里,我们可以看到 weight_concentration_prior 参数的值对获得的有效活动成分数量有很大影响。我们还可以注意到,当先验类型为“dirichlet_distribution”时,浓度权重先验的大值会导致更均匀的权重,而对于“dirichlet_process”类型(默认使用)则不一定如此。

plot_bgmm plot_dpgmm

以下示例将具有固定数量组件的高斯混合模型与具有狄利克雷过程先验的变分高斯混合模型进行比较。这里,一个经典的高斯混合模型在由 2 个聚类组成的数据集上拟合了 5 个组件。我们可以看到,具有狄利克雷过程先验的变分高斯混合模型能够将自身限制为只有 2 个组件,而高斯混合模型则使用固定数量的组件来拟合数据,这些组件必须由用户事先设置。在本例中,用户选择了 n_components=5,这与该玩具数据集的真实生成分布不匹配。请注意,在观察结果很少的情况下,具有狄利克雷过程先验的变分高斯混合模型可以采取保守立场,只拟合一个组件。

../_images/sphx_glr_plot_gmm_001.png

在下图中,我们正在拟合一个数据集,该数据集不能很好地用高斯混合模型来描述。调整 weight_concentration_priorBayesianGaussianMixture 的参数控制用于拟合此数据的组件数量。我们还在最后两个图中展示了从两个结果混合中生成的随机样本。

../_images/sphx_glr_plot_gmm_sin_001.png

示例

使用 BayesianGaussianMixture 进行变分推断的优缺点#

优点

自动选择:

weight_concentration_prior 足够小且 n_components 大于模型认为必要的数量时,变分贝叶斯混合模型自然倾向于将一些混合权重值设置为接近零。这使得模型能够自动选择合适的有效组件数量。只需要提供此数量的上限。但是请注意,“理想”的活动组件数量非常依赖于具体应用,并且在数据探索设置中通常定义不明确。

对参数数量的敏感度较低:

与有限模型不同,有限模型几乎总是尽可能多地使用所有组件,因此会针对不同数量的组件产生截然不同的解决方案,而具有狄利克雷过程先验的变分推断 (weight_concentration_prior_type='dirichlet_process') 不会随着参数的变化而发生太大变化,从而导致更高的稳定性和更少的调整。

正则化:

由于结合了先验信息,变分解比期望最大化解具有更少的病态特例。

缺点

速度:

变分推断所需的额外参数化使得推断速度变慢,尽管速度并没有慢很多。

超参数:

该算法需要一个额外的超参数,可能需要通过交叉验证进行实验调整。

偏差:

推断算法(以及使用时也包括狄利克雷过程)中存在许多隐式偏差,每当这些偏差与数据之间存在不匹配时,可能可以使用有限混合模型拟合更好的模型。

2.1.2.1. 狄利克雷过程#

这里我们描述了狄利克雷过程混合模型上的变分推断算法。狄利克雷过程是具有无限、无界、数量分区的聚类的先验概率分布。变分技术使我们能够将这种先验结构纳入高斯混合模型,而推断时间几乎没有损失,与有限高斯混合模型相比。

一个重要的问题是,狄利克雷过程如何使用无限、无界的聚类数量,同时保持一致性。虽然完整的解释不适合本手册,但可以考虑其 折棍过程 类比来帮助理解它。折棍过程是狄利克雷过程的生成故事。我们从一根单位长度的棍子开始,在每一步中,我们都会折断剩余棍子的一部分。每次折断时,我们将棍子片段的长度与落入混合组中的点的比例相关联。最后,为了表示无限混合,我们将剩余的最后一段棍子与不落入所有其他组的点的比例相关联。每个片段的长度是一个随机变量,其概率与浓度参数成正比。较小的浓度值将单位长度分成较大的棍子片段(定义更集中的分布)。较大的浓度值将创建较小的棍子片段(增加具有非零权重的组件数量)。

狄利克雷过程的变分推断技术仍然使用对这种无限混合模型的有限近似,但与必须事先指定要使用多少个组件不同,只需要指定浓度参数和混合组件数量的上限(假设此上限高于“真实”组件数量,它只影响算法复杂度,不影响实际使用的组件数量)。