层次聚类算法的原理及实现Hierarchical Clustering

层次聚类(Hierarchical Clustering)是聚类算法的一种,通过计算不同类别数据点间的相似度来创建一棵有层次的嵌套聚类树。在聚类树中,不同类别的原始数据点是树的最低层,树的顶层是一个聚类的根节点。创建聚类树有自下而上合并和自上而下分裂两种方法,本篇文章介绍合并方法。

层次聚类的合并算法

层次聚类的合并算法通过计算两类数据点间的相似性,对所有数据点中最为相似的两个数据点进行组合,并反复迭代这一过程。简单的说层次聚类的合并算法是通过计算每一个类别的数据点与所有数据点之间的距离来确定它们之间的相似性,距离越小,相似度越高。并将距离最近的两个数据点或类别进行组合,生成聚类树。

欧几里德距离矩阵

层次聚类使用欧式距离来计算不同类别数据点间的距离(相似度)。我们在前面的几篇文章中都曾经介绍过欧氏距离的计算方法,本篇文章将通过创建一个欧式距离矩阵来计算和对比不同类别数据点间的距离,并对距离值最小的数据点进行组合。以下是欧式距离的计算公式。

以下为示例数据,我们通过欧氏距离计算下面A到G的欧式距离矩阵,并通过合并的方法将相似度最高的数据点进行组合,并创建聚类树。

创建欧式距离矩阵的方法很简单,将每个类别的数据点分别与A-G中的每个数据点计算距离值,其中A—>B表示数据点A到数据点B的距离,B—>A则代表数据点B到数据点A的距离。这两个距离值是相同的,因此欧式距离矩阵呈对角线对称(绿色部分和蓝色部分)。其中对角线的0值是数据点与自己的距离值。我们将所有数据点间的距离结果进行对比,选择其中距离最近的两个数据点进行组合,并迭代这一过程。下图显示了欧式矩阵的逻辑和计算方法。

数据点之间的距离    

对于示例中的数据点,我们通过计算获得了下面的欧式距离矩阵。其中数据点B到数据点C的距离在所有的距离值中最小,为1.00。以下为数据点间距离值的计算公式。

经过计算数据点B和数据点C与其他数据点相比有最高的相似度。因此,我们将数据点B和数据点C进行组合。并再次计算其他数据点间的距离。

数据点与组合数据点间的距离

将数据点B与数据点C进行组合后,重新计算各类别数据点间的距离矩阵。数据点间的距离计算方式与之前的方法一样。这里需要说明的是组合数据点(B,C)与其他数据点间的计算方法。当我们计算(B,C)到A的距离时,需要分别计算B到A和C到A的距离均值。

经过计算数据点D到数据点E的距离在所有的距离值中最小,为1.20。这表示在当前的所有数据点中(包含组合数据点),D和E的相似度最高。因此我们将数据点D和数据点E进行组合。并再次计算其他数据点间的距离。

后面的工作就是不断的重复计算数据点与数据点,数据点与组合数据点间的距离。这个步骤应该由程序来完成。这里由于数据量较小,我们手工计算并列出每一步的距离计算和数据点组合的结果。

这一步中,数据点A和数据点F的距离值在所有距离值中最小,因此我们将A和F进行组合,生成组合数据点(A,F)。

到此为止除了数据点G以外,其他的数据点都已经根据距离值(相似度)进行了组合。聚类树的最底层已经完成。下面我们将继续计算组合数据点间的距离,并对相似度最高的组合数据点进行合并。

两个组合数据点间的距离

计算两个组合数据点间距离的方法有三种,分别为Single Linkage,Complete Linkage和Average Linkage。在开始计算之前,我们先来介绍下这三种计算方法以及各自的优缺点。

Single Linkage

Single Linkage的计算方法是将两个组合数据点中距离最近的两个数据点间的距离作为这两个组合数据点的距离。这种方法容易受到极端值的影响。两个很相似的组合数据点可能由于其中的某个极端的数据点距离较近而组合在一起。

Complete Linkage

Complete Linkage的计算方法与Single Linkage相反,将两个组合数据点中距离最远的两个数据点间的距离作为这两个组合数据点的距离。Complete Linkage的问题也与Single Linkage相反,两个不相似的组合数据点可能由于其中的极端值距离较远而无法组合在一起。

Average Linkage

Average Linkage的计算方法是计算两个组合数据点中的每个数据点与其他所有数据点的距离。将所有距离的均值作为两个组合数据点间的距离。这种方法计算量比较大,但结果比前两种方法更合理。

我们使用Average Linkage计算组合数据点间的距离。下面是计算组合数据点(A,F)到(B,C)的距离,这里分别计算了(A,F)和(B,C)两两间距离的均值。

通过计算及对比不同组合数据点间间的距离。(A,F)到(B,C)的距离在所有组合数据点间最小,为13.25。说明(A,F)到(B,C)相似度最高。因此,将(A,F)到(B,C)组合为(A,F,B,C)。

使用与之前相同的方法计算出组合数据点(D,E)和G的距离在目前所有组合数据点中最小。为34.70。将(D,E)和G组合为(D,E,G)。

最终,通过计算和合并,我们获得了两个组合数据点(A,F,B,C)和(D,E,G)。这也是聚类树的最顶层的两个数据点。下面,我们按之前的计算步骤来构建聚类树。

层次聚类树状图

将前面的每一步的计算结果以树状图的形式展现出来就是层次聚类树。最底层是原始A到G的7个数据点。依照7个数据点间的相似度组合为聚类树的第二层(A,F),(B,C),(D,E)和G。以此类推生成完整的层次聚类树状图。以下为简单的示意图。

—【所有文章及图片版权归 蓝鲸(王彦平)所有。欢迎转载,但请注明转自“蓝鲸网站分析博客”。】—

FILED UNDER: 网站数据分析 TAGGED WITH: HIERARCHICAL CLUSTERING

Co

Read more: http://bluewhale.cc/2016-04-19/hierarchical-clustering.html#ixzz50SsD0zfp

层次聚类算法的原理及实现Hierarchical Clustering相关推荐

  1. 【通俗易懂】层次聚类算法的原理及实现

    层次聚类(Hierarchical Clustering)是聚类算法的一种,通过计算不同类别数据点间的相似度来创建一棵有层次的嵌套聚类树.在聚类树中,不同类别的原始数据点是树的最低层,树的顶层是一个聚 ...

  2. 层次聚类算法原理总结

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 层次聚类(hierarchical clustering)基于簇间 ...

  3. ML之Hierarchical clustering:利用层次聚类算法来把100张图片自动分成红绿蓝三种色调

    ML之Hierarchical clustering:利用层次聚类算法来把100张图片自动分成红绿蓝三种色调 目录 输出结果 实现代码 输出结果 实现代码 #!/usr/bin/python # co ...

  4. 机器学习-Hierarchical clustering 层次聚类算法

    学习彭亮<深度学习基础介绍:机器学习>课程 假设有N个待聚类的样本,对于层次聚类来说,步骤: (初始化)把每个样本归为一类,计算每两个类之间的距离,也就是样本与样本之间的相似度: 寻找各个 ...

  5. K-Means聚类算法的原理及实现

    K-Means聚类算法的原理及实现[转] [转]http://www.aboutyun.com/thread-18178-1-1.html 问题导读: 1.如何理解K-Means算法? 2.如何寻找K ...

  6. 机器学习 改进的层次聚类算法

    http://www.cnblogs.com/wentingtu/archive/2012/01/04/2311533.html 基本工作原理 给定要聚类的N的对象以及N*N的距离矩阵(或者是相似性矩 ...

  7. Crawler/ML:爬虫技术(基于urllib.request库从网页获取图片)+HierarchicalClustering层次聚类算法,实现自动从网页获取图片然后根据图片色调自动分类

    Crawler/ML:爬虫技术(基于urllib.request库从网页获取图片)+HierarchicalClustering层次聚类算法,实现自动从网页获取图片然后根据图片色调自动分类 目录 一. ...

  8. 层次聚类算法 算法_聚类算法简介

    层次聚类算法 算法 Take a look at the image below. It's a collection of bugs and creepy-crawlies of different ...

  9. 无监督学习之层次聚类算法

    层次聚类算法 1.定义 2. 自底向上的合并算法 2.1 计算过程 2.2.两个组合数据点间的距离 2.3实例 1.定义 层次聚类(Hierarchical Clustering)属于聚类算法,通过计 ...

最新文章

  1. Sentinel v1.4.2 发布,更好用的集群限流功能
  2. Maven 的dependency 的 classifier的作用
  3. java基础知识1---面向对象及final,finally,finalize区别
  4. 【转】MySQL innodb_autoinc_lock_mode 详解 ,并发插入时主键冲突的解决方案
  5. Dynamo:亚马逊的高可用键值存储
  6. Redis进阶之持久化
  7. C++ queue和priority_queue
  8. 操作系统课设之基于信号量机制的并发程序设计
  9. openGL es实现小实例
  10. Visual Studio 窗口的图标、图片资源 $this.Icon 在哪查看
  11. C++ ---------------- 成员函数指针揭秘
  12. 《.Net 软件设计新思维》作者讲述成书的背后故事
  13. 网络互撕是群体极化的典型症状
  14. Asterisk 11 chan_sip.c: Failed to authenticate device 看不到IP的问题
  15. 数据结构之队列java版
  16. excel图表交互联动_Excel图表联动的三种方法
  17. python输出生日程序_python生日算法
  18. MATLAB绘图函数fplot详解
  19. AutoJs学习-多点取色
  20. 克里金方法内插生成高程曲面

热门文章

  1. 增量模型(incremental model) 设计核心功能+逐步累加
  2. 超全的 Python 库,赶快收藏!
  3. 微信小程序过审:怎么绕过微信小程序上线审核,并且不影响正常用户使用,有用记得点赞哈
  4. ps性能打不开的解决方法
  5. 国内云计算市场发展行情
  6. win10搭建代理服务器实现绕过校园网的共享限制--从入门到放弃
  7. 将音频格式wav格式转为g711u,g711a及g723
  8. mysql企业版集群版区别_MySQL版本Enterprise/Community/Cluster等版本的区别
  9. 电大本科计算机考试英语成绩查询,(2017年电大)电大计算机考试本科试题.doc...
  10. 全球及中国光电吊舱应用前景与投资可行性研究报告2022~2027年