8000字详解“聚类算法”,从理论实现到案例说明

0 评论 4247 浏览 37 收藏 34 分钟

算法可以说是AI技术的核心,想入门AI的同学,了解一些算法知识是很有必要的。这篇文章里,作者就介绍并梳理分析了AI无监督学习中的聚类算法,一起来看看其工作原理和应用场景吧。

各位看官:

欢迎一起探索AI的世界。就在开年的2月21日,国务院国资委召开中央企业人工智能专题推进会扎实推动AI赋能产业焕新,这一消息在国务院国有资产监督管理委员会官网上公布,国家队的重视也是全民拥抱AI的大好时机。

OpenAI和Sora掀起了一股全民科技热潮,又加之当前经济需要新的科技和新的需求来推动市场发展,原因很多,错综复杂。但无论是因为什么,拥抱AI都会成为当今互联网从业人员的不二选择。

现如今,大家都多多少少知道一些AI,特别是一些AI应用的名称,但论及AI的技术原理,并非人人皆知。当然,大部分人也不需要知道背后的原理,就像我们去餐厅吃饭时,会尽情品尝菜肴的美味但不一定需要知道每样食材的品种和产地。

那么,哪一类人群需要在拥抱AI的浪潮中还需习得AI的技术原理呢?

是原互联网行业要转型AI行业的一批人,或者刚毕业要进入AI行业的新手小白,这些人是市场上新诞生的一群AI从业人员,也正是这些人,将有更大的机会在AI行业创造出新的社会价值。

互联网科技人员是市场上最早一批接触AI的人,在OpenAI还未火遍全球之前,就已经有一批人在一些细分领域做着AI相关的工作,只不过那时候的AI市场还没那么大。

而且那时候,互联网领域无论是C端还是B端都存在着大量的市场机会,大量的市场需求未被满足,就算不涉及AI,无论是个人还是公司,都有着巨大的增长空间。

但是现在,一切都在改变,拥抱变化将是我们面对市场不确定性的主要节奏,原互联网从业人员,上至大厂下至小初创公司,都不能固守着原先互联网模式的一亩三分地,止步不前只会将自己圈禁待死。

所以说,无论是想转型AI,还是新手入门AI,都必须具备AI领域一定程度的专业能力。为了了解AI,我们可以去学习如何操作市面上的AI工具,把现今流行的文生文,文生图,文生视频都玩一个遍。

但重点是,我们在体验之余,也要静下心来想想,如果想在AI这条路上走出自己的核心竞争力,仅仅会操作AI工具是否足以支撑自己走得稳,走得远?

若想成为AI行业中有独特竞争力的一员,首要就是打好AI基本功。形成这个观点,不仅是基于我在互联网多年的从业经验,也是基于国内外大量公司和个人的成功案例。

也许功能或产品会被借鉴,人才会被挖走,但有些竞争力形成的护城河,就算公开于众,也是夺不走的,这就是真正的实力,背后也是因为有着扎实的基本功做支撑。

入门AI,无论从哪个角度切入,都要先克服畏难情绪,日拱一卒,一步一脚印地磨练AI基本功。我们从AI的专业知识开始,逐步构建自身的核心竞争力。

本章要说的主要内容就是AI无监督学习中的算法。算法是AI技术的核心。了解算法对于提高AI应用的性能和效率至关重要。

类似ChatGPT,背后的算法能够从数据中学习并生成新的内容,我们需要了解这些AI算法的工作原理和应用方式,以便更好地将它们融入自己的产品和业务中。

全文8000字左右,预计阅读时间15分钟,若是碎片时间不够,建议先收藏后看,便于找回。

照例,开篇提供本篇文章的目录大纲,方便大家在阅读前总揽全局,对内容框架有预先了解。

一、无监督学习算法

1. 算法是什么,能吃吗?

哈哈,开个小玩笑,算法当然不能吃了。算法是一系列定义明确的操作步骤,用于解决特定问题或完成特定任务。

我们常见的算法通常指的是计算机科学中的一个概念,它涉及到数据的处理、转换和计算,用于实现某个目标或解决某个问题。

也可以简单理解成,算法是通过数据来解决问题的一种工具。往小了说,像四则运算、定理公式都可以称之为算法。嗯,1+1=2,也是一种算法。所以,算法并没有我们以为的那么高深莫测。

在AI和机器学习领域,算法被设计用于从数据中学习、发现模式、做出预测或执行决策,而无需显式的编程。

算法可以是简单的,比如排序一组数字,也可以是复杂的,比如识别图像中的对象或理解自然语言文本。在AI领域,算法被用来处理人力所不及的领域,像“1+1=2”这类的问题,就犯不着用上算法啦。

算法概念很广,我们主要围绕机器学习中的算法展开讨论。在机器学习中,算法通常分为以下几类:

【监督学习算法】

监督学习算法通过使用已标记的训练数据(输入和相应的输出)来学习模型。通过建立一个从输入到输出的映射,让模型能够对新的未标记数据进行预测。

常见的监督学习算法包括线性回归、决策树、支持向量机等。

【无监督学习算法】

无监督学习算法则需要在没有明确标签的情况下从数据中学习结构和模式。这类算法主要用于聚类、降维和关联规则挖掘等任务。

比如,K均值聚类、主成分分析(PCA)和关联规则挖掘都是常见的无监督学习算法。

如果对无监督学习的基本概念还不太清楚的,推荐我上一篇写的《现在入门“AI无监督学习”还来得及(9000字干货)》,和本篇有相关联之处,一起看看有助于加深理解。

【半监督学习算法】

半监督学习算法通常会结合监督学习算法和无监督学习算法的优势,利用同时包含有标签和无标签数据的训练集进行模型训练。

这样的组合允许算法在一部分数据上学习有监督的模式,又从未标记的数据中学习无监督的结构。常见的半监督学习算法包括半监督支持向量机(SVM)、自训练(Self-training)和混合模型(Mixture Models)等。

【强化学习算法】

强化学习是一种通过与环境的交互来学习行为的方法,强化学习算法的核心思想是通过试错来学习。

在这种学习方式下,智能体尝试通过不同的行为来观察环境的反馈,选择在不同状态下采取动作,而后进行学习并优化,目的就是实现最大化预期的总奖励。

一些经典的强化学习算法包括Q-learning、Deep Q Network(DQN)、Policy Gradient等。

在本篇,我会重点说说无监督学习的算法。在监督学习的算法中,关于线性回归部分,之前在《(万字干货)如何训练优化“AI神经网络”模型?》中有提到,而半监督学习和强化学习的相关内容,我会在以后的文章中,再和大家娓娓道来。

2. 我们为什么需要算法,价值几何?

无监督学习是机器学习的一种方法,算法就是实现无监督学习的工具,更是无监督学习的核心。无监督学习的目标是发现数据中的内在关系,而算法的设计和选择直接决定了这一目标能否实现以及实现的效率和效果。

在无监督学习中,算法的价值不言而喻,主要凸显在以下几处。

【数据探索与模式发现】

我们之前多次提到,无监督学习可以发现数据中的潜在结构和模式,帮助理解数据的内在特性。

但我们从未细细推敲过,无监督学习是如何发现数据中的结构和模式的。而算法,就是开启这个盲盒的钥匙。数据探索与模式发现的全部奥秘,都在算法之中。

【数据预处理】

从我之前写的几篇关于数据集的文章中可知,我们在AI训练之前,需要对数据进行预处理,这是一个非常关键的步骤。

那么,问题又来了,我们该如何高效完成数据预处理的任务呢?答案是:善用算法。

比如,在实际情况中,我们拿到的初始数据往往包含缺失值、异常值或噪声。而聚类或密度估计这类算法,可以帮助识别和处理这些不完整的或异常的数据点,从而提高数据质量。

【特征提取】

在特征提取方面,算法可以帮助识别数据中的重要特征,为后续的监督学习任务或其他分析提供更有用的数据表示。就像考试前,已经有一位学神帮你勾出了重要知识点,助你逢考必过。

再有,像是降维算法,也是无监督学习中常用的特征提取算法,它通过降低数据的维度,保留主要信息的同时减少冗余。这有助于简化数据表示,提高计算效率,并减少过拟合的风险。

【降低标注成本】

通俗点说,算法还有一大价值,就是省钱省时省人力。在传统的监督学习中,模型的训练通常需要大量带有标签的数据,而这一标注过程既费时又费力。

无监督学习之所以能够在大多数情况下利用未标注的大规模数据进行训练,是因为算法在背后起着关键作用。

特别是当我们要涉足一个新领域时,获取足够数量的标注数据可能是一项昂贵且耗时的工程。这该如何解决?答案还是:善用算法。

我们通常会让算法先在一个相关领域进行无监督学习,这样AI模型就可以学到通用的特征和表示,就可以减少对于新领域标注数据的需求,也就有效地降低了在新任务上进行标注所需的成本,加速了模型的部署和应用。

纵观算法价值,我总结了4个方面,分别是“数据探索与模式发现”、“数据预处理”、“特征提取”和“降低标注成本”。也许还有不完善之处,但力求可以帮助各位看官理解算法的重要性,即便只获一二,都值得欢喜。

二、聚类算法

1. 聚类算法的基本概念

在无监督学习中,聚类算法是一类将数据集分成若干个群组的算法。这些群组称为“簇”。每个簇内的数据点彼此之间相似度较高,而不同簇的数据点相似度较低。

聚类算法要做的就是,在没有任何预先标注的情况下,将相似的数据点归为一簇,将不相似的数据点划分到不同的簇中。

基于聚类算法,我们可以更容易地理解数据的分布、发现数据中的异常值,解决数据压缩、图像分割、市场细分等各类问题。

常见的聚类算法包括:K均值聚类(K-Means Clustering)、层次聚类(Hierarchical Clustering)、DBSCAN(Density-Based Spatial Clustering of Applications with Noise)、高斯混合模型(Gaussian Mixture Model,GMM)等。

其中,K均值聚类算法(通常称为K-means算法)的早期版本由Stuart Lloyd在1957年提出。他的研究是为了优化通信系统中的信号传输。

后来,该算法被MacQueen在1967年重新发现,他将其用于数据分析领域。MacQueen在他的论文中正式描述了K-means算法,并首次使用了“K-means”这个名称。

层次聚类的概念最早由J.L. Ward于1963年提出,该方法特别关注于最小化整个数据集的总方差,通过这种方式来形成层次聚类的结构。

而DBSCAN,首次出现在1996年的论文中,由Martin Ester等人共同提出的。它能够在有噪声的数据集中发现任意形状的簇,并且能够识别并处理噪声点。

至于高斯混合模型,有着更早的演进过程,其概念可以追溯到19世纪,但具体由谁提出就不得而知了。

本篇,我们就重点来说说聚类算法中的K均值聚类和层次聚类。

2. K均值聚类(K-Means Clustering)

K均值聚类(K-Means Clustering)是一种经典的聚类算法,其基本原理是将数据点分为K个簇,每个簇由簇中心(通常是簇内所有点的均值)表示。

所以,K-Means算法涉及到簇中心的计算,对于第i个簇,其簇中心(质心)的计算公式为:

K均值聚类的目标是最小化簇内平方误差,即找到K个簇,使每个数据点与其所属簇中心的距离之和最小。目标函数的数学公式是:

从公式可见,E值越小则簇内数据(样本)相似度越高。K-Means算法通过迭代更新簇中心,不断优化这个目标函数,来达到更好的聚类效果。

现在,我们已知数学公式,可以进一步了解K-Means算法是如何实现迭代优化的?

  1. K-Means算法是在不断迭代中找到最优解的,大致步骤如下:
  2. 初始化:随机选择K个数据点作为初始簇中心。
  3. 分配数据点:对于数据集中的每个数据点,计算其与各个簇中心的距离,并将其分配到距离最近的簇中心所在的簇。
  4. 更新簇中心:计算每个簇内所有数据点的均值(或其它形式的中心),将其作为新的簇中心。这个均值可以是算术平均值、几何平均值、中位数等。
  5. 重新计算误差:重新计算每个簇内数据点到簇中心的距离,并计算总的平方误差。
  6. 迭代:重复步骤(2)—(4),直到满足停止条件。停止条件可以是簇中心的变化小于某个阈值,或是达到预设的最大迭代次数,又或是误差函数的减少小于某个值。

从K-Means算法的步骤中,我们能发现该算法对初始簇中心的选择敏感,不同的初始中心可能导致完全不同的聚类结果。

3. K均值聚类算法能解决什么问题?

我们不能让算法只停留在理论层面,我们还需要让K-Means算法可以解决一些实际问题。

在实际场景中,K-Means算法可以解决聚类问题,通俗点说,可以帮我们完成大量数据的分类任务。比如:市场细分、图像分割、文档分组、异常检测或者数据压缩等。

【K-Means算法-客户分群】

假设公司的CRM系统中有大量的客户交易信息,比如购买时间、购买金额、购买频率、购买商品类型等。我们的目标是根据这些数据将客户分为不同的群体,以便更好地定制营销策略。

这时候采用K-Means算法就可以高效解决这个问题。

最开始,我们需要从CRM系统中提取相关的客户交易信息,做好数据准备。原始数据的数量和质量是影响最终目标成败的关键。

然后,我们需要对提取到的数据进行预处理。对数据进行清洗,处理缺失值、异常值,并可能进行归一化或标准化处理,以便于算法能够更好地处理这些数据。

K-Means算法需要预先指定簇的数量K,我们需要选择合适的K值。可以尝试不同的K值,并使用如肘部法则(Elbow Method)或轮廓系数(Silhouette Score)来完成选择。

然后是初始化簇中心。随机选择K个数据点作为初始簇中心,再使用选择的 K 值执行 K-Means 算法,将客户分为 K 个簇,每个簇代表一个客户群体。执行K-Means算法的过程中会涉及到多次的更新迭代。

此后,我们需要评估聚类结果,还需要对每个簇进行分析,了解每个客户群体的特征。这可能涉及到购买习惯、活跃度、商品偏好等方面的特征,还可以使用可视化工具展示每个簇的特征分布。

当我们一旦确定了最佳的聚类结果,就可以根据不同的客户群体制定个性化的营销策略。例如,对高价值客户采取个性化服务,对潜在回流客户采取促销活动,对频繁购买的客户群提供额外奖励等。

在整个假设案例的过程中,我们可以发现K-Means算法落地到实际应用场景中,能解决什么样的问题。

我们可以利用K-Means算法对客户交易数据进行聚类,从而实现客户群体的细分,帮助公司高层和市场销售人员更好地理解客户群体,市场部门可以制定更加精准和有效的营销策略,提高公司ROI,提高客户满意度,提高公司业务效益。

4. 层次聚类(Hierarchical Clustering)

层次聚类算法(Hierarchical Clustering)是一种基于数据点之间的相似性进行聚类的算法。与K-Means算法不同,层次聚类不需要预先指定簇的数量,它通过逐步合并或分裂现有的簇来构建一个簇的层次结构。

根据数据集的划分是“自底向上”的聚合策略,还是“自顶而下”的分拆策略,层次聚类算法可以进一步分为凝聚的层次聚类算法AGNES(AGglomerative NESting)和分裂的层次聚类算法DIANA(DIvisive ANAlysis)。

初始时,AGNES将每个对象自成一簇,之后这些簇依照某一种准则逐步合并。DIANA则以相反的方法处理,初始时将所有对象归为同一类簇,然后依据某种原则将该簇逐渐分裂。

层次聚类算法要比K均值聚类算法复杂,不依赖于一个单一的数学公式,而是通过一系列的步骤来构建一个簇的层次结构。

其中,凝聚的层次聚类算法AGNES的实现步骤是:

1)初始化:将每个数据点视为一个初始的单独的簇。

2)计算簇间距离:计算所有簇之间的距离或相似度。通常使用最短连接(Single Linkage)或最长连接(Complete Linkage)来衡量簇之间的距离。

最短连接是指两个簇中最近的两个点之间的距离,而最长连接是指两个簇中最远的两个点之间的距离。

3)合并最相似的簇:找到距离(相似度)最小的两个簇,将它们合并成一个新的簇。

4)更新距离矩阵:合并两个簇后,需要更新距离矩阵,以反映新合并的簇与其他簇之间的距离。主要表现在删除合并的簇之间的距离,并更新剩余簇之间的距离。

5)迭代:反复执行步骤(3)和(4),直到所有数据点被合并成一个大簇或满足某个停止准则。

6)形成簇树:最终,通过逐步合并相似的簇,形成一个簇的层次结构,称为簇树。在簇树中,每个节点代表一个簇,节点之间的边表示两个簇之间的距离。

AGNES这种自底向上的策略,从每个数据点开始,逐步将相似的簇合并,最终形成一个包含所有数据点的大簇。而且,它能够构建一个簇的层次结构,可以反映簇之间的关系和数据点的层次分布。

与AGNES相反,分裂的层次聚类算法DIANA的实现步骤是:

1)初始化:将所有数据点作为一个初始的单独的簇。

2)选择簇分裂点:在当前簇中选择一个数据点作为分裂点。通过计算当前簇中各个特征的方差,选择具有最大方差的特征作为分裂点。也可以基于数据点的统计特性来选择,比如选择当前簇中最小值或最大值作为分裂点。

选择分裂点的策略会影响最终的聚类结果,因此需要根据具体的数据集和应用场景来选择最合适的策略。

3)分裂簇:根据选定的分裂点,将当前簇分裂成两个子簇,形成一个新的层次结构。一个子簇包含所有小于或等于分裂点的数据点,另一个子簇包含所有大于分裂点的数据点。

4)迭代:重复步骤(2)和(3),直到满足停止条件。停止条件可以是达到预设的迭代次数、簇的大小小于某个阈值,或者簇的分裂不再产生显著的改进等。

5)形成簇树:迭代结束后,DIANA 生成一个层次树,也就是簇的层次结构,称为簇树。该树反映了分裂过程,每个节点表示一个簇。

DIANA算法采用的是自顶向下的递归分裂策略,不是AGNES那样的自底向上的合并策略。由于其在每个阶段选择分裂,逐步细化聚类结构,因此也被称为“分而治之”的聚类算法。

从算法特性中我们可以发现,DIANA适用于相对小型的数据集,因为在每一步都需要计算所有簇对之间的相异度,如果数据规模较大,计算复杂度就会变高,效率就会降低。

5. 层次聚类算法能解决什么问题?

纸上得来终觉浅,绝知此事要躬行。当面对实际问题时,层次聚类算法能发挥什么作用?

接下来,我们分别就AGNES算法和DIANA算法的原理,一起来看看应用场景中的假设案例,从案例中进一步知晓它们能解决哪些问题。

【AGNES算法-文档分类】

AGNES算法可以解决文档分类的问题,比如将相似的文档归为一类。

假设公司的文件管理系统中有大量的文档数据,需要我们在最短的时间内完成文档的归类工作。在文档种类繁多,文档数量庞大的情况下,我们就可以用AGNES算法来解决。

第一步就是数据准备,我们要先从文件管理系统中提取相关的文档数据,包括文档的内容、关键词、作者、创建时间、文件格式等。

然后,对提取的文档数据进行清洗,便于算法能够更好地处理这些数据。

再然后,确定衡量文档相似性的方法,常用的包括余弦相似度、欧氏距离等。选择适当的相似度度量方法有助于聚类算法更好地识别相似文档。

接下来,将每个文档视为一个单独的簇,或者随机选择一些文档作为初始簇中心。完成初始化聚类的操作。

接下来的几步,都是AGNES算法的迭代步骤,上一段有说过,这里可以简单跳过,简单来说,要做的就是“计算相似性—合并相似度最高的两个簇—反复迭代—确定最终聚类”。

执行完AGNES算法后,我们要对聚类结果进行分析,检查每个簇内的文档是否具有相似的主题或内容。根据需要,我们可以做一些优化,比如,调整算法参数或特征表示等。

最后,我们将文档按照聚类结果进行管理,就可以更方便地查找和理解文档内容。若有需要,也可以基于文档的聚类结果进行进一步的分析和决策。

【DIANA算法-学情分析】

如果在教育行业,DIANA算法可以用于进行细粒度的学情分析,给学生提供个性化的学科辅导和支持。

假设一所学校想要深入地了解并分析学生的学习情况,想知道学生是否达到了现阶段的教学目标,还要了解学生的考试成绩、作业完成质量、课堂表现等。通过DIANA算法可以解决这类问题。

照例,所有和算法相关的工作,数据收集都是首先要做的事情。我们要收集学生的学习数据,包括考试成绩、作业完成情况、课堂表现、参与讨论的频率和质量、学习资源的使用情况等。

然后是数据预处理,也就是对收集的数据进行数据清洗。包括去除异常值、处理缺失数据、标准化或归一化数据等。

拿着预处理后的数据,我们就可以使用DIANA算法对学生的学情数据进行聚类。算法的执行过程中需要进行反复迭代。

在每次迭代中,算法会找到在当前簇中具有最大或最小特征值(如考试分数、作业完成率等)的学生,并将其作为分裂点,将当前簇分裂成两个子簇。

迭代完成后,DIANA算法会形成一个簇的层次结构,将学生分为不同的层次群体,每个群体代表了一组具有相似学情特征的学生,通过分析每个簇的特征,我们可以识别出影响学生学情的关键因素,如学习习惯、学习资源的使用、课堂参与度等。

最后,在DIANA算法的帮助下,我们可以为不同群体的学生提供个性化的学习支持,如制定个性化的教学策略、提供针对性的教材和辅导、采用符合学生自身特点的教学方法等。

通过以上的假设案例,我们不难发现,层次聚类算法在实际场景中能帮助我们解决不少问题。

其中,AGNES算法能够将相似的文档归为一类,从而解决文档分类的问题,有利于公司管理大量的文档数据,提高文档检索的效率。

与其对应的,DIANA算法可以基于学生的学习数据,帮助老师们了解学生的学习情况,为学生提供个性化的学科辅导,帮助学生克服学习困难。拥有了这样的学情数据,学生的学习成绩提升,老师教学质量的提高,那都是迟早的事情。

三、总结与预告

在现在的信息爆炸时代,数据已经成为了我们生活和工作中不可或缺的一部分,我们需要更有效方法来处理海量的数据,特别是在AI领域。

而人工智能算法不仅可以提高我们的工作效率,还能帮助我们做出更准确的决策。

本篇重点介绍了聚类算法中的K均值聚类算法和层次聚类算法。我们从基本概念说起,聊到算法实现的步骤,通过假设案例带入实际场景,将算法从书本中拉到现实世界中,看看算法能帮我们解决哪些问题。

比如,K均值聚类算法可以将客户分为不同的群体,能帮助企业更好地了解客户,制定更有效的营销策略。

层次聚类算法中的AGNES算法可以将相似的文档归为一类,帮助企业更好地管理和分析文档。DIANA算法可以完成学情分析,帮助学校或教育机构更好地了解学生的学习情况,制定更有效的教学策略。

最后,简单预告一下,无监督学习的内容还未结束,后续的篇章我会继续和大家聊聊关于无监督学习降维算法、落地场景和相关案例等。

AI真的很有意思,如果你也喜欢,那就一起吧。

作者:果酿,公众号:果酿产品说

本文由 @果酿 原创发布于人人都是产品经理,未经作者许可,禁止转载。

题图来自 Unsplash,基于CC0协议。

该文观点仅代表作者本人,人人都是产品经理平台仅提供信息存储空间服务。

更多精彩内容,请关注人人都是产品经理微信公众号或下载App
评论
评论请登录
  1. 目前还没评论,等你发挥!