0
高斯混合模型是一种强大的聚类算法。本文将带你了解高斯混合模型的工作原理以及如何在 Python 中实现它们,我们还将讨论 k-means 聚类算法,看看高斯混合模型是如何对它进行改进的。
我真的很喜欢研究无监督的学习问题。相对于一个有监督的学习问题来说,它们提供了一个完全不同的挑战——有更多的空间来试验我的数据。难怪机器学习领域的大多数发展和突破都发生在无监督学习领域。
无监督学习中最流行的技术之一是聚类。这是一个概念且很容易掌握,我们通常在机器学习的早期学习它。我相信你已经经历甚至参与过客户细分、市场篮分析等项目。
高斯混合模型
但问题是——集群有很多层。它不仅限于我们之前学习的基本算法。它是一种强大的无监督学习技术,我们可以在现实世界中准确无误地使用它。
高斯混合模型是我在本文中要讨论的一种聚类算法。
想预测你最喜欢的产品的销量吗?想通过不同客户群体的视角来理解客户流失?不管是什么用例,你都会发现高斯混合模型非常有用。
在本文中,我们将采用自下而上的方法。因此,我们将首先学习聚类的基础知识,包括快速回顾 k-means 算法。然后,我们将深入研究高斯混合模型的概念并用 Python 实现它们。
如果你对集群和数据科学还不熟悉,我建议您学习以下综合课程:Applied Machine Learning
本文将分为以下几个部分:
聚类简介
k-means 聚类简介
k-means 聚类的缺点
高斯混合模型简介
高斯分布
什么是期望最大化?
高斯混合模型中的期望最大化
聚类简介
在我们开始讨论高斯混合模型的本质之前,让我们快速更新一些基本概念。
注意:如果你已经熟悉了聚类背后的思想以及 k-means 聚类算法的工作原理,可以直接跳到第四节「高斯混合模型简介」。
因此,让我们从正式定义开始:
聚类是指根据相似数据点的属性或特征将它们分组在一起。
例如,如果我们有一组人的收入和支出,我们可以将他们分为以下几类:
高收入,高消费
高收入,低消费
低收入,低消费
低收入,高消费
这些组都分别拥有一个具有相似特征,这在向组投递相关方案/产品时非常有用。想想信用卡、汽车/房产贷款是不是这样的?简单地说:
集群背后的思想是将数据点分组在一起,这样每个单独的集群都拥有最相似的数据点。
有各种各样的聚类算法。最流行的聚类算法之一是 k-means。让我们了解 k-means 算法是如何工作的,以及该算法可能达不到预期的情况。
k-means 聚类简介
k-means 聚类是一种基于距离的聚类算法。这意味着它试图将最近的点分组以形成一个簇。
让我们仔细看看这个算法是如何工作的。这将帮助你了解高斯混合模型是如何在本文后面发挥作用的。
因此,我们首先定义要将总体划分为的组的数量——这是 k 的值。根据需要的簇或组的数量,随机初始化 k 个质心。
然后将数据点指定给最近的质心,形成一个簇。然后更新质心并重新分配数据点。这个过程不断重复,直到质心的位置不再改变。
这里有个视频代表了初始化和更新集群的整个过程,其中,群集数被指定为 10:https://thumbs.gfycat.com/SoftEnragedHypsilophodon-mobile.mp4
注意:这是 k-means 聚类的简要概述,对于本文来说已经足够了。如果你想深入研究 k-means 算法的工作,这里有一个深入的指南:The Most Comprehensive Guide to k-means you’ll Ever Need !
k-means 聚类的缺点
k-means 聚类概念听起来不错,对吧?它易于理解,相对容易实现,并且可以应用于很多用例中。但也有一些缺点和局限性需要我们注意。
让我们以我们在上面看到的同样的收支例子为例。k-means 算法似乎运行得很好,但是,如果你仔细观察,你会发现所有创建的簇都是圆形的。这是因为集群的质心是使用平均值迭代更新的。
现在,考虑下面的例子,其中点的分布不是圆形的。如果我们对这些数据使用 k-means 聚类,你认为会发生什么?它仍然试图以循环方式对数据点进行分组。那不太好!k-means 无法识别正确的集群:
k-means 高斯混合模型
因此,我们需要一种不同的方法来将集群分配给数据点。因此,我们不再使用基于距离的模型,而是使用基于分布的模型。
高斯混合模型简介
高斯混合模型(GMMs)假设存在一定数量的高斯分布,并且每个分布代表一个簇。因此,高斯混合模型倾向于将属于单一分布的数据点组合在一起。
假设我们有三个高斯分布——GD1、GD2 和 GD3。它们分别具有一定的均值(μ1,μ2,μ3)和方差(σ1,σ2,σ3)。对于给定的一组数据点,我们的 GMM 将识别属于这些分布的每个数据点的概率。
等等,概率?
对的!高斯混合模型是一种概率模型,采用软聚类方法对不同的聚类点进行分布。我再举一个例子,让大家更容易理解。
在这里,我们有三个集群,用三种颜色表示——蓝色、绿色和青色。让我们以红色突出显示的数据点为例。该点成为蓝色团簇一部分的概率为 1,而成为绿色或青色团簇一部分的概率为 0。
高斯混合模型
现在,考虑另一个点-介于蓝色和青色之间(在下图中突出显示)。这个点是绿色簇的一部分的概率是 0,对吧?这属于蓝色和青色的概率分别为 0.2 和 0.8。
高斯混合模型使用软聚类技术将数据点分配给高斯分布。你肯定想知道这些分布是什么,所以让我在下一节解释一下。
高斯分布
我相信你熟悉高斯分布(或正态分布)。它有一个钟形曲线,数据点围绕平均值对称分布。
下图有一些高斯分布,平均值(μ)和方差(σ2)不同。记住,σ 值越高,价差越大:
高斯混合模型(来源:维基百科)
在一维空间中,高斯分布的概率密度函数由下式给出:
高斯分布
其中μ是平均值,σ2 是方差。
但这只适用于单个变量。在两个变量的情况下,我们将得到如下所示的三维钟形曲线,而不是二维钟形曲线:
高斯混合模型
概率密度函数由以下公式给出:
高斯分布
其中 x 是输入向量,μ是 2D 平均向量,∑ 是 2×2 协方差矩阵。协方差现在可以定义曲线的形状。我们也可以对 d 维进行推广。
因此,这个多元高斯模型将 x 和 μ 作为长度 d 的向量,∑ 将是一个 d×d 协方差矩阵。
因此,对于具有 d 个特征的数据集,我们将得到 k 个高斯分布(其中 k 相当于簇的数量)的混合,每个都有一定的平均向量和方差矩阵。但是,如何分配每个高斯分布的均值和方差值?
这些值用一种叫做期望最大化(EM)的技术来确定。在深入研究高斯混合模型之前,我们需要了解这项技术。
什么是期望最大化?
好问题!
期望最大化(EM)是寻找正确模型参数的统计算法。当数据缺少值时,或者换句话说,当数据不完整时,我们通常使用 EM。
这些缺失的变量称为潜在变量。当我们在研究一个无监督学习问题时,我们认为目标(或簇数)是未知的。
由于缺少这些变量,很难确定正确的模型参数。这样想吧——如果你知道哪个数据点属于哪个集群,你就很容易确定平均向量和协方差矩阵。
由于我们没有潜在变量的值,期望最大化试图利用现有数据来确定这些变量的最优值,然后找到模型参数。基于这些模型参数,我们返回并更新潜在变量的值。
广义上,期望最大化算法有两个步骤:
E-step:在这个步骤中,可用的数据用于估计(猜测)丢失变量的值
M-step:根据 E-step 中生成的估计值,使用完整的数据更新参数
期望最大化是许多算法的基础,包括高斯混合模型。那么,GMM 如何使用 EM 的概念,以及如何将其应用于给定的点集?让我们看看!
高斯混合模型中的期望最大化
让我们用另一个例子来理解这一点。我想让你在读的时候自己也思考以下。这将帮助你更好地理解我们在说什么。
假设我们需要分配 k 个簇。这意味着存在 k 个高斯分布,平均值和协方差值为 μ1,μ2 ... μk 和 ∑1,∑2 ... ∑k。此外,还有一个用于分布的参数,用于定义分布的点数。或者换句话说,分布密度用 ∏i 表示。
现在,我们需要找到这些参数的值来定义高斯分布。我们已经决定了簇的数量,并随机分配了均值、协方差和密度的值。接下来,我们将执行 E-step 和 M-step!
E-step:
对于每个点 Xi,计算它属于簇/分布 C1、C2、…CK 的概率。使用以下公式完成此操作:
高斯混合模型
该值将在将点指定给右簇时为高,否则为低。
M-step:
完成 E-step 后,我们返回并更新 ∏,μ 和 ∑ 值。更新方式如下:
新密度由群集中的点数与总点数的比率定义:
高斯混合模型
平均值和协方差矩阵根据分配给分布的值进行更新,与数据点的概率值成比例。因此,具有更高概率成为该分布一部分的数据点将贡献更大的部分:
高斯混合模型
基于此步骤生成的更新值,我们计算每个数据点的新概率并迭代更新值。为了最大化对数似然函数,重复该过程。实际上我们可以说:
k-means 只考虑更新质心的均值,而 GMM 则考虑数据的均值和方差!
结语
这是高斯混合模型的入门指南。我在这里的目的是向你介绍这种强大的聚类技术,并展示它与传统算法相比是多么高效。
我鼓励你参加一个集群项目并在那里尝试 GMMs。这是学习和理解一个概念的最好方法——相信我,你会意识到这个算法有多有用!
via:https://www.analyticsvidhya.com/blog/2019/10/gaussian-mixture-models-clustering/
雷峰网版权文章,未经授权禁止转载。详情见转载须知。