AISHWARYA SINGH作者张一豪校对黄继彦编辑张玲 翻译

使用高斯混合模型,让聚类更好更精确(附数据&代码&学习资源)

本文简单介绍聚类的基础知识,包括快速回顾K-means算法,然后深入研究高斯混合模型的概念,并用Python实现。

概述

  • 高斯混合模型是一种强大的聚类算法
  • 了解高斯混合模型的工作原理以及如何在Python中实现它们
  • 我们还将讨论K-means聚类算法,看看高斯混合模型是如何改进它的

简介

我真的很喜欢研究无监督的学习问题,因为它们提供了一个完全不同于监督学习问题的挑战:提供更大的空间来试验我的数据。这也不难理解机器学习领域的大多数发展和突破都发生在无监督学习这一块。

监督学习中最流行的技术之一是聚类,这通常我们在早期学习机器学习时学习的概念,而且很容易掌握。我相信你已经遇到过,甚至参与过用户分层、市场购物篮分析等项目。
但问题是,聚类有很多种,不只局限于我们之前学过的基本算法。它是一种我们可以在现实世界中准确无误地使用的强大的无监督学习技术。

高斯混合模型是我在本文中即将要讨论的一种聚类算法。”

想要预测你最喜欢的产品销售量吗?或者你想要通过不同客户群体的视角来剖析客户流失。不管是什么应用场景,你都会发现高斯混合模型是非常有用的。

本文将采用自下而上的方法。首先,我们学习聚类的基础知识,包括快速回顾K-means算法,然后,我们将深入研究高斯混合模型的概念,并用Python实现它们。

如果你对聚类数据科学还不熟悉,我建议你先学习以下综合课程:

应用机器学习相关课程链接:

https://courses.analyticsvidhya.com/courses/applied-machine-learning-beginner-to-professional?utm_source=blog&utm_medium=gaussian-mixture-models-clustering

目录

一、聚类简介

二、K-means聚类简介

三、K-means聚类缺点

四、高斯混合模型简介

五、高斯分布

六、什么是期望最大化

七、高斯混合模型中的期望最大化

八、用Python实现高斯混合聚类模型

一、聚类简介

在我们开始讨论高斯混合模型的本质之前,让我们快速回顾一些基本概念。

请注意:如果您已经熟悉了聚类背后的思想以及K-means聚类算法的工作原理,可以直接跳到第4节“高斯混合模型简介”。

让我们先从核心思想的正式定义开始:

聚类指根据数据的属性或特征将相似数据点分成一组”

例如,我们有一组人的收入和支出,我们可以将他们分为以下几类:

高收入高消费

高收入低消费

低收入低消费

低收入高消费

上面的每一组都是一个具有相似特征的群体,因此针对性地向这些群体投放相关方案/产品非常有效。类似信用卡、汽车/房产贷款等的投放。简单来说:

聚类背后的思想是将数据点分组在一起,这样每个单独的聚类都有着最为相似的点。”

目前有各种各样的聚类算法,最流行的聚类算法之一是K-means。让我们了解K-means算法是如何工作的,以及该算法可能达不到预期的情况。

二、K-means聚类简介

“K-means聚类是一种基于距离的聚类算法,这意味着它将试图将最近的点分组以形成一个簇”。

让我们仔细看看这个算法是如何工作的,这将为后续了解高斯混合模型打下基础。

首先,我们先确定目标分组数量,这是K的数值,根据需要划分的族或分组的数量,随机初始化k个质心。

然后将数据点指定给最近的质心,形成一个簇,接着更新质心,重新分配数据点。这个过程不断重复,直到质心的位置不再改变。

查看下面的gif,它代表初始化和更新簇的整个过程,假设簇数量为10:

请注意:这是K-means聚类的简单概述,对于本文来说已经足够了。如果你想深入研究k-means算法的工作原理,这里有一个详细指南:

最全面的K-mans指南,你永远都需要:

https://www.analyticsvidhya.com/blog/2019/08/comprehensive-guide-k-means-clustering/?utm_source=blog&utm_medium=gaussian-mixture-models-clustering

三、K-means聚类缺点

K-means聚类概念听起来不错,对吧?它易于理解,实现起来相对容易,并且可以应用在很多场景中,但有一些缺点和局限性需要我们注意。

让我们以上面提及的收支数据为例,K-means算法似乎运行得很好,对吧?等等,如果你仔细观察,将会发现所有创建的簇都是圆形的,这是因为分类的质心都是使用平均值迭代更新的。

现在,考虑下面的例子,其中点的分布不是圆形的,如果我们对这些数据使用K-means聚类,您认为会发生什么?它仍然试图以循环方式对数据点进行分组,那不太好!K-means会无法识别正确的分簇:

因此,我们需要一种不同的方法来将类分配给数据点。不再使用基于距离的模型,而是使用基于分布的模型,这就是高斯混合模型出现在本文的意义!

四、高斯混合模型简介

高斯混合模型(Gaussian Mixture Models ,GMMs)假设存在一定数量的高斯分布,并且每个分布代表一个簇。高斯混合模型倾向于将属于同一分布的数据点分组在一起。”

假设我们有三个高斯分布(在下一节中有更多内容)——GD1、GD2和GD3,它们分别具有给定的均值(μ1,μ2,μ3)和方差(σ1,σ2,σ3)。对于给定的一组数据点,我们的GMMs将计算这些数据点分别服从这些分布的概率。

等等,概率?

没错!高斯混合模型是一种概率模型,采用软聚类方法将数据点归入不同的簇中。

在这里,我们有三个簇,用三种颜色表示-蓝色、绿色和青色。我们用红色突出显示一个数据点,这个点划分进蓝色簇的概率为1,而划分进绿色簇或者青色簇的概率为0。
 


现在,考虑另一个点-介于蓝色和青色簇之间(在下图中突出显示),这个点划分进绿色簇的概率为0,对吧?而划分进蓝色、青色簇的概率分别是0.2,0.8。
 


高斯混合模型使用软分类技术将数据点分配至对应的高斯分布,我肯定你想知道这些分布是什么,我将在下一节解释一下。

五、高斯分布

我相信你熟悉高斯分布(或正态分布),它有一个钟形曲线,数据点围绕平均值对称分布。

下图有一些高斯分布,平均值(μ)和方差(σ2)不同。记住,σ值越大,分布曲线越宽。

在一维空间中,高斯分布的概率密度函数由下式给出:
其中μ是平均值,σ2是方差。

但这只适用于单个变量。在两个变量的情况下,我们将得到如下所示的三维钟形曲线,而不是二维钟形曲线:


概率密度函数由以下公式给出:

其中,x是输入向量,μ是2维均值向量,∑是2×2协方差矩阵。协方差现在可以决定曲线的形状。d维概率密度函数可以类似进行推广。

“因此,这个多元高斯模型将x和μ作为长度为d的向量,∑是一个d×d协方差矩阵。”

对于具有d个特征的数据集,我们将得到k个高斯分布(其中k相当于簇的数量),每个高斯分布都有一个特定的均值向量和方差矩阵,但是——这些高斯分布的均值和方差值是如何给定的?

这些值可以用一种叫做期望最大化(Expectation-Maximization ,EM)的技术来确定,在深入研究高斯混合模型之前,我们需要了解这项技术。

六、什么是期望最大化

好问题!

“期望最大化就是寻找正确模型参数的统计算法,当数据有缺失值时,或者换句话说,当数据不完整时,我们通常使用EM。”

这些值缺失的变量被称为潜在变量,当我们研究无监督学习问题时,我们认为目标(或簇数)是未知的。

由于这些潜在变量,很难确定正确的模型参数。这样想吧:如果你知道哪个数据点属于哪个簇,那么就很容易确定均值向量和协方差矩阵

由于我们没有这些潜在变量的值,EM试图利用现有数据来确定这些变量的最优值,然后找到模型参数基于这些模型参数,我们返回并更新潜在变量的值等等。

广义上,EM有2个步骤:
  • E-步骤:在这个步骤中,利用可用的数据来估算(猜测)潜在变量的值。

  • M-步骤:根据E步骤中生成的估计值,使用完整的数据更新参数

    EM是很多算法的基础,包括高斯混合模型。那么,GMM如何使用EM概念以及如何将其应用于给定的数据集?让我们看看!

七、高斯模型中的期望最大化

让我们用另一个例子来理解这一点,读的时候需要你发挥下想象力来理解一些概念,这可以帮助你更好地理解我们在说些什么。

假设我们需要做K维聚类,这意味着存在k个高斯分布,平均值和协方差值为μ1、μ2、…、μk和∑1、∑2、…、∑k,此外,还有一个用于决定分布所用数据点数量的参数,换句话说,分布的密度用∏i表示。

现在,我们需要确定这些参数的值来定义高斯分布。我们已经确定簇数量,并随机分配了均值、协方差和密度的值,接下来,我们将执行E步骤和M步骤!

E步骤:

对于每个点Xi,计算它属于簇/分布C1、C2、…、CK的概率。使用以下公式完成此操作:

该值高时表示点被分配至正确的簇,反之则低。

M步骤:

完成E步后,我们返回并更新∏,μ和∑值。更新方式如下:

1. 新分布密度由簇中的点数与总点数的比率定义:

2. 平均值和协方差矩阵根据分配给分布的值进行更新,与数据点的概率值成比例。因此,具有更高概率成为该分布一部分的数据点将贡献更大的比例:

基于此步骤生成的更新值,我们计算每个数据点的新概率值并迭代更新。为了最大化对数似然函数,重复该过程。实际上我们可以说:

K-means只考虑更新质心的均值,而GMMs则考虑更新数据的均值和方差!

八、用Python实现高斯混合模型

是时候深入研究代码了!这是我在任何一篇文章中最喜欢的部分之一,所以我们马上开始吧!

我们将从加载数据开始,这是我创建的临时文件,您可以从以下链接下载数据:

相关链接:

https://s3-ap-south-1.amazonaws.com/av-blog-media/wp-content/uploads/2019/10/Clustering_gmm.csv

import pandas as pd
data = pd.read_csv('Clustering_gmm.csv')
plt.figure(figsize=(7,7))
plt.scatter(data["Weight"],data["Height"])
plt.xlabel('Weight')
plt.ylabel('Height')
plt.title('Data Distribution')
plt.show()

这是我们的数据,现在此数据上建立一个K-means模型:

#training k-means model
from sklearn.cluster import KMeans
kmeans = KMeans(n_clusters=4)
kmeans.fit(data)
 
#predictions from kmeans
pred = kmeans.predict(data)
frame = pd.DataFrame(data)
frame['cluster'] = pred
frame.columns = ['Weight', 'Height', 'cluster']
 
#plotting results
color=['blue','green','cyan', 'black']
for k in range(0,4):
    data = frame[frame["cluster"]==k]
    plt.scatter(data["Weight"],data["Height"],c=color[k])
plt.show()

那不太对,K-means模型无法识别正确的簇。仔细观察簇中心——K-means试图构建一个圆形簇,尽管数据分布都是椭圆形的(还记得我们之前讨论过的缺点吗?)。

现在让我们在相同的数据上建立一个高斯混合模型,看看是否可以改进K-means:

import pandas as pd
data = pd.read_csv('Clustering_gmm.csv')
 
# training gaussian mixture model
from sklearn.mixture import GaussianMixture
gmm = GaussianMixture(n_components=4)
gmm.fit(data)
 
#predictions from gmm
labels = gmm.predict(data)
frame = pd.DataFrame(data)
frame['cluster'] = labels
frame.columns = ['Weight', 'Height', 'cluster']
 
color=['blue','green','cyan', 'black']
for k in range(0,4):
    data = frame[frame["cluster"]==k]
    plt.scatter(data["Weight"],data["Height"],c=color[k])
plt.show()

太棒啦!这些正是我们所希望的簇划分!高斯混合模型已经把K-means击败啦!

尾注

这是高斯混合模型的入门指南,在这里主要是向你介绍这种强大的聚类技术,并展示它与传统算法相比是多么有效和高效。

我鼓励你参加一个聚类项目,并尝试使用GMMs。这是学习和理解一个概念的最好方法,相信我,你会意识到这个算法多么有用!

高斯混合模型有什么问题或想法,可以在下面评论区一起讨论。

原文标题:

Build Better and Accurate Clusters with Gaussian Mixture Models

原文链接:

https://www.analyticsvidhya.com/blog/2019/10/gaussian-mixture-models-clustering/

THU数据派
THU数据派

THU数据派"基于清华,放眼世界",以扎实的理工功底闯荡“数据江湖”。发布全球大数据资讯,定期组织线下活动,分享前沿产业动态。了解清华大数据,敬请关注姐妹号“数据派THU”。

工程最大期望算法高斯分布聚类机器学习高斯混合模型
4
相关数据
机器学习技术

机器学习是人工智能的一个分支,是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、计算复杂性理论等多门学科。机器学习理论主要是设计和分析一些让计算机可以自动“学习”的算法。因为学习算法中涉及了大量的统计学理论,机器学习与推断统计学联系尤为密切,也被称为统计学习理论。算法设计方面,机器学习理论关注可以实现的,行之有效的学习算法。

高斯分布技术

正态分布是一个非常常见的连续概率分布。由于中心极限定理(Central Limit Theorem)的广泛应用,正态分布在统计学上非常重要。中心极限定理表明,由一组独立同分布,并且具有有限的数学期望和方差的随机变量X1,X2,X3,...Xn构成的平均随机变量Y近似的服从正态分布当n趋近于无穷。另外众多物理计量是由许多独立随机过程的和构成,因而往往也具有正态分布。

参数技术

在数学和统计学裡,参数(英语:parameter)是使用通用变量来建立函数和变量之间关系(当这种关系很难用方程来阐述时)的一个数量。

数据科学技术

数据科学,又称资料科学,是一门利用数据学习知识的学科,其目标是通过从数据中提取出有价值的部分来生产数据产品。它结合了诸多领域中的理论和技术,包括应用数学、统计、模式识别、机器学习、数据可视化、数据仓库以及高性能计算。数据科学通过运用各种相关的数据来帮助非专业人士理解问题。

协方差矩阵技术

在统计学与概率论中,协方差矩阵(也称离差矩阵、方差-协方差矩阵)是一个矩阵,其 i, j 位置的元素是第 i 个与第 j 个随机向量(即随机变量构成的向量)之间的协方差。这是从标量随机变量到高维度随机向量的自然推广。

监督学习技术

监督式学习(Supervised learning),是机器学习中的一个方法,可以由标记好的训练集中学到或建立一个模式(函数 / learning model),并依此模式推测新的实例。训练集是由一系列的训练范例组成,每个训练范例则由输入对象(通常是向量)和预期输出所组成。函数的输出可以是一个连续的值(称为回归分析),或是预测一个分类标签(称作分类)。

高斯混合模型技术

高斯混合模型(Gaussian Mixture Model,GMM)是单一高斯概率密度函数的延伸,就是用多个高斯概率密度函数(正态分布曲线)精确地量化变量分布,是将变量分布分解为若干基于高斯概率密度函数(正态分布曲线)分布的统计模型。

似然函数技术

在数理统计学中,似然函数是一种关于统计模型中的参数的函数,表示模型参数中的似然性。 似然函数在统计推断中有重大作用,如在最大似然估计和费雪信息之中的应用等等。“ 似然性”与“或然性”或“概率”意思相近,都是指某种事件发生的可能性,但是在统计学中,“似然性”和“或然性”或“概率”又有明确的区分。

聚类技术

将物理或抽象对象的集合分成由类似的对象组成的多个类的过程被称为聚类。由聚类所生成的簇是一组数据对象的集合,这些对象与同一个簇中的对象彼此相似,与其他簇中的对象相异。“物以类聚,人以群分”,在自然科学和社会科学中,存在着大量的分类问题。聚类分析又称群分析,它是研究(样品或指标)分类问题的一种统计分析方法。聚类分析起源于分类学,但是聚类不等于分类。聚类与分类的不同在于,聚类所要求划分的类是未知的。聚类分析内容非常丰富,有系统聚类法、有序样品聚类法、动态聚类法、模糊聚类法、图论聚类法、聚类预报法等。

推荐文章
暂无评论
暂无评论~