《大数据架构和算法实现之路:电商系统的技术实战》——2.2 算法:K均值和层次型聚类

本文涉及的产品
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
简介:

本节书摘来自华章计算机《大数据架构和算法实现之路:电商系统的技术实战》一书中的第2章,第2.2节,作者 黄 申,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

2.2 算法:K均值和层次型聚类

2.2.1 K均值聚类

K均值聚类(K-Means Clustering)算法是一种最普遍的、通过不断迭代调整k个聚类质心的算法。这里的质心是群组的中心点,通常用其中成员的平均值来计算。K-Means是在一个任意多数据集合的基础上,得到一个事先定好群组数量的聚类结果。其中心思想是:最大化总的群组内相似度,而群组内相似度是通过群组各个成员和群组质心相比较得到的相似度来确定的。想法很简单,但是在样本数量达到一定规模后,希望通过排列组合所有的群组划分,来找到最大总群组内的相似则几乎是不可能的。于是人们提出了如下的近似解。

1)从N个数据对象中随机选取k个对象作为质心。因为是第一轮,所以第i个群组的质心就是选择的第i个对象,而且只有这一个组员。
2)对于剩余的每个对象,测量其和每个质心的相似度,并把它归到最近的质心的群组。
3)重新计算已经得到的各个群组的质心。这里质心的计算是关键,如果是用特制向量来表示的数据对象,那么最基本的方法是取群组内成员的特制向量,将它们的平均值作为质心的向量表示。
4)迭代第2步和第3步,直至新的质心与原质心相等或相差之值小于指定阈值,算法结束。

如果我们将所有的数据对象向量映射到二维空间,图2-1的a、b、c分别展示了质心和群组逐步调整的过程。步骤a是第一轮聚类,以及随后计算每个群组的质心。其中的“+”表示质心;步骤b是第二轮聚类,根据新的质心,计算每个数据点应该属于哪个新的群组;步骤c,如此往复,进入下一轮聚类。

screenshot

细心的读者会发现,这个过程和KNN分类非常类似,都会涉及某个数据对象和其他对象或群组质心的相似度计算。最主要的区别在于KNN是针对监督式学习,训练数据中的分类标签都已经确定,所以无需多次迭代的优化过程。而K均值算法中,一开始质心和群组的选择都是临时的,在之后的迭代中才逐步逼近局部优化的解,直到达到一个稳定的状态。

“小明哥,这个方法虽然简单易懂,但是一开始怎样选择这个群组的数量啊,针对一个新的数据集合,多少才比较合适呢?如果k值取得太大,那么群组可能切分得太细,每个之间的区别不大。如果k值取得太小,就怕粒度太粗,群组内又差异明显。无论怎样对最后的分析都不利啊。”

“好问题,这种非监督式的学习确实有一些参数很难得到准确的预估。可以事先在一个较小的数据集合上进行尝试,然后根据结果和应用场景确定一个经验值。当然,如果还是不够理想,可以使用层次型的聚类(Hierarchical Clustering)在一定程度上缓解这个问题。”

2.2.2 层次型聚类

还有一种类型的聚类方法,仅仅使用数据对象之间的相似性,使得同一群组中对象的相似度,远远大于不同群组之间的相似度。这就是层次型的聚类。具体又可分为分裂和融合两种方案。分裂的层次型聚类采用自顶向下的策略,它首先是将所有对象置于同一个群组中,然后逐渐细分为越来越小的群组,直到每个对象自成一组,或者达到了某个阈值条件而终止。融合的层次聚类与分裂的层次聚类相反,是一种自底向上的策略,首先将每个对象作为一个群组,然后将这些原始群组合并成为越来越大的群组,直到所有的对象都在一个群组中,或者达到某个阈值条件而终止。融合的方式在计算上更加简单快捷,因此绝大多数层次型聚类方法属于这一类,只是在群组间相似度的定义上有所不同而已。其大致流程概括如下。

1)最初给定n个数据对象,将每个对象看成一个群组。这样共得到n个组,每组仅包含一个对象,组与组之间的相似度就是它们所包含的对象之间的相似度。
2)找到最接近的两个组并合并成一个,于是总的组数少了一个。
3)重新计算新的组与所有旧组之间的距离。
4)重复第2步和第3步,直到最后合并成一个组为止。如果设置了组数,或者是组间相似度的阈值,也可以提前结束聚合。

图2-2展示了融合聚类的概念。以左下角圆框标出的部分为例,可以看到其中的若干数据对象的情况,包括14、17、13、22和12号。第一次,14和17号对象的相似度很高,优先聚为一组,而在第二次13和22号聚为另外一组。第三次,再次查找群组之间的相似度,会发现在{14,17}的群组、{13,22}的群组,以及12单独成立的群组中,{14,17}群组和{13,22}群组的相似度更高,因此会再次融合成为{14,17,13,22},最后第四次{14,17,13,22}再次和12融合。

screenshot

那么接下来就有一个有趣的问题,如何计算群组之间的相似度呢?之前在K-Means聚类中,计算的是单个数据对象和质心间的相似度,就是两个向量之间的比较。而现在计算的是两个群组之间的相似度,是两组向量的比较。两组之间比较的工作量肯定更大,常见的方式有三种,分别是单一连接(Single Linkage)、完全连接(Complete Linkage)和平均连接(Average Linkage)。

(1)单一连接
群组间的相似度使用两组对象之间的最大相似度表示,公式如下:

screenshot

其中sim (ci, cj)表示群组i和群组j之间的相似度,x和y分别是群组i和j内的数据对象。单一连接对两组对象之间相似度的要求不高,只要两个对象间存在较大的相似值就能够使两组优先融合。单一连接会产生链式效应,通过这种连接方式来融合可以得到丝状结构。
(2)完全连接
群组间的相似度使用两组对象之间的最小相似度来表示,公式如下:

screenshot

只有在两组对象之间的相似度很高时,才能优先考虑融合。当各个群组聚集得比较紧密,类似球状,不太符合丝状结构时,使用单一连接效果不佳。这时可以考虑完全连接。
(3)平均连接
群组间的相似度使用两组对象之间的平均相似度来表示,公式如下:

screenshot

相对而言,这种计算对于各类形状都是比较有效的。

“懂了。这样看来层次型聚类虽然计算量大,但是对于确定合适的聚类群组还是有所帮助的。另外,整体感觉,好像聚类算法比较简单,也完全不用人工的标注哦,这样岂不是比分类方便很多?”

“确实不需要人工的分类标注,节省了很多运营的人力。不过,聚类通常只能发现数据结构内部的特征,聚集出来的群组其解释性比不上分类。因此,聚类比较适合业务需求变化快,而且对精度要求不高的分析,例如侦测异常行为、用户分组等。而分类则更适合于需求相对稳定、对精度要求很高的分析,例如搜索查询分类、商品目录的分类等。或者,我们也可以结合这两者,先用聚类进行初步的分析,然后再让运营人员通过聚类的结果来构建分类的标注数据。”

相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
目录
打赏
0
0
0
0
1408
分享
相关文章
DeepSeek加持的通义灵码2.0 AI程序员实战案例:助力嵌入式开发中的算法生成革新
本文介绍了通义灵码2.0 AI程序员在嵌入式开发中的实战应用。通过安装VS Code插件并登录阿里云账号,用户可切换至DeepSeek V3模型,利用其强大的代码生成能力。实战案例中,AI程序员根据自然语言描述快速生成了C语言的base64编解码算法,包括源代码、头文件、测试代码和CMake编译脚本。即使在编译错误和需求迭代的情况下,AI程序员也能迅速分析问题并修复代码,最终成功实现功能。作者认为,通义灵码2.0显著提升了开发效率,打破了编程语言限制,是AI编程从辅助工具向工程级协同开发转变的重要标志,值得开发者广泛使用。
8080 69
DeepSeek加持的通义灵码2.0 AI程序员实战案例:助力嵌入式开发中的算法生成革新
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构。本文介绍了K-means算法的基本原理,包括初始化、数据点分配与簇中心更新等步骤,以及如何在Python中实现该算法,最后讨论了其优缺点及应用场景。
271 6
JVM实战—3.JVM垃圾回收的算法和全流程
本文详细介绍了JVM内存管理与垃圾回收机制,涵盖以下内容:对象何时被垃圾回收、垃圾回收算法及其优劣、新生代和老年代的垃圾回收算法、Stop the World问题分析、核心流程梳理。
JVM实战—3.JVM垃圾回收的算法和全流程
Python下的毫秒级延迟RTSP|RTMP播放器技术探究和AI视觉算法对接
本文深入解析了基于Python实现的RTSP/RTMP播放器,探讨其代码结构、实现原理及优化策略。播放器通过大牛直播SDK提供的接口,支持低延迟播放,适用于实时监控、视频会议和智能分析等场景。文章详细介绍了播放控制、硬件解码、录像与截图功能,并分析了回调机制和UI设计。此外,还讨论了性能优化方法(如硬件加速、异步处理)和功能扩展(如音量调节、多格式支持)。针对AI视觉算法对接,文章提供了YUV/RGB数据处理示例,便于开发者在Python环境下进行算法集成。最终,播放器凭借低延迟、高兼容性和灵活扩展性,为实时交互场景提供了高效解决方案。
大数据中的数据预处理:脏数据不清,算法徒劳!
大数据中的数据预处理:脏数据不清,算法徒劳!
45 2
基于 C# 网络套接字算法的局域网实时监控技术探究
在数字化办公与网络安全需求增长的背景下,局域网实时监控成为企业管理和安全防护的关键。本文介绍C#网络套接字算法在局域网实时监控中的应用,涵盖套接字创建、绑定监听、连接建立和数据传输等操作,并通过代码示例展示其实现方式。服务端和客户端通过套接字进行屏幕截图等数据的实时传输,保障网络稳定与信息安全。同时,文章探讨了算法的优缺点及优化方向,如异步编程、数据压缩与缓存、错误处理与重传机制,以提升系统性能。
42 2
基于问题“如何监控局域网内的电脑”——Node.js 的 ARP 扫描算法实现局域网内计算机监控的技术探究
在网络管理与安全领域,监控局域网内计算机至关重要。本文探讨基于Node.js的ARP扫描算法,通过获取IP和MAC地址实现有效监控。使用`arp`库安装(`npm install arp`)并编写代码,可定期扫描并对比设备列表,判断设备上线和下线状态。此技术适用于企业网络管理和家庭网络安全防护,未来有望进一步提升效率与准确性。
49 8
公司监控上网软件架构:基于 C++ 链表算法的数据关联机制探讨
在数字化办公时代,公司监控上网软件成为企业管理网络资源和保障信息安全的关键工具。本文深入剖析C++中的链表数据结构及其在该软件中的应用。链表通过节点存储网络访问记录,具备高效插入、删除操作及节省内存的优势,助力企业实时追踪员工上网行为,提升运营效率并降低安全风险。示例代码展示了如何用C++实现链表记录上网行为,并模拟发送至服务器。链表为公司监控上网软件提供了灵活高效的数据管理方式,但实际开发还需考虑安全性、隐私保护等多方面因素。
32 0
公司监控上网软件架构:基于 C++ 链表算法的数据关联机制探讨
架构学习:7种负载均衡算法策略
四层负载均衡包括数据链路层、网络层和应用层负载均衡。数据链路层通过修改MAC地址转发帧;网络层通过改变IP地址实现数据包转发;应用层有多种策略,如轮循、权重轮循、随机、权重随机、一致性哈希、响应速度和最少连接数均衡,确保请求合理分配到服务器,提升性能与稳定性。
511 11
架构学习:7种负载均衡算法策略
基于分块贝叶斯非局部均值优化(OBNLM)的图像去噪算法matlab仿真
本项目基于分块贝叶斯非局部均值优化(OBNLM)算法实现图像去噪,使用MATLAB2022A进行仿真。通过调整块大小和窗口大小等参数,研究其对去噪效果的影响。OBNLM结合了经典NLM算法与贝叶斯统计理论,利用块匹配和概率模型优化相似块的加权融合,提高去噪效率和保真度。实验展示了不同参数设置下的去噪结果,验证了算法的有效性。

热门文章

最新文章