用一个例子学习层次聚类

用一个例子学习层次聚类

H 分层聚类 真的用的不多,如果用scikit-learn的话,语法和其他模型差别不大,除了构造函数的参数。

虽然几乎所有的 sklearn 模型总是被当作黑匣子使用(毕竟没有人总是在轮子上建立一家汽车公司),但找到一种方法来记住这些不常见的模型很重要,经过思考后,我想我会单独写这篇文章,用一个例子来说明算法。

这个例子是加拿大几个城市之间的距离,然后是“最近”的距离来做一个集群。它是在 IBM 的技能网络中找到的,我将在此处列出以直观地说明它。

假设我们要根据彼此之间的距离对加拿大的六个城市进行聚类。它们是多伦多(TO)、渥太华(OT)、温哥华(VA)、蒙特利尔(MO)、温尼伯(WI)和埃德蒙顿(ED)。

我们在这个阶段构造一个距离矩阵,其中第 i 行第 j 列的数字是 i 和 j 个城市之间的距离。

dis(i , j)

事实上,这张表显示了每对城市之间的距离。该算法通过将每个城市分配到其自己的集群开始。因此,如果我们有六个城市,我们就有六个集群,每个集群只包含一个城市。让我们通过显示其名称的前两个字符来记下每个城市。

第一步是确定哪些城市,我们从现在开始称它们为集群,合并成一个集群。通常,我们想把这两个 最近的 根据选择的距离进行聚类。查看距离矩阵,MO 和 OT 是 最近的 集群 所以 我们用它们组成一个集群,

请注意,我们在这里只使用了一个简单的一维距离特征,但是我们的对象可以是多维的,距离测量也可以是 ** 欧几里得** , ** 皮尔逊** , ** 平均距离或许多其他** 取决于数据类型和领域知识 .

无论如何,我们必须合并这些 最接近的两个 距离矩阵中的城市也是如此。

因此,在构建集群时行和列被合并。

  • 正如您在距离矩阵中看到的,与 MO 和 OT 城市相关的行和列在构建集群时被合并。

  • 与所有城市的距离 到这个新的合并集群 得到更新。但是怎么做?例如,我们如何计算 WI 到 [OT/MO] 集群的距离?好吧,有不同的方法,但让我们假设,例如,我们只是选择距离 [OT/MO] 集群的中心(Ward 联动) 到威斯康星。更新距离矩阵,我们现在少了一个簇。

  • 我们寻找 最近的 再次聚集。在这种情况下,[OT/MO] 和 TO 是 最近的 创建另一个集群的那些。

  • VA 集群和 ED 集群之间的最近距离。形成一个新的集群,矩阵表中的数据得到更新。

本质上 ,行和列在聚类合并和距离更新时合并。这是实现此类集群的常用方法,并且具有缓存集群之间的距离的好处。同理,凝聚算法通过合并集群进行,我们重复它,直到所有集群都合并并且树完成。这意味着,直到所有城市都聚集成一个大小为六的集群。层次聚类通常可视化为 树状图 如这张幻灯片所示。

树状图:

  • 每个合并由一条水平线表示。
  • 水平线的 y 坐标是合并的两个集群的相似性,其中城市被视为单例集群。

  • 通过从底层向上移动到顶层节点,树状图允许我们重建导致所描绘的聚类的合并历史。

本质上 , 层次聚类 不需要 预先指定数量的集群。但是,在某些应用程序中,我们希望对不相交的集群进行分区,就像在平面集群中一样。在这些情况下,需要在某些时候削减层次结构。例如这里,切入一个 特定的相似度( 临界点 ) ,我们创建了三个相似城市集群。

希望你作为读者,包括我,会记住一个例子中的算法。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明

本文链接:https://www.qanswer.top/7592/15270108

posted @ 2022-09-01 08:16  哈哈哈来了啊啊啊  阅读(193)  评论(0编辑  收藏  举报