此示例说明了高斯混合模型能够在高斯随机变量的混合中对采样的数据进行拟合。数据集是由沿着有噪声的正弦曲线松散分布的100个点组成,因此,对于高斯分量的数量,是没有有用的价值的。 第一个模型是经典的高斯混合模型,该模型是用期望最大化(Expectation-Maximization)算法拟合出的具有10个分量的模型。 第二个模型是贝叶斯高斯混合模型,该模型是用变分推断拟合出具有先验狄利克雷(Dirichlet)过程的模型。先验浓度的较低的值使模型倾向于使用较少数量的活性分量。该模型会把建模能力集中在数据集结构的整体上:由非对角协方差矩阵形成的具有交替方向的一组样本点,这些交替方向可以大致捕获到原始正弦信号的交替性质。 第三个模型也是具有先验狄利克雷(Dirichlet)过程的贝叶斯高斯混合模型,但是不同的是,其先验浓度的值较高,这给模型提供了更大的自由度来对数据的细粒度结构进行建模。其结果是一个混合了具有大量有效分量的模型。 哪个模型最好?这是一个主观判断的问题:我们是要偏爱那些只捕捉大图以概括和解释大部分数据结构,而忽略细节的模型?还是更喜欢那些严格遵循信号高密度区域的模型? 最后两个图显示了,如何从后两个模型中采样。所得样本分布看起来与原始数据分布不完全相同,差异主要源于我们使用模型的近似误差,该模型假定数据是由有限数量的高斯分量而不是连续噪声正弦曲线生成的。
import itertools
import numpy as np
from scipy import linalg
import matplotlib.pyplot as plt
import matplotlib as mpl
from sklearn import mixture
pr