用一个例子学习层次聚类
作者:互联网
用一个例子学习层次聚类
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
标签:层次,MO,合并,距离,例子,集群,聚类,OT 来源: https://www.cnblogs.com/amboke/p/16645187.html