如何利用高斯混合模型建立更好、更精确的集群?
导语:高斯混合模型的入门指南
高斯混合模型是一种强大的聚类算法。本文将带你了解高斯混合模型的工作原理以及如何在 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/
如何利用高斯混合模型建立更好、更精确的集群?相关推荐
- 建立p2p互相连接的社区集群机器人设计(一)
集群机器人基本概念 用一组机器人来解决完成一项复杂的任务,这种设计来自于群居的生物物种,而人类正是这种类别 一群蚂蚁比一只蚂蚁能完成的任务更多,同理,在于社区内的一群机器人能完成的任务大大超越个人的能 ...
- 如何在Python中建立和训练K最近邻和K-Means集群ML模型
One of machine learning's most popular applications is in solving classification problems. 机器学习最流行的应 ...
- K8S建立ipv6集群
前言 本文讲述使用kubernetes建立纯ipv6的集群,以及ipv6网络插件该如何设置. 实验环境 我所使用的平台是VMware,在其中创建了CentOS7的虚拟机,在上面进行实验部署.在创建虚拟 ...
- 建立集群间ssh信任关系
目的要求 一套集群里有10台主机,建立ssh信任关系,使集群内所有主机可以不输密码互相访问. 解决方法 1.在server1生成私钥 ssh-keygen ssh-copy-id root@192.1 ...
- 更深更宽的孪生网络,有效提升目标跟踪精度,代码开源
点击我爱计算机视觉标星,更快获取CVML新技术 本文为52CV群友Mr.Chen投稿,深入解读了CVPR 2019 跟踪方向的论文Deeper and Wider Siamese Networks f ...
- 使用现场总线更快更远
使用现场总线更快更远 Going faster and further with Fieldbus PROCENTEC等行业专家表示,基于RS-485的现场总线技术(PROFIBUS®)和工业以太网( ...
- 科宇扫地机器人_我的三年16台智能扫地机器人使用回忆录 篇四:扫地谁更精准更干净?新一代3D视讯+激光成像 PK 老式激光扫描,万字实测对比分享...
我的三年16台智能扫地机器人使用回忆录 篇四:扫地谁更精准更干净?新一代3D视讯+激光成像 PK 老式激光扫描,万字实测对比分享 2019-05-23 11:22:00 37点赞 166收藏 53评论 ...
- Adaptive Execution让Spark SQL更高效更好用
本文所述内容均基于 2018年9月17日 Spark 最新 Spark Release 2.3.1 版本,以及截止到 2018年10月21日 Adaptive Execution 最新开发代码.自动设 ...
- 我如何构建Kubernetes集群,以便我的同事可以更快地部署应用程序
by cheungpat 通过cheungpat 我如何构建Kubernetes集群,以便我的同事可以更快地部署应用程序 (How I built a Kubernetes cluster so my ...
最新文章
- 报名 | 期末考后,快来打比赛赢万元奖金!(北京上海)
- Tomcat中的Session小结
- 运放使用中不稳定怎么办?
- Android 人脸识别
- python详细安装教程3.7.4-python 3.7.4 安装 opencv的教程
- Allegro跨分割检查
- SilverLight4调用WebService跨域访问问题
- 优秀的电商精品素材就到优图
- 老同学聚会你会不会赴约?
- 重做系统,出现invalid switch noid
- java pkcs8_java中公钥,私钥,pkcs1格式,pkcs8格式互转
- box-sizing:boder-box
- 淘宝客淘宝联盟解析二合一链接获取优惠链接还原二合一,提取优惠信息
- Android内存优化深入解析
- 设计一个程序,其中有三个类CBank,BBank,GBank,分别为中国银行类…………
- 理性分析三星盖乐世炸弹7
- 二进制1010.0101转换为十进制
- 短视频高流量的秘诀,上热门全靠这些技巧
- 神经网络量化入门--基本原理
- gpart 分区工具
热门文章
- sql server的BCP导入导出(转)
- 青源 Forum | 人工智能的数理基础前沿系列报告 · 第 4 期
- 如何轻松学会一门外语?
- gRPC 的 4 种基础通信模式
- FaceNet: A Unified Embedding for Face Recognition and Clustering
- 【TAMU】最新《时间序列分析》课程笔记
- AI识别彻底懵逼,这到底是“牛”还是“鲨”?
- 独家 | 准确度VS速度——数据科学家能从搜索中学到什么?(附链接)
- 独家 | 盘点9个适用所有学科的R数据可视化包(附链接)
- 涨点技巧!汇集13个Kaggle图像分类项目的性能提升指南