作者
Joshua Noble
Data Scientist
高斯混合模型释义
高斯混合模型 (GMM) 是一种概率模型,它将数据表示为多个高斯分布的组合,每个高斯分布都有自己的均值和方差,由混合系数加权。GMM 常用于聚类和密度估计,因为它们能够捕捉复杂的多峰分布,其中数据点可能自然地围绕不同中心聚集,而不是单一均值。
单一的高斯分布,也称为“正态分布”,描述了多种自然现象。教室里学生的身高、新生儿的体重以及机械零件的使用寿命分布通常呈高斯分布。
然而,单一的高斯分布并不适合用于对具有多个数据簇、显著偏斜或厚尾特征的数据集进行建模。在这些情况下,GMM 可能更合适。
GMM 使用无监督学习来生成概率模型,该模型假设数据是由多个高斯分布的组合生成的。GMM 并不假定所有数据都源自一个单一的正态分布(即一个高斯模型),而是假设存在多个正态分布,每个都代表一个不同的“簇”或“子群体”,且各自拥有其均值与方差,这些分布共同构成了整个数据集。
我们可以学生身高为例,设想一个双峰分布的场景,且学生的性别身份是未知的。对于机器零件,可以设想它们可能源自两家不同的供应商,其中一家的产品质量更优。在这两种情况下,计算数据点属于哪个子群体以及该子群体的特征都可能很有用。
专家为您带来最新的 AI 趋势
获取有关最重要且最有趣的 AI 新闻的精选洞察分析。订阅我们的每周 Think 时事通讯。请参阅 IBM 隐私声明。
谢谢!您已订阅。
高斯混合模型的工作原理
除了聚类之外,GMM 还有许多现实应用:分割、密度估计、异常检测和模式识别都可以通过 GMM 进行近似。
这是一个具有挑战性的分布,显然不是高斯分布:
非高斯分布
人们可以尝试使用多项式拟合或三角近似来找出该曲线的方程,但 GMM 提供了一种计算要求较低的强大替代方案。这种分布实际上是三种不同高斯分布的组合:
先前的分布分解为三个高斯分布
GMM 会将上述分布分解为三个不同的高斯分布,并计算每个高斯分布的参数。上面显示的分布具有单一维度,但 GMM 也适用于更高维度的分布。二维的两个高斯混合可以分解为两个不同的分布。
使用等高线图绘制的二维高斯分布图
当用作聚类算法时,混合模型中的每个高斯分布都有三个关键参数:
平均矢量 (μ):簇的中心。在一维分布中,这将是一个单值矢量。在 n 维分布中,这将是一个 n 值矢量。
协方差矩阵 (Σ):这是高斯本身的扩散/形状。在一维分布中,这将是一个单一值,而在 n 维分布中,这将是一个 n x n 矩阵。
混合权重 (π):表示随机选择一个数据点,它来自于某个特定成分的概率。这实际上不是高斯分布本身的特征,而是模型的特征,因为它结合了不同的高斯分布来表示拟合数据。
Mixture of Experts | 12 月 12 日,第 85 集
解码 AI:每周新闻摘要
加入我们世界级的专家小组——工程师、研究人员、产品负责人等将为您甄别 AI 领域的真知灼见,带来最新的 AI 资讯与深度解析。
观看 Mixture of Experts 所有剧集
拟合 GMM
GMM 的目标是估计模型中每个高斯分布的参数以及每个数据点属于哪个高斯分布。潜在变量通常被称为 z,是指在模型中确定的所有成分中,哪个高斯成分产生了给定的数据点。此变量为“潜在”变量,因为它是可以从模型中学习的隐藏(或不可观测)变量。
对于每个点 xn,存在一个zn(其中 n 为成分数),它表示生成的xi的高斯分布(这里 i 为数据点的数量)。zn在数据中从未被观测到,只有点xi被观测到。此外,生成xi的高斯成分也无法被直接观测。取而代之的是,模型的期望最大化算法会推断出可能的 z 值的分布。
每个高斯成分都有一个混合系数进行加权,该系数表示每个分布对特定数据点位置影响的估计程度。在聚类方案中,混合权重反映了每个簇的相对大小。GMM 表示:要计算 x 的概率,可以这样理解,首先根据πk随机选择一个高斯成分,然后从该高斯成分中生成 x。因此p(x)是各成分密度的混合。如果 x 接近多个均值μk,则多个高斯成分可能会为其分配较高的概率,而它们的贡献会叠加。整个模型就是这些高斯概率分布的加权和。
在数学上,具有 K 个成分的 GMM 中,数据点x的概率密度函数为:
p(x)=∑k=1KπkN(x∣μk,Σk)
具体来说:
πk:这是混合成分 k 的混合权重,用于估计高斯成分 k 对该数据点的贡献程度。
N(x∣μk,Σk):表示具有以下参数的高斯分布:
μk均值矢量,可视为以下高斯成分的中心:k
Σk协方差矩阵,表示以下高斯成分“分布范围和方向”:k
在x处的总概率密度为p(x)它是所有高斯成分的加权和。
期望最大化
GMM 通常使用期望最大化 (EM) 算法进行拟合,该算法通过迭代方式进行:首先分配每个数据点属于各高斯成分的概率,这一步称为 E 步;然后更新每个高斯成分的参数,这一步称为 M 步。
当像最大似然估计 (MLE) 这样的算法难以使用时,例如在 GMM 的情况下,EM 是一种强有力的参数估计方法。在 GMM 中,模型几乎总是通过对数似然函数进行拟合。该对数似然是非线性的,难以通过分析最大化,这意味着 MLE 无法直接最大化。此外,GMM 具有潜变量(混合权重),这些在数据中不可直接观测,而最大似然估计 (MLE) 在标签置换时无法发现这些潜变量。
另一种方法,随机梯度下降 (SGD),要求基础目标函数是可微的,但情况可能并非总是如此。此外,与 EM 不同,SGD 不能轻易并行化,并且需要大量计算资源来处理大型数据。使用 map-reduce 等方法对 EM 进行并行处理是一种强大的优化方法。
EM 包括四个步骤:
1. 初始化
EM 算法从随机初始参数值开始,并假设观测数据来自可以估计的模型。在许多 GMM 的实现中,从业者可从多种初始化方式中选择,如通过 K 均值、随机赋值或训练数据采样来确定初始归属权重。
2. E 步骤(预期步骤)
我们计算后验概率,这是数据点到成分的“软分配”。实际上,这就是在问:根据当前的参数估计,“每个高斯成分对每个数据点的‘占有量’有多少?”
首先,根据观测数据计算每个潜在变量的后验概率。zi=k 的概率,即 xi 属于第 k 个成分,可以使用贝叶斯规则计算:
P(Zi=k∣xi;θ)=p(xi∣Zi=k;θ)P(Zi=k;θ)p(xi;θ)
接下来,使用当前参数估计值计算观测数据的对数似然。关于潜在变量分布的期望对数似然现在可以写为如下形式:
Q(θ,θold)=∑i=1n∑k=1Kγ(zik)log[wkN(xi;μk,Σk)]
函数 Q 是每个高斯成分下所有数据点对数似然的加权和,其权重即为责任值。对数似然是计算数据点可能从该分布中产生的可能性,以及每个成分的估计值。这与混合模型下观测数据的整体可能性不同。相反,该 Q 函数表示观测数据和估计的潜在变量分布的预期对数似然。
3. M 步(最大化步骤)
M 步为每个高斯分布更新三个不同的值:
平均更新通常表示为μknew
更新协方差矩阵,通常表示为Σknew
更新混合权重,通常表示为wknew
下一步是通过最大化模型生成数据的对数似然来更新模型参数。模型越好,该值就越高。
μknew=∑i=1nγ(zik)xi∑i=1nγ(zik)
也就是说,第 k个成分的新均值是所有数据点的加权平均值,权重为这些数据点属于以下成分的概率:k .
Σknew=∑i=1nγ(zik)(xi-μknew)(xi-μknew)⊤∑i=1nγ(zik)
这表示成分k的新协方差是每个数据点相对于该成分均值的平方偏差的加权平均值,其中权重为这些数据点被分配到该成分的概率。
最后,M 步更新混合权重:
wknew=1n∑i=1nγ(zik)
第k个成分的新权重是属于该成分的数据点的总概率,归一化处理,除以n .
4. 收敛
最后,EM 检查模型参数是否稳定并正在收敛。如果对数似然或参数的变化低于设定的阈值,算法就会停止。如果不是,EM 重复第 2 步和第 3 步,直到收敛。
简而言之,EM 算法由两个迭代重复的步骤组成。首先,E 步计算每个数据点的所有高斯的混合权重。然后,M 步使用这些更新的混合权重来重新估计每个高斯的参数。然后,EM 比较对数似然的变化,如果低于设定的阈值,则假设收敛并停止迭代。
比较高斯混合模型
GMM 功能强大,但依赖于高斯假设。为了让 GMM 能够很好地表示数据,簇需要呈椭圆形,并且各簇的密度分布应平滑。具有非椭圆形状的簇或包含高密度与低密度区域的数据,可能无法被 GMM 良好表示。
当用于聚类时,GMM 与 k 均值聚类类似,但有几个关键区别。首先,不同于将每个点分配到一个簇的 k 均值,GMM 会给出每个点属于各簇的概率。这被称为“软聚类”。由于簇可以是椭圆形的且相互重叠的,因此 GMM 通常更灵活,并且允许簇边界存在更大的不确定性。
对于二进制或分类数据,GMM 的效果不佳,但使用伯努利分布或多项式分布的类似方法可以很好地拟合数据。相反,这类模型无法很好地拟合由连续变量组成的数据,而 GMM 通常能够很好地拟合这类数据。
由于 GMM 尝试估计高斯分布的参数,因此使用核密度估计 (KDE) 等非参数方法可以更好地对某些数据进行建模。KDE(核密度估计)不对簇或子群体的分布做任何假设,而是对每个数据点上的小型局部核进行密度估计。当数据具有复杂分布且不假设特定形状时,这种方法非常有用。
GMM 的一种扩展是变分自编码器(VAE),这是一种生成模型,可以学习灵活的潜在分布。在 VAE 中,总体目标是相同的,但 VAE 不使用 EM。VAE 使用概率编码器-解码器框架来学习潜在表示,就像 GMM 为每个数据点分配混合权重一样。主要区别在于,EM 要求能够计算后验概率,而在 VAE 中则不需要,这使得 VAE 更加灵活。代价是 VAE 训练起来通常更复杂、更耗时。
GMM 用例
本讲解主要侧重于聚类,因为它为 GMM 提供了直观的入门介绍,但在其他场景中,GMM 也可能非常有用。特征工程、异常检测和密度估计都是 GMM 可发挥强大作用的常见任务。
特征工程:虽然一些机器学习算法(如 XGBoost)可以让模型学习各种特征分布,但其他算法的要求更为严格。线性和逻辑回归、线性判别分析 (LDA) 以及多元高斯分布通常假设特征服从正态分布,如果数据呈多峰分布,可能无法良好工作。还有其他分析和视觉原因可用于处理多模态,GMM 可以提供帮助。
无监督分类:GMM 的工作方式类似于 K-means 算法,但它允许以概率的方式确定所属类别,而 K-means 的输出是二元指标。这对于需要自定义分类阈值或需要概率输出的应用场景尤其有益。
异常检测:多元高斯分布可用于识别那些在一个或多个高斯分布下概率较低的数据点。通过这种方式,GMM 可以帮助发现两类异常数据:一类是群体中的离群值(例如,数据输入错误),另一类是形成独立群体的异常(例如,信用卡欺诈行为)。
GMM 是一种适用于各种任务的模型,可以快速训练并轻松优化。尽管在适用的数据类型方面存在一些限制,但它在各种机器学习和数据科学任务中仍具有很大价值。
实施 GMM
在 Python 中,我们可以使用 scikit-learn库以快速创建 GMM:
from sklearn.datasets import make_blobs
from sklearn.mixture import GaussianMixture
from sklearn.metrics import accuracy_score
# create some clusters
X, y = make_blobs(n_samples=400, centers=3, cluster_std=0.75, random_state=0)
# fit the GMM
gmm = GaussianMixture(n_components=3).fit(X)
可视化 GMM 聚类的结果:
# predict the labels themselves
labels = gmm.predict(X)
# print the accuracy
print(f" Accuracy is {accuracy_score(y, labels)}")
# scatterplot the X values
plt.scatter(X[:, 0], X[:, 1], c=labels, s=40, cmap='viridis')
在 R 中,有一个名为 mclust 的包(代表基于模型的聚类),可用于构建 GMM。
# Install and load the 'mclust' package
library(mclust)
# create a matrix of data from normal distributions
data <- rbind(matrix(c(rnorm(50, mean = 0, sd = 1), rnorm(50, mean = 1, sd = 1.25)), ncol=2),
matrix(c(rnorm(50, mean = 4, sd = 1), rnorm(50, mean = 2, sd = 1.25)), ncol = 2),
matrix(c(rnorm(50, mean = 8, sd = 1.25), rnorm(50, mean = 4, sd = 0.75)), ncol = 2))
# Perform GMM clustering, G represents the number of expected clusters
gmm_model <- Mclust(data, G = 3)
# Get the cluster assignments
cluster_assignments <- predict(gmm_model)$classification
# Visualize the results
plot(data, col = cluster_assignments, main = "GMM Clustering Results")
points(gmm_model$parameters$mean, col = 1:3)
在 Python 和 R 中,开发者都需要将指定簇数量的超参数设置为 GMM 的参数。与 KNN 类似,选择簇数量的常用策略是为不同簇数量训练模型,并对每个模型进行比较。用于比较模型的最常用指标有:
轮廓系数:该指标针对每个样本定义,由两个分数组成:样本与同一簇中所有其他点的平均距离,以及样本与最近邻簇中所有其他点的平均距离。
Jensen-Shannon:用于测量分布之间的差异,最常用的计算方法是首先计算 Kullback-Leibler 分歧,即样本的对数似然比的平均值,然后求出两个 KL 分歧值的平均值。分布相似性的概念由 Jensen-Shannon (JS) 指标表示。两个 GMM 之间的 JS 距离越小,这两个 GMM 在如何拟合数据方面就越一致。
贝叶斯信息准则 (BIC):这可以估计模型对数据的预测效果,同时考虑模型所包含的参数数量进行平衡。如果 K 太小,则模型的对数似然将较低,BIC 值将较大。如果 K 过大,似然可能较高,但对较大值的惩罚(从而导致过拟合)也会使 BIC 值增大。 Akaike 信息准则 (AIC):其工作方式与 BIC 非常相似,但对参数数量的惩罚较小。
复制链接