深入浅出聚类算法

本文深入探讨了聚类算法,解释了它与分类问题的区别,强调聚类算法无需预先定义类别。文章介绍了聚类问题的严格定义、簇的概念以及主要的聚类算法,包括层次聚类、k均值、EM算法、DBSCAN和谱聚类等。通过实例阐述了各类算法的工作原理,展示了聚类在自动识别和数据组织中的应用。
摘要由CSDN通过智能技术生成

其它机器学习、深度学习算法的全面系统讲解可以阅读《机器学习-原理、算法与应用》,清华大学出版社,雷明著,由SIGAI公众号作者倾力打造。

导言
聚类问题是机器学习中无监督学习的典型代表,在数据分析、模式识别的很多实际问题 中得到了应用。在本文中, SIGAI 将为大家深入浅出的介绍聚类问题的定义以及各种典型的 聚类算法,帮助大家建立对聚类算法最直观、本质的概念。

什么是聚类?

我们知道,分类问题是机器学习中最常见的一类问题,它的目标是确定一个物体所属的类别。例如,我们要判定一个水果是苹果、杏,还是桃。解决这类问题的办法是先给一些各种类型的水果让算法学习,然后根据学习得到的经验对一个水果的类型做出判定。这就像一个幼儿园的小朋友,老师先拿各种水果教他们,告诉每种水果是什么样子的,接下来这些孩子就会认这些类型的水果了。这种做法称为有监督学习,它有训练和预测两个过程,在训练阶段,我们用大量的样本进行学习,得到一个判定水果类型的模型。接下来,在预测阶段,给一个水果,就可以用这个模型预测出它的类别,这一过程如下图所示:

聚类也是要确定一个物体的类别,但和分类问题不同的是,这里没有事先定义好的类别,聚类算法要自己想办法把一批样本分开,分成多个类,保证每一个类中的样本之间是相似的,而不同类的样本之间是不同的。在这里,类型被称为“簇”(cluster)。以下面的图为例,这里有一堆水果,但我们事先没有告诉你有哪些水果,也没有一个训练好的判定各种水果的模型,聚类算法要自动将这堆水果进行归类:

这一次,老师并没有事先告诉孩子们各种水果是什么样子的,孩子们需要自己将水果进行归类划分,而且这些水果可能是他们不认识的。这里没有统一的、确定的划分标准,有些孩子将颜色相似的水果归在了一起,而另外一些孩子将形状相似的水果归在了一起,还有一些孩子将尺寸大小相似的水果归在了一起。

聚类算法没有训练过程,这是和分类算法最本质的区别,算法要根据自己定义的规则,将相似的样本划分在一起,不相似的样本分成不同的类。 

问题的严格定义

聚类问题可以抽象成数学中的集合划分问题。假设一个样本集C

 

聚类算法把这个样本集划分成m个不相交的子集 c_{1},...,c_{m} 即簇。这些子集的并集是整个样本集:

每个样本只能属于这些子集中的一个,即任意两个子集之间没有交集:

同一个子集内部的各个样本之间要很相似,不同子集的样本之间要尽量不同。其中m的值可以由人工设定,也可以由算法确定。在这里划分的标准是不确定的,具体什么叫做两个样本很相似,什么叫做不同,并没有统一的答案,需要聚类算法自己决定。例如,如果有下面的样本集:

我们可以划分成下面的两个子集:

划分的依据是第一个子集的元素都是奇数,第二个都是偶数。也可以划分成这样:

 

这是按照每个数除以3之后的余数进行划分。从这里可以看出,聚类并没有统一的对样本进行划分的标准,可谓是“仁者见仁,智者见智”。 

簇的定义

聚类本质上是集合划分问题。因为没有人工定义的类别标准,因此算法要解决的核心问题是如何定义簇,唯一的要求是簇内的样本尽可能相似。通常的做法是根据簇内样本之间的距离,或是样本点在数据空间中的密度来确定。对簇的不同定义可以得到各种不同的聚类算法。常见的聚类算法有:

连通性聚类。典型代表是层次聚类算法,它根据样本之间的联通性来构造簇,所有联通的样本属于同一个簇。

基于质心的聚类。典型代表是k均值算法,它用一个中心向量来表示这个簇,样本所属的簇由它到每个簇的中心距离确定。入下图所示:

在上图中有蓝色和黄色两个簇,它们由各省的簇中心向量表示(十字形状)。黑色的样本离蓝色的类中心更近,因此被划分到这一类。

基于概率分布的聚类。算法假设每种类型的样本服从同一种概率分布,如多维正态分布,典型代表是EM算法。

基于密度的聚类。典型代表是DBSCAN算法,OPTICS算法,以及均值漂移(Mean shift)算法,它们将簇定义为空间中样本密集的区域。下图中有3个簇,它们都是样本分布密集的区域,对簇的形状则无限制:

基于图的算法。这类算法用样本点构造出带权重的无向图,每个样本是图中的一个顶点,然后使用图论中的方法完成聚类。

主要的算法

接下来我们介绍几种典型的聚类算法,包括层次聚类,k均值算法,EM算法,DBSCAN算法,OPTICS算法,Mean Shift算法,谱聚类算法。

层次聚类

对于现实生活中的某些问题,类型的划分具有层次结构。如水果分为苹果,杏,梨等,苹果又可以细分成黄元帅、红富士、蛇果等很多品种,杏和梨也是如此。将这种谱系关系画出来,是一棵分层的树。层次聚类使用了这种做法,它反复将样本进行合并,形成一种层次的表示。

初始时每个样本各为一簇,然后开始逐步合并的过程。计算任意两个簇之间的距离,并将聚类最小的两个簇合并。下图是对一堆水果进行层次聚类的示意图:

算法依赖于两个簇的距离值,因此需要定义它的计算公式。常用的方案可有3种。第一种方案是使用两个簇中任意两个样本之间的距离的最大值,第二种方案是使用两个簇中任意两个样本之间的距离的最小值,第三种方案是使用两个簇中所有样本之间距离的均值。

 

基于质心的聚类

基于质心的聚类算法计算每个簇的中心向量,以此为依据来确定每个样本所属的类别,典型的代表是k均值算法。

k均值算法是一种被广泛用于实际问题的聚类算法。它将样本划分成个类,参数由人工设定。算法将每个样本划分到离它最近的那个类中心所代表的类,而类中心的确定又依赖于样本的划分方案,这里存在着循环依赖,是一个先有鸡还是先有蛋的问题:

 

k均值算法解决此问题的方法是先给给每个簇初始化一个不靠谱的中心向量值,然后计算每个样本离各个簇中心的距离,将其分到最近的那个簇中心所代表的簇。接下来根据对所有样本的分配重新计算每个簇的中心向量,它是该簇所有样本的均值。如此循环,直至收敛,这是一种迭代法。

算法在实现时要考虑下面几个问题:

1.类中心向量的初始值。一般采用随机初始化。最简单的是Forgy算法,它从样本集中随机选择k个样本作为每个类的初始类中心。第二种方案是随机划分,它将所有样本随机的分配给k个类中的一个,然后按照这种分配方案计算各个类的中心向量。
2.参数k的设定。可以根据先验知识人工指定一个值,或者由算法自己确定。
3.迭代终止的判定规则。一般做法是计算本次迭代后的类中心和上一次迭代时的类中心之间的距离,如果小于指定阈值,则算法终止。

k均值算法有多种改进版本,包括模糊c均值聚类,用三角不等式加速等。

基于概率分布的聚类

基于概率分布的聚类算法假设每个簇的样本服从相同的概率分布,这是一种生成模型。经常使用的是多维正态分布,如果服从这种分布,则为高斯混合模型,在求解时一般采用EM算法。

EM算法即期望最大化算法,是一种迭代法,用于聚类问题时,它同时估计出每个样本所属的簇以及每个簇的概率分布的参数。如果要聚类的样本数据服从它所属的簇的概率分布,则可以通过估计每个簇的概率分布以及每个样本所属的簇来完

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值