sklearn.mixture
是一个可以用来学习高斯混合模型(支持对角线(diagonal),球面(spherical),平移(tied)和全协方差矩阵(full covariance matrices))的工具包,同时它还提供了对混合分布进行抽样,以及从数据训练拟合混合模型的功能。它还提供了一些工具帮助我们确定分量的合适数量。
二元高斯混合模型(Two-component Gaussian mixture model): 数据点,以及模型的等概率平面(equi-probability surfaces)。 高斯混合模型是一种概率模型,它假定所有数据点都是由有限个参数未知的高斯分布进行混合来产生的。可以认为混合模型是k均值聚类的推广,它包含了关于数据的协方差结构和在高斯分布中的中心信息。 Scikit-learn实现了不同的类来估计高斯混合模型,这些模型对应着不同的估计策略,下面将进行详细介绍。
GaussianMixture
对象实现了用于拟合高斯混合模型的 期望最大化(expectation-maximization) (EM)算法。同时它还可以绘制多元模型的置信椭圆体,并通过计算贝叶斯信息准则来评估数据中的聚类数量。该类对象提供了从训练数据中学习高斯混合模型的 GaussianMixture.fit
方法。在给定测试数据的情况下,可以使用 GaussianMixture.predict
方法为每个样本分配它可能属于的高斯分布。 GaussianMixture
有不同的选项来约束不同类型估计方法的协方差:球面(spherical)、对角线(diagonal)、平移(tied)或完全协方差(full covariance)。
案例:
GaussianMixture
的优缺点BayesianGaussianMixture
实现了具有变分推理算法的高斯混合模型变体。这个类的API和 GaussinMixture
是类似的。
weight_concentration_prior
。低浓度先验使模型的大部分权重放在少数分量上,其余分量的权重则趋近0。而高浓度先验将使混合模型中的大部分分量都有一定的权重。 BayesianGaussianMixture
实现了两种先验权重分布:一种是利用狄利克雷分布(Dirichlet distribution)的有限混合模型,另一种是利用狄利克雷过程(Dirichlet Process)的无限混合模型。在实际应用上,狄利克雷过程推理算法是近似的,并且使用了具有固定最大分量数的截尾分布(称之为Stick-breaking representation)。使用的分量数实际上几乎取决于数据。 下图比较了权重浓度先验的不同类型(参数 weight_concentration_prior_type
) 和该类型不同的权重浓度先验值(参数 weight_concentration_prior
)。在这里,我们可以看到 weight_concentration_prior
参数的值对获得有效的激活分量数(即权重较大的分量的数量)有很大影响。我们也能注意到当先验是‘dirichlet_distribution’ 类型时,大的浓度权重先验会导致更均匀的权重,然而‘dirichlet_process’类型(默认类型)却不是这样。
下面的例子比较了分量数目固定的高斯混合模型与带有狄利克雷过程先验(Dirichlet process prior)的变分高斯混合模型。这里,使用5个分量的典型高斯混合模型在由2个聚类组成的数据集上进行拟合。我们可以看到,具有狄利克雷过程先验的变分高斯混合模型可以将自身限制在 2 个分量,而高斯混合模型必须按照用户事先设置的固定数量的分量来拟合数据。在例子中,用户设置了 n_components=5
,这不符合该数据集的真正的生成分布(generative distribution)。注意到当只有非常少量的观测,带有狄利克雷过程先验的变分高斯混合模型会采取保守的方式,只拟合一个分量。
在下图,我们拟合了没有很好被高斯混合描述的数据集。调整 BayesianGaussianMixture
的参数 weight_concentration_prior
用于控制拟合此数据的分量数。我们还在最后两个图上展示了从两个混合模型产生的随机抽样。
案例:
weight_concentration_prior_type
和 weight_concentration_prior
参数的不同值来绘制信赖椭圆面的案例,详情请参见变分贝叶斯高斯混合的浓度先验类型分析 。BayesianGaussianMixture
的优缺点
文由“壹伴编辑器”提供技术支持
☆☆☆为方便大家查阅,小编已将scikit-learn学习路线专栏 文章统一整理到公众号底部菜单栏,同步更新中,关注公众号,点击左下方“系列文章”,如图:
欢迎大家和我一起沿着scikit-learn文档这条路线,一起巩固机器学习算法基础。(添加微信:mthler,备注:sklearn学习,一起进【sklearn机器学习进步群】开启打怪升级的学习之旅。)