2.1. 高斯混合模型#
sklearn.mixture
是一个包,它使人们能够学习高斯混合模型(支持对角线、球形、绑定和完全协方差矩阵),对它们进行采样,并从数据中估计它们。还提供了帮助确定适当成分数量的工具。
高斯混合模型是一种概率模型,它假设所有数据点都是从有限数量具有未知参数的高斯分布混合中生成的。可以将混合模型视为对 k 均值聚类进行泛化,以同时包含有关数据协方差结构以及潜在高斯中心的的信息。
Scikit-learn 实现不同的类来估计高斯混合模型,这些类对应于下面详细说明的不同估计策略。
2.1.1. 高斯混合#
GaussianMixture
对象实现了用于拟合高斯混合模型的期望最大化 (EM) 算法。它还可以绘制多变量模型的置信椭圆体,并计算贝叶斯信息准则以评估数据中的聚类数量。提供了一个GaussianMixture.fit
方法,该方法可以从训练数据中学习高斯混合模型。给定测试数据,它可以使用GaussianMixture.predict
方法为每个样本分配其最可能属于的高斯分布。
GaussianMixture
提供了不同的选项来约束估计的不同类的协方差:球形、对角线、绑定或完全协方差。
示例
GaussianMixture 类的优缺点#
优点
- 速度:
它是学习混合模型最快的算法
- 无关性:
由于此算法仅最大化似然性,因此它不会使均值偏向零,也不会使聚类大小偏向可能适用或可能不适用的特定结构。
缺点
- 奇异性:
当每个混合的点数不足时,估计协方差矩阵变得困难,并且已知该算法会发散并找到似然性无限的解,除非人为地对协方差进行正则化。
- 成分数量:
该算法将始终使用其可以访问的所有成分,需要保留数据或信息论标准来决定在没有外部线索的情况下使用多少成分。
经典高斯混合模型中成分数量的选择#
BIC准则可以有效地用于选择高斯混合模型中的成分数量。理论上,它仅在渐近状态下才能恢复真实的成分数量(即,如果可用数据量很大,并且假设数据实际上是从高斯分布混合中独立同分布生成的)。请注意,使用变分贝叶斯高斯混合模型可以避免为高斯混合模型指定成分数量。
示例
有关使用经典高斯混合进行模型选择的示例,请参见高斯混合模型选择。
估计算法:期望最大化#
从未标记数据中学习高斯混合模型的主要困难在于,通常不知道哪些点来自哪个潜在成分(如果可以访问此信息,则很容易为每组点拟合单独的高斯分布)。期望最大化算法是一种完善的统计算法,可以通过迭代过程解决这个问题。首先,假设随机成分(随机地以数据点为中心,从k-means学习,甚至只是围绕原点正态分布),并计算每个点由模型每个成分生成的概率。然后,调整参数以最大化给定这些赋值的数据的似然性。重复此过程保证始终收敛到局部最优值。
初始化方法的选择#
可以选择四种初始化方法(以及输入用户定义的初始均值)来生成模型成分的初始中心。
- k-means(默认)
这应用传统的k-means聚类算法。与其他初始化方法相比,这在计算上可能比较昂贵。
- k-means++
这使用k-means聚类的初始化方法:k-means++。这将从数据中随机选择第一个中心。随后的中心将从数据的加权分布中选择,有利于远离现有中心的点。k-means++是k-means的默认初始化,因此比运行完整的k-means更快,但对于具有许多成分的大型数据集,仍然可能需要大量时间。
- random_from_data
这将从输入数据中随机选择数据点作为初始中心。这是一种非常快速的初始化方法,但是如果选择的点彼此过于接近,则可能会产生非收敛的结果。
- random
中心被选择为远离所有数据均值的小扰动。此方法很简单,但可能会导致模型收敛时间更长。
示例
有关在高斯混合中使用不同初始化的示例,请参见GMM初始化方法。
2.1.2. 变分贝叶斯高斯混合模型#
BayesianGaussianMixture
对象实现了具有变分推理算法的高斯混合模型的变体。API类似于GaussianMixture
定义的API。
估计算法:变分推理
变分推理是期望最大化的扩展,它最大化模型证据(包括先验)的下界,而不是数据似然性。变分方法背后的原理与期望最大化相同(即,两者都是迭代算法,在查找每个点由每个混合生成的概率以及将混合拟合到这些分配的点之间交替),但变分方法通过整合来自先验分布的信息来添加正则化。这避免了在期望最大化解决方案中经常发现的奇异性,但会对模型引入一些细微的偏差。推理通常明显较慢,但通常不会慢到使其无法实际使用。
由于其贝叶斯性质,变分算法比期望最大化需要更多超参数,其中最重要的是浓度参数weight_concentration_prior
。为浓度先验指定较低的值将使模型将大部分权重放在少数几个成分上,并将其余成分的权重设置为非常接近零。较高的浓度先验值将允许混合中更大数量的成分处于活动状态。
BayesianGaussianMixture
类的参数实现为权重分布提出了两种类型的先验:具有Dirichlet分布的有限混合模型和具有Dirichlet过程的无限混合模型。实际上,Dirichlet过程推理算法是近似的,并使用具有固定最大成分数的截断分布(称为Stick-breaking表示)。实际使用的成分数量几乎总是取决于数据。
下图比较了不同类型的权重浓度先验(参数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
拟合正弦波。有关绘制不同
weight_concentration_prior
参数值下具有不同weight_concentration_prior_type
的BayesianGaussianMixture
的置信椭圆的示例,请参见变分贝叶斯高斯混合的浓度先验类型分析。
使用BayesianGaussianMixture进行变分推理的优缺点#
优点
- 自动选择:
当
weight_concentration_prior
足够小且n_components
大于模型认为必要的数量时,变分贝叶斯混合模型具有将一些混合权重值设置为接近零的自然趋势。这使得模型能够自动选择合适的有效成分数量。只需要提供这个数量的上限。但是,请注意,“理想”的活动成分数量非常依赖于具体的应用,并且在数据探索环境中通常定义不明确。- 对参数数量的敏感性较低:
与有限模型不同,有限模型几乎总是尽可能多地使用所有成分,因此对于不同数量的成分会产生差异很大的结果,而具有狄利克雷过程先验的变分推理(
weight_concentration_prior_type='dirichlet_process'
)不会随着参数的变化而发生太大变化,从而提高稳定性并减少调整工作。- 正则化:
由于引入了先验信息,变分解比期望最大化解具有更少的病态特例。
缺点
- 速度:
变分推理所需的额外参数化使推理速度变慢,尽管不会慢很多。
- 超参数:
该算法需要一个额外的超参数,可能需要通过交叉验证进行实验调整。
- 偏差:
推理算法(如果使用的话,狄利克雷过程也是如此)中存在许多隐含的偏差,并且只要这些偏差与数据之间存在不匹配,就可能使用有限混合拟合更好的模型。
2.1.2.1. 狄利克雷过程#
在这里,我们描述了狄利克雷过程混合模型上的变分推理算法。狄利克雷过程是*具有无限、无界划分数量的聚类*上的先验概率分布。与有限高斯混合模型相比,变分技术使我们能够在几乎不影响推理时间的情况下,将这种先验结构融入高斯混合模型。
一个重要的问题是,狄利克雷过程如何使用无限、无界的聚类数量,同时保持一致性。虽然完整的解释不适合本手册,但可以考虑其棒子折断过程类比来帮助理解。棒子折断过程是狄利克雷过程的一个生成故事。我们从一根单位长度的棒子开始,每一步都折断剩余棒子的一部分。每次,我们将棒子片段的长度与落入混合物一组的点的比例相关联。最后,为了表示无限混合物,我们将剩余棒子的最后一段与不落入所有其他组的点的比例相关联。每段的长度是一个随机变量,其概率与浓度参数成正比。较小的浓度值会将单位长度棒子分成较大的片段(定义更集中的分布)。较大的浓度值会创建较小的棒子片段(增加具有非零权重的成分数量)。
狄利克雷过程的变分推断技术仍然使用对这个无限混合模型的有限近似,但是,不需要预先指定想要使用的成分数量,只需要指定浓度参数和混合成分数量的上限(这个上限,假设它高于“真实”成分数量,只影响算法复杂度,而不影响实际使用的成分数量)。