当前位置: 首页 > news >正文

(八)聚类

聚类区内的内容,一节课能讲完,但涉及内容较多,要点不多,主要有几件事需大家了解。首先,聚类是无监督学习的典型任务。记得课程开头讲过有监督学习、非监督学习,在监督学习方面大量时间用于讲预测内容,其实都是有监督的无监督学习的最典型代表是聚类,但无监督学习不仅限于聚类。其实无监督学习还有密度估计

大家可以这样看,在有监督学习中有分类和回归,分类是将事物预测到离散的有数个类内,回归是得出连续的实值。无监督学习中也有类似情况,聚类对应于分类,密度估计则对应于回归。密度估计可以认为是对数据分布进行估计,计算各处的密度,这也是典型的无监督学习。聚类的目的是将数据分成若干个簇。在聚类中,我们最好不再使用“类”这个词,而是用“cluster”,也有叫“簇”的,也有人把它叫做“急促”,这种叫法也有,但较少见。我们还是称其为聚类,但将其形成一个个的cluster。

例如,对在座的同学进行聚类,可以简单地分成两个cluster,一个cluster是男生,一个cluster是女生;或者一个cluster是戴眼镜的,一个cluster是没戴眼镜的。这就是将人分成很多组。聚类既可以作为单独的过程,了解数据内部的分布规律,也可以作为分类的预处理。例如,以前在进行互联网客户评价时,若不知道客户可大致分为哪几类进行评价,可先进行聚类,观察每个簇的大致含义,再将其作为分类后的样本类别。这时,聚类就作为分类等其他学习任务的前驱过程,这是其用法。

聚类性能度量

在聚类中,我们可以设计许多聚类指标,这些指标在聚类评价质量上被称为有效性指标,即validity index,这只是该领域的叫法。它实际上与第二章讲到的机器学习评价指标相同,用于评价聚类结果的好坏。因此,看到有效性指标时,应理解为对聚类结果的评价标准。它类似于精度、错误率、precision和recall等指标。

常见的有效性指标有几种,一种是外部指标。由于聚类是无监督的,缺乏客观标准,我们如何判断其好坏呢?在评价时,我们可以引入一个客观标准。即,如果已经有其他分类结果,我们只需比较两者是否一致。例如,我们拿到数据后使用某种算法进行聚类,但由于是无监督的,我们如何判断其效果呢?如果没有其他标准,我们可以引入一个外部参考模型作为标准,然后评估聚类结果与参考模型的吻合程度。基于此,我们可以定义许多指标,如加卡的系数、fm指数、Rand指数等。

它们的基本思想是:如果两个样本在参考模型中属于同一个簇,而在聚类结果中也属于同一个簇,则加一分;如果两个样本在参考模型中不属于同一个簇,而在聚类结果中也不属于同一个簇,则减一分。注意,由于无法将参考模型的簇与聚类结果的簇完全对应,因此只能基于一对一对的样本进行比较。即如果一对样本在参考模型中在一起,在聚类结果中也在一起,则认为是好的;如果一对样本在参考模型中不在一起,在聚类结果中也不在一起,也是好的。这类似于分类时的联立矩阵,通过该矩阵可以定义许多指标。但这种方法的好坏性值得讨论。例如,如果按性别将学生分为两类,而参考模型是基于是否戴眼镜,那么如何判断聚类结果呢?因此,外部参考模型本身可能并不完全合理

于是,另一种方法是内部指标,即不考虑任何参考模型,只评估聚类结果本身的优劣。我们需要思考什么样的聚类结果是我们想要的。直观的想法是,同一个簇内的样本应尽可能相近,不同簇的样本应尽可能远离。若形成这样的形态,估计效果不如刚才那个,因为刚才那两个隔得更远。因此,我们可以这样衡量“紧”的程度:比如在这个聚类中,半径或直径有多大?直径越小,聚类越紧密。我们也可以衡量两个聚类中心的距离,中心距离越大,聚类越分散。基于这样的想法。我们可以定义很多指标,比如聚类内的平均直径越小越好,最小直径越小越好,或者聚类间中心距离越大越好,或者采用某种组合方式。这些都可以定义出很多指标。基本思想是:簇类相似度高,并且簇间相似度低。

距离计算

所以这里我们要谈一谈距离,既然谈到促进要尽可能紧、尽可能远,这必然涉及某种距离,否则无法说明近和远。因此,我们要严格定义距离。在机器学习领域,我们通常所说的距离是什么?

通常,我们将距离和度量放在一起讨论,注意“metric”这个词。很多时候,当我们谈距离时,实际上是在谈一种度量,满足度量需要满足四个条件非负性,即任何点到另一个点的距离都大于等于零,不可能是负距离;同一性,自己到自己的距离是零,且如果距离是零,则一定是自己到自己;对称性,我到你的距离和你到我的距离应该相等;满足三角不等式,即从x到j的直接距离一定小于经过任何中介点的距离。如果满足这四个性质,我们称之为距离度量。但我们要注意,我们遇到的距离不一定都满足度量条件。

在早期研究中,谈距离时通常指满足度量的四个标准,但后来人们发现,在某些应用中可能需要突破这些度量标准,因此有时称之为非度量距离,即违背了这四项中的某一项,通常违背三角不等式,例如一个简单的例子:这是个马、那是个人、另一个是个人头马,人和人头马有相似之处,马和人头马也相似,但人和马很不相似,实际上它们的相似性远小于其他情况,这就是一种非距离度量。在某些应用中,如图像检索,需要这种非度量的距离,这时我们称之为相似度。所以看到相似度这个词时,要想起距离,距离越远,相似度越小。但相似度不一定满足四个度量性质。我们所说的非度量距离等,都可以看作是一种相似度,这样理解更简单。

对于连续值,我们通常使用闵可夫斯基距离,即每个特征分量的差,然后求p次方根。当p等于2时,就是欧式距离,即平方开根号当p等于1时,就是曼哈顿距离。这是针对实质属性的,那么离散属性怎么办呢?离散属性比较特殊,我们需要分开讨论,看是有序还是无序。大中小属性是有序的,可以将其转化为1、0.5、0,转化后,计算方式不变。但无序属性不适用,对于无序属性,我们通常如何处理呢?

有一种叫VDM的方法,即value difference metric,这是很典型的做法。它实际上是通过比较两个无序属性出现的频率来评估它们是否相似,进而计算它们的距离。定义如下:属性U上取值为a的样本数定义为,用m表示样本数目,属性U取值为a在第i个cluster中取值为a的数目定义为

。那么,如何计算a和b这两个feature的距离呢?对于离散属性或无序属性,我们这样表达后,更多时候会遇到混合属性,包括连续属性和离散属性。离散属性中既有有序的也有无序的,这时该怎么办呢?我们可以将它们组合起来,可以证明这种方法满足距离度量的四个条件,因此它也是一个有效的距离度量。

类聚方法概述

聚类的好坏不存在绝对标准。例如,将同学聚成两类,可以聚成男生一类、女生一类,也可以聚成戴眼镜一类、不戴眼镜一类,穿短袖一类、不穿短袖一类。不同聚类方式均可,如将颜色相近的归为同一类,或根据其他标准。聚类的好坏完全取决于用户的标准。用户应明确自己想要的聚类结果,但用户希望可能是无穷无尽的。因此,可以找到无穷多个可能的标准,这些标准可能是以前聚类算法未考虑到的,总能找到一个标准,使得以前的算法表现不佳,而新算法能做得更好。例如,若希望将某些特定特征的对象归为一类,而以前的算法未能实现,则可以设计新算法来实现。下面我讲一个故事,帮助大家理解这一点。

聚类领域算法众多,文献丰富,因为总能设计出不同的标准,使得其他算法在特定标准下表现不佳,而新算法表现良好。这种情况无穷无尽。因此,研究聚类文献时会发现,关于聚类的文献最多,但没有客观标准。设计新标准时,必须考虑该标准在现实中的重要性,以及是否是虚构的、现实中不会出现的。如果标准不现实或虚构,则相应算法也不重要。因此,不可能穷尽学习所有聚类算法,因为这是一个无穷尽的领域。每想要获得一种聚类结果,都可能发现以前的算法可能不适合当前标准。因此,在做应用或工作时,如果发现试了很多聚类算法都不起作用,这是非常正常的,因为当前考虑的标准可能与以前研究过的标准完全不同。

对于聚类,首先要明确标准。如果以前已经有以这个标准为目标的好算法,可以放心使用;如果发现当前标准以前从未考虑过,则不要期望通过调整现有算法直接得到满意结果。你必须基于你的标准去优化算法,这样算法才能根据你的标准进行优化,从而得到好的聚类结果。很多工业界的朋友常说,他们尝试了各种聚类算法,如K均值,但效果不佳,这是很正常的。不要期望能找到一个直接可用的算法,因为可能需要考虑的问题类型太多。所以,大家不必对每一个算法都深入了解,重要的是理解聚类的典型思路,并根据自己的标准结合这些思路。这样,你可能就会得到一个对你问题有用的算法。

因此,我们最重要的是要理解常见的聚类算法及其典型思路和过程。首先,我们要讲的一类是原型聚类,这种技术相对简单,英文名为prototype-based clustering,具体名称并不重要。这一类算法的特点是:其聚类结果可以用一组原型来刻画,每个原型可以看作是一个样本点,最终能找到每个簇中的代表性对象。通常的做法是先初始化原型,然后进行迭代更新求解,这是其基本的方法。先初始化一个原型,然后进行迭代求解,其中K均值聚类是典型代表

第二大类是基于密度的聚类,它通过考虑样本的紧密程度来得到聚类结果,这与上面的方法大不相同。它考虑的是样本的密度,其中的代表有DBSCAN等,我们重点讲解DBSCAN算法,这个算法非常有趣。它能够发现一些复杂、细致的结构。

第三类方法是层次聚类,层次聚类能够得到一层一层的多粒度聚类结果展示,这非常好。多粒度是什么意思呢?比如,我们刚才说的把全班同学聚成两类或三类,但实际上,我们是否有可能得到一种层次化的结构?层次化结构是什么意思呢?在最底层的时候,假设有十个同学,我就把它们看成十个簇;在上一层,我可能把两个簇合并成一个,或者把五个簇合并成更少的簇,再往上聚成两类,最后聚成一类。这就是一个层次结构,从上往下最上面是一层,下面可以聚成两个簇,再下面可以聚成三个簇等,这样我们就得到了不同粒度的观察。如果我希望观察得更细致一些,我就去看下面的簇比较多;如果我希望看得粗略一些,我就去看上面的簇。这就是层次聚类带给我们的好处。这里我们讲的AGNES它是自底向上的,而DIANA是自顶向下的结合,思想非常简单。

现在总体评述一下这三种方法各自的好处。第一种是原型聚类,研究最多,且背后有非常好的概率解释。原型聚类算法,如k均值,都可以看成是高斯混合聚类的一个特例。高斯混合聚类可以用概率论和统计学习的方法诠释,解释性较好。但它有个缺点,原型聚类如k均值聚类,通常只能找出椭球形的聚类结构。对于一个月牙形的结构,它不太能找出来

我们刚才评价一个聚类,应该是聚类内部尽可能紧密,距离尽可能小,聚类之间尽可能远离。但月牙形结构的聚类内部距离很近,聚类之间距离很远,原型聚类很难做好。而密度聚类倒是能做好,特别擅长处理这样的香肠型结构。所以,如果你的聚类结构是这种香肠型的,那密度聚类很适合。当然,这里说的是标准型。

相关文章:

  • node js入门,包含express,npm管理
  • 【3.3】Pod详解——容器探针部署第一个pod
  • Python 可迭代的对象、迭代器 和生成器(另一个示例:等差数列生成器)
  • 设计模式 | 组合模式
  • Excel之证件照换底色3
  • Ubuntu无法显示IP地址
  • 【算法设计与分析】(二)什么是递归,以及分治法的基本思想
  • Mac homebrew 安装教程
  • 左神算法之Zigzag方式打印矩阵
  • Redis分布式锁核心原理源码
  • SpringCloud系列(40)--SpringCloud Gateway的Filter的简介及使用
  • 和ai对话:讨论一个简单的理财方案
  • Halcon 常用算子总结
  • 基于 SpringBoot 实现一个 JAVA 代理 HTTP / WS
  • MyBatis实战指南(八)MyBatis日志
  • 热传导方程能量分析与边界条件研究
  • HarmonyOS实战:自定义表情键盘
  • < OS 有关 4 台 Ubuntu VPSs 正在被攻击:nginx 之三> 记录、分析、防护的过程 配置 ufw Fail2Ban 保护网络上的主机
  • 个人计算机系统安全、网络安全、数字加密与认证
  • Github 2025-06-29php开源项目日报 Top10