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

转载 2017年05月27日 17:21:44

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

hierarchicalcluster

层次聚类的合并算法

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

欧几里德距离矩阵

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

Euclidean distance

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

数据

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

欧式距离矩阵1

数据点之间的距离    

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

BtoA

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

距离矩阵1

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

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

BCtoA

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

距离矩阵2

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

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

距离矩阵3

到此为止除了数据点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)两两间距离的均值。

 

AFtoBC

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

距离矩阵4

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

距离矩阵5

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

距离矩阵6

 

层次聚类树状图

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

Hierarchical Clustering



参考原文:http://bluewhale.cc/2016-04-19/hierarchical-clustering.html

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

层次聚类算法

层次聚类算法是一个应用广泛的算法,小编最近要做对比实验,实现了其中一个版本,为了验证实验效果,结合我国各省会城市之间的距离,对省进行聚类看看效果如何。所有本文从3部分来介绍,首先简介层次聚类算法,然后...
  • mingyong_blog
  • mingyong_blog
  • 2016年06月05日 09:23
  • 4918

聚类之层次聚类、基于划分的聚类(…

5、聚类之层次聚类、基于划分的聚类(k-means)、基于密度的聚类、基于模型的聚类 目录(?)[-] 1.      一层次聚类 1.      层次聚类的原理及分类 2.      ...
  • sjpljr
  • sjpljr
  • 2017年04月14日 10:04
  • 4471

聚类算法:凝聚层次聚类

凝聚层次聚类:    所谓凝聚的,指的是该算法初始时,将每个点作为一个簇,每一步合并两个最接近的簇。另外即使到最后,对于噪音点或是离群点也往往还是各占一簇的,除非过度合并。对于这里的“最接近”,有下...
  • Yt_Sports
  • Yt_Sports
  • 2016年01月04日 16:37
  • 2520

层次聚类之高斯混合模型聚类算法原理的介绍

单高斯分布模型GSM 多维变量X服从高斯分布时,它的概率密度函数PDF为: x是维度为d的列向量,u是模型期望,Σ是模型方差。在实际应用中u通常用样本均值来代替,Σ通常用样本方差来代替。很...
  • u011955252
  • u011955252
  • 2016年03月06日 10:43
  • 869

Hierarchical Clustering(层次聚类)

层次聚类原理:唔?排序的图?分治?没错,与原型聚类和密度聚类不同,层次聚类试图在不同的“层次”上对样本数据集进行划分,一层一层地进行聚类。就划分策略可分为自底向上的凝聚方法(agglomerative...
  • qq_39388410
  • qq_39388410
  • 2017年10月15日 13:27
  • 505

三极管的工作原理(详细、通俗易懂、图文并茂)

一、很多初学者都会认为三极管是两个 PN 结的简单凑合(如图1)。这种想法是错误的,两个二极管的组合不能形成一个三极管。我们以 NPN 型三极管为例(见图 2 ),两个 PN 结共用了一个 P 区 —...
  • guomutian911
  • guomutian911
  • 2017年03月28日 17:50
  • 954

高斯混合聚类

高斯混合聚类高斯混合模型p(Y|θ)=∑k=1Kakϕ(Y|θk) p(Y|\theta)= \sum_{k=1}^K a_k \phi(Y|\theta_k) 其中 ϕ(Y|θk)=12π‾‾‾√...
  • tercel_w
  • tercel_w
  • 2017年03月22日 17:01
  • 564

机器学习之聚类算法(层次聚类)

层次聚类也叫连通聚类方法,有两个基本方法:自顶而下和自底而上。自顶而将所有样本看做是同一簇,然后进行分裂。自底而上将初所有样本看做不同的簇,然后进行凝聚。这种聚类的中心思想是:离观测点较近的点相比离观...
  • king523103
  • king523103
  • 2015年10月14日 17:08
  • 2388

层次聚类算法及其实现

层次聚类算法分为合并算法和分裂算法。合并算法会在每一步减少聚类中心的数量,聚类产生的结果来自前一步的两个聚类的合并;分裂算法与合并算法原理相反,在每一步增加聚类的数量,每一步聚类产生的结果都将是前一步...
  • HUSTLX
  • HUSTLX
  • 2016年03月10日 19:57
  • 1573

非常通俗易懂的解释密码算法原理!

密码分析(上) Tip:因为考试需要而总结的,因为写的比较通俗易懂,就放到博客里来了。 一、代换密码 1.1 移位(凯撒)密码    应该是          注意:别被左边那种公式误导了,应该是先...
  • Waternoodle
  • Waternoodle
  • 2015年12月31日 16:54
  • 2200
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【通俗易懂】层次聚类算法的原理及实现
举报原因:
原因补充:

(最多只允许输入30个字)