概述
- 高斯混合模型是一种强大的聚类算法
- 了解高斯混合模型的工作原理以及如何在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)假设存在一定数量的高斯分布,并且每个分布代表一个簇。高斯混合模型倾向于将属于同一分布的数据点分组在一起。”
五、高斯分布
其中,x是输入向量,μ是2维均值向量,∑是2×2协方差矩阵。协方差现在可以决定曲线的形状。d维概率密度函数可以类似进行推广。
六、什么是期望最大化
好问题!
E-步骤:在这个步骤中,利用可用的数据来估算(猜测)潜在变量的值。
M-步骤:根据E步骤中生成的估计值,使用完整的数据更新参数。
EM是很多算法的基础,包括高斯混合模型。那么,GMM如何使用EM概念以及如何将其应用于给定的数据集?让我们看看!
七、高斯模型中的期望最大化
让我们用另一个例子来理解这一点,读的时候需要你发挥下想象力来理解一些概念,这可以帮助你更好地理解我们在说些什么。
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/