第13章 聚类算法2:层次算法

合集下载

层次聚类算法

层次聚类算法

层次聚类算法层次聚类算法(Hierarchical Clustering Algorithm)是一类数据挖掘的重要方法,它的主要思想是,将最初的n个样本点当成n个单独的聚类,然后依据某一距离度量方式分别计算每两个聚类的距离,从而确定最近距离的两个聚类合并为一个,通过不断合并就可以使得初始点构成的n个聚类缩减成一个。

层次聚类算法可以用来分析数据、挖掘隐藏的知识,它主要包含以下几个步骤:一、算法准备1.计算原始数据集中每个样本之间的距离,通常有曼哈顿距离、欧氏距离等方式可以实现计算,这是层次聚类算法的核心步骤;2.设定阈值,用以控制聚类的数量,实现算法的有效性。

二、算法开始1.将每个样本作为一个单独的簇;2.计算每两个簇之间的距离(根据第一步计算出来的距离);3.将最相近的两个簇合并,更新聚类的数量和距离;4.若聚类的数量不等于预设的数量,则重复步骤2、3,否则结束迭代,给出聚类结果。

三、层次聚类的应用1.人脸识别:用层次聚类算法帮助计算机系统将相近的人脸归为一类;2.文本聚类:在虚拟空间中用层次聚类算法对文本进行聚类,例如聚类微博、聚类博客文章等;3.推荐系统:层次聚类可以在推荐系统中用来分析用户的兴趣点,从而提供更契合用户意愿的服务。

四、层次聚类的优点1.易于控制聚类的数量:用户可以通过设定阈值来控制想要的聚类数量;2.易于可视化:结果可以通过树状图等方式直观可视化;3.准确性较高:可以准确实现用户所关心的目标。

五、层次聚类的缺点1.数据资源要求高:层次聚类算法每次迭代中都需要计算所有数据样本之间的距离,对数据资源要求非常高;2.聚类结果影响大:层次聚类的结果受初始选择的聚类数量的影响很大,可能会出现收敛于局部最优点,不能达到全局最优点;3.高维数据聚类效果不佳:高维数据的距离计算比较复杂,容易导致聚类效果不理想。

总结:层次聚类算法是一类数据挖掘的重要方法,它的核心是将最初的n个样本点当成n 个单独的聚类,依据某一距离度量方式计算每两个聚类之间的距离,然后将最相近的两个聚类合并,不断迭代,最终输出聚类结果,主要应用于人脸识别、文本聚类和推荐系统等。

常见的六大聚类算法

常见的六大聚类算法

常见的六大聚类算法六大常见的聚类算法包括K-means聚类算法、层次聚类算法、DBSCAN 算法、OPTICS算法、谱聚类算法和高斯混合模型聚类算法。

1. K-means聚类算法:K-means聚类算法是一种基于距离的聚类算法,它通过最小化数据点与聚类中心之间的欧氏距离来划分数据点。

算法的步骤如下:a.随机选择K个聚类中心。

b.将每个数据点分配到距离最近的聚类中心。

c.更新聚类中心为选定聚类的平均值。

d.重复步骤b和c直到聚类中心不再改变或达到最大迭代次数。

2.层次聚类算法:层次聚类算法是一种自底向上或自顶向下递归地将数据划分成不同的聚类的方法。

它通过计算数据点之间的距离或相似度来判断它们是否应该被合并到同一个聚类中。

算法的步骤如下:a.初始化每个数据点为一个单独的聚类。

b.计算两个最近的聚类之间的距离或相似度。

c.合并两个最近的聚类,形成一个新的聚类。

d.重复步骤b和c直到所有数据点都被合并到一个聚类中。

3.DBSCAN算法:DBSCAN(Density-Based Spatial Clustering of Applicationswith Noise)算法是一种基于密度的聚类算法,它通过寻找具有足够密度的数据点来划分聚类。

算法的步骤如下:a.随机选择一个未被访问的数据点。

b.如果该数据点的密度达到预设的阈值,则将其归为一个聚类,同时将其相邻且密度达到阈值的数据点添加到聚类中。

c.重复步骤a和b直到所有数据点都被访问。

4.OPTICS算法:OPTICS(Ordering Points To Identify the Clustering Structure)算法是一种基于密度的聚类算法,它通过将数据点按照密度排序来划分聚类。

算法的步骤如下:a.计算每个数据点的可达距离和局部可达密度。

b.根据可达距离和局部可达密度排序所有数据点。

c.根据可达距离和阈值划分聚类。

d.重复步骤b和c直到所有数据点都被访问。

简述聚类方法的基本原理

简述聚类方法的基本原理

简述聚类方法的基本原理聚类方法是一种将数据分为若干组或簇的无监督学习方法。

其基本原理是通过计算数据之间的相似度或距离来确定数据之间的关系,并将相似的数据归为一类。

聚类方法可以帮助我们发现数据中的隐藏模式和结构,用于数据挖掘、模式识别和数据分析等领域。

本文将介绍聚类方法的基本原理和常用的算法。

聚类方法的基本原理可以归纳为以下几点:1. 相似度度量:聚类方法首先需要确定数据之间的相似度或距离。

相似度度量可以采用欧氏距离、曼哈顿距离、余弦相似度等方法。

这些度量方法用于衡量数据之间的相似程度,相似度越高则数据彼此越相似。

2. 簇中心初始化:聚类方法通常需要初始化一些簇中心,作为聚类的起始点。

常用的初始化方法有随机选择、均匀分布和采样等。

3. 簇分配:接下来,聚类方法将数据对象分配给最接近的簇中心。

一般而言,距离簇中心最近的数据将被归为该簇。

4. 簇更新:在完成数据分配后,聚类方法将更新簇中心以更好地代表该簇的数据。

常用的更新方法是计算簇内数据的均值或中心点作为新的簇中心。

5. 迭代过程:聚类方法通常需要进行多次迭代,直到收敛为止。

在每次迭代中,簇分配和簇更新的过程都会重复执行。

聚类方法有许多不同的算法,以下是常见的聚类算法:1. K-means算法:K-means算法是最常用的聚类算法之一。

它通过将数据分为K个簇,并在每次迭代中更新簇中心来实现聚类。

K-means算法的思想是最小化数据点与彼此所属簇中心的距离之和,从而使得簇内数据足够紧密,簇间数据尽可能分开。

2. 层次聚类算法:层次聚类算法是一种基于树状结构的聚类方法。

它通过不断地合并或分割簇来实现聚类。

层次聚类算法可以分为凝聚层次聚类和分裂层次聚类两种类型。

凝聚层次聚类从每个数据点开始,逐步合并最相似的簇,直到形成一个完整的层次结构。

分裂层次聚类从所有数据点作为一个簇开始,逐步分裂最不相似的簇,直到形成一个完整的层次结构。

3. 密度聚类算法:密度聚类算法基于数据点的密度来进行聚类。

聚类算法:凝聚层次聚类

聚类算法:凝聚层次聚类

聚类算法:凝聚层次聚类凝聚层次聚类:所谓凝聚的,指的是该算法初始时,将每个点作为⼀个簇,每⼀步合并两个最接*的簇。

另外即使到最后,对于噪⾳点或是离群点也往往还是各占⼀簇的,除⾮过度合并。

对于这⾥的“最接*”,有下⾯三种定义。

我在实现是使⽤了MIN,该⽅法在合并时,只要依次取当前最*的点对,如果这个点对当前不在⼀个簇中,将所在的两个簇合并就⾏:(1)单链(MIN):定义簇的邻*度为不同两个簇的两个最*的点之间的距离。

(2)全链(MAX):定义簇的邻*度为不同两个簇的两个最远的点之间的距离。

(3)组*均:定义簇的邻*度为取⾃两个不同簇的所有点对邻*度的*均值。

根据该算法,实现如下代码。

开始时计算每个点对的距离,并按距离降序依次合并。

另外为了防⽌过度合并,定义的退出条件是90%的簇被合并,即当前簇数是初始簇数的10%:实现代码如下:[python]1. # scoding=utf-82. # Agglomerative Hierarchical Clustering(AHC)3. import pylab as pl4. from operator import itemgetter5. from collections import OrderedDict,Counter6.7. points = [[int(eachpoint.split('#')[0]), int(eachpoint.split('#')[1])] for eachpoint in open("points","r")]8.9. # 初始时每个点指派为单独⼀簇10. groups = [idx for idx in range(len(points))]11.12. # 计算每个点对之间的距离13. disP2P = {}14. for idx1,point1 in enumerate(points):15. for idx2,point2 in enumerate(points):16. if (idx1 < idx2):17. distance = pow(abs(point1[0]-point2[0]),2) + pow(abs(point1[1]-point2[1]),2)18. disP2P[str(idx1)+"#"+str(idx2)] = distance19.20. # 按距离降序将各个点对排序21. disP2P = OrderedDict(sorted(disP2P.iteritems(), key=itemgetter(1), reverse=True))22.23. # 当前有的簇个数24. groupNum = len(groups)25.26. # 过分合并会带⼊噪⾳点的影响,当簇数减为finalGroupNum时,停⽌合并27. finalGroupNum = int(groupNum*0.1)28.29. while groupNum > finalGroupNum:30. # 选取下⼀个距离最*的点对31. twopoins,distance = disP2P.popitem()32. pointA = int(twopoins.split('#')[0])33. pointB = int(twopoins.split('#')[1])34.35. pointAGroup = groups[pointA]36. pointBGroup = groups[pointB]37.38. # 当前距离最*两点若不在同⼀簇中,将点B所在的簇中的所有点合并到点A所在的簇中,此时当前簇数减139. if(pointAGroup != pointBGroup):40. for idx in range(len(groups)):41. if groups[idx] == pointBGroup:42. groups[idx] = pointAGroup43. groupNum -= 144.45. # 选取规模最⼤的3个簇,其他簇归为噪⾳点46. wantGroupNum = 347. finalGroup = Counter(groups).most_common(wantGroupNum)48. finalGroup = [onecount[0] for onecount in finalGroup]49.50. dropPoints = [points[idx] for idx in range(len(points)) if groups[idx] not in finalGroup]51.52. # 打印规模最⼤的3个簇中的点53. group1 = [points[idx] for idx in xrange(len(points)) if groups[idx]==finalGroup[0]]54. group2 = [points[idx] for idx in xrange(len(points)) if groups[idx]==finalGroup[1]]55. group3 = [points[idx] for idx in xrange(len(points)) if groups[idx]==finalGroup[2]]56. pl.plot([eachpoint[0] for eachpoint in group1], [eachpoint[1] for eachpoint in group1], 'or')57. pl.plot([eachpoint[0] for eachpoint in group2], [eachpoint[1] for eachpoint in group2], 'oy')58. pl.plot([eachpoint[0] for eachpoint in group3], [eachpoint[1] for eachpoint in group3], 'og')59.60. # 打印噪⾳点,⿊⾊61. pl.plot([eachpoint[0] for eachpoint in dropPoints], [eachpoint[1] for eachpoint in dropPoints], 'ok')62.63. pl.show()另外我们可以看出凝聚的层次聚类并没有类似基本K均值的全局⽬标函数,没有局部极⼩问题或是很难选择初始点的问题。

层次聚类算法总结

层次聚类算法总结

层次聚类算法总结层次聚类算法的总结一、引言层次聚类算法是一种常用的数据聚类方法,它通过逐步合并或分割数据来构建聚类层次结构。

本文将对层次聚类算法进行总结,包括算法原理、应用领域以及算法的优缺点。

二、算法原理层次聚类算法主要包括凝聚型层次聚类和分裂型层次聚类两种类型。

其中,凝聚型层次聚类是自底向上的合并过程,而分裂型层次聚类是自顶向下的分割过程。

1. 凝聚型层次聚类凝聚型层次聚类从每个数据点作为一个独立的类开始,然后逐步合并最相似的类,直到达到预设的聚类数目或者合并所有数据点为止。

常用的合并策略有单链接、完全链接和平均链接等。

- 单链接:将两个最相似的类合并,其中最相似的类定义为两个类中最近的两个数据点之间的距离。

- 完全链接:将两个最相似的类合并,其中最相似的类定义为两个类中最远的两个数据点之间的距离。

- 平均链接:将两个最相似的类合并,其中最相似的类定义为两个类中所有数据点之间距离的平均值。

2. 分裂型层次聚类分裂型层次聚类从所有数据点作为一个类开始,然后逐步将类分裂成更小的子类,直到达到预设的聚类数目或者每个类只包含一个数据点为止。

常用的分裂策略有K-means算法、二分K-means算法等。

三、应用领域层次聚类算法在许多领域都有广泛的应用,下面列举几个常见的应用领域。

1. 生物学层次聚类算法可以用于基因表达谱数据的聚类分析,帮助研究人员发现不同基因的表达模式,从而揭示基因之间的相互关系。

2. 图像处理层次聚类算法可以用于图像分割,将相似的像素点聚类到同一个区域,实现图像的分割和识别。

3. 社交网络层次聚类算法可以用于社交网络中的用户聚类,将具有相似兴趣和行为模式的用户聚集在一起,为推荐系统和个性化推送提供基础。

四、优缺点分析层次聚类算法具有以下优点:1. 不需要预先指定聚类数目,能够自动构建聚类层次结构。

2. 可以处理任意形状和大小的聚类。

3. 聚类结果具有层次结构,方便后续的分析和解释。

层次聚类算法范文

层次聚类算法范文

层次聚类算法范文一、层次聚类算法的原理:层次聚类算法有两种主要的实现方式:凝聚聚类(自底向上)和分裂聚类(自顶向下)。

凝聚聚类从每个样本开始,逐渐将相似度高的样本合并为一个聚类,最终形成一个包含所有样本的聚类。

分裂聚类则从一个包含所有样本的聚类开始,逐渐将不相似的样本拆分成多个聚类,直至每个样本都是一个单独的聚类。

二、层次聚类算法的步骤:1.初始化:将每个样本作为一个独立的聚类。

2.计算相似度:根据定义的距离度量方法计算每两个聚类之间的相似度或距离。

3.合并相似度最高的聚类:选择相似度最高的两个聚类合并为一个新的聚类。

4.更新相似度矩阵:将新的聚类与其他聚类之间的相似度重新计算。

5.重复步骤3和4,直到所有的样本都属于同一个聚类或满足终止条件。

终止条件可以是聚类数目达到预设的数量,或者聚类之间的相似度低于预设的阈值。

一般情况下,层次聚类算法会生成一个层次结构的聚类树,可以通过设置不同的阈值来获取不同级别的聚类结果。

三、层次聚类算法的应用:1.生物学:层次聚类算法可以将蛋白质或基因的表达数据聚类成不同的细胞类型或疾病类别,用来研究生物进化、基因功能等。

2.市场分析:层次聚类算法可以将消费者细分成不同的市场群体,从而帮助企业进行市场营销策略的制定和产品定位。

3.图像分割:层次聚类算法可以将图像中的像素点按照颜色、纹理等特征进行聚类,用于图像分割和目标识别等应用。

4.社交网络分析:层次聚类算法可以将社交网络中的用户聚类成不同的社群,用于研究社交网络的结构和关系。

总结:层次聚类算法是一种常用的聚类分析方法,主要应用于生物学、市场分析、图像分割和社交网络分析等领域。

通过逐步合并或拆分样本,层次聚类算法可以形成聚类层次结构,帮助我们理解数据的内在结构和相似性。

在实际应用中,我们可以根据具体问题选择合适的距离度量和终止条件,以获得满足需求的聚类结果。

聚类算法层次方法ppt课件


层次聚类方法
一般来说,有两种类型的层次聚类方法:
• 凝聚层次聚类:采用自底向上策略,首先将每个对象作为单独 的一个原子簇,然后合并这些原子簇形成越来越大的簇,直到 所有的对象都在一个簇中(层次的最上层),或者达到一个终 止条件。绝大多数层次聚类方法属于这一类。
• 分裂层次聚类:采用自顶向下策略,首先将所有对象置于一个 簇中,然后逐渐细分为越来越小的簇,直到每个对象自成一个 簇,或者达到某个终止条件,例如达到了某个希望的簇的数目, 或者两个最近的簇之间的距离超过了某个阈值。
不具有很好的可伸缩性,因为合并或分裂的决定需要检查 和估算大量的对象或簇。
Page 16
经营者提供商品或者服务有欺诈行为 的,应 当按照 消费者 的要求 增加赔 偿其受 到的损 失,增 加赔偿 的金额 为消费 者购买 商品的 价款或 接受服 务的费 用
层次聚类的改进
一个有希望的方向是集成层次聚类和其他的聚类技术,形 成多阶段聚类。在下面的内容中会介绍四种这类的方法:
主要内容
凝聚和分裂层次聚类 BIRCH:利用层次方法的平衡迭代归约和聚类
ROCK:分类属性的层次聚类算法 CURE:基于质心和基于代表对象方法之间的中间策略
Chameleon:利用动态建模的层次聚类算法
Page 3
经营者提供商品或者服务有欺诈行为 的,应 当按照 消费者 的要求 增加赔 偿其受 到的损 失,增 加赔偿 的金额 为消费 者购买 商品的 价款或 接受服 务的费 用
某个任意的阈值时聚类过程就会终止,则称其为单连接算
法。
当一个算法使用最大距离
度量簇间距离时,有时
称为最远邻聚类算法。如果当最近簇之间的最大距离超过
某个任意阈值时聚类过程便终止,则称其为全连接算法。

聚类算法:谱聚类和层次聚类的比较

聚类算法:谱聚类和层次聚类的比较聚类是数据挖掘中一种重要的无监督学习方法,其目的是将相似的数据对象分组,形成簇(cluster),并且簇与簇之间差异较大。

聚类算法可以分为分层聚类方法和非分层聚类方法。

其中,谱聚类和层次聚类是两种常见的聚类算法方法,本文将对这两种方法进行比较分析。

1.谱聚类谱聚类是一种基于图论和矩阵分析的聚类方法。

该方法将数据集转化为一个图(Graph),然后通过计算该图对应的拉普拉斯矩阵的特征向量将数据分成不同的类别。

谱聚类算法具有以下三个主要步骤:(1)构建邻接矩阵。

通常情况下,可以使用高斯核函数来计算数据点之间的相似度,并将相似度高于某个阈值的数据点之间的权值赋值为1,否则赋值为0。

(2)计算拉普拉斯矩阵。

对于邻接矩阵A(即关联矩阵),可以构建度矩阵D及其逆矩阵D^(-1),则拉普拉斯矩阵L=D-A。

根据拉普拉斯矩阵的特征值和特征向量,可以得到数据集的降维表示。

(3)对特征向量进行聚类。

根据求得的特征向量,可以使用KMeans等聚类算法来将数据集进行划分。

谱聚类算法的优点是它可以处理非线性的数据结构,并且可以保留数据的全局结构。

另外,在谱聚类中,可以自定义相似性函数,这增加了算法的灵活性。

2.层次聚类层次聚类是一种树状的聚类方法,应用广泛。

层次聚类分为两种子类型:聚合(自下而上)和分裂(自上而下)。

在聚合过程中,每个数据点开始时被视为一个单独的组,然后逐步合并为一个大的组。

在分裂过程中,则是将整个数据集视为一个大组,然后将其逐步分裂为较小的组。

层次聚类算法的基本步骤如下:(1)计算两个最相似(或距离度量最小)群体之间的距离。

(2)合并这两个最相似的群体为一个新的群体。

(3)重复步骤1、2,直到所有样本都被分配到同一个簇中。

与谱聚类相比,层次聚类的优点在于其聚类结果易于直观理解并且不需要设置参数。

另外,它可以用于任何样本之间的相似性度量。

3.比较分析谱聚类和层次聚类算法在处理聚类问题时有不同的优缺点。

层次聚类算法 python

层次聚类算法python摘要:一、层次聚类算法简介1.层次聚类算法的概念2.层次聚类算法的基本原理二、Python 中层次聚类算法的实现1.常用的Python 库2.层次聚类算法的Python 代码实现三、层次聚类算法的应用1.数据降维2.数据可视化3.文本聚类四、层次聚类算法的优缺点1.优点2.缺点正文:一、层次聚类算法简介层次聚类算法是一种聚类分析方法,它将数据点逐步地合并成越来越大的簇,同时保持聚类的层次结构。

层次聚类算法的基本原理是计算数据点之间的距离,并根据距离将数据点分为不同的簇。

随着簇的不断合并,层次聚类算法可以生成一棵聚类树,树上的每个节点表示一个簇,叶节点表示最终的簇。

二、Python 中层次聚类算法的实现在Python 中,可以使用scikit-learn 库和hcluster 库来实现层次聚类算法。

1.常用的Python 库scikit-learn 库是Python 中常用的机器学习库,其中包括了多种聚类算法,如K-means、DBSCAN 等。

hcluster 库是一个专门用于层次聚类算法的库。

2.层次聚类算法的Python 代码实现以下是使用scikit-learn 库实现层次聚类算法的代码示例:```pythonfrom sklearn.cluster import AgglomerativeClusteringfrom sklearn.datasets import load_irisfrom sklearn.metrics import silhouette_score# 加载数据集data = load_iris()X = data.data# 创建层次聚类对象clustering = AgglomerativeClustering(n_clusters=2)# 进行层次聚类clustering.fit(X)# 计算聚类结果的轮廓系数silhouette = silhouette_score(X, bels_)print("Silhouette Score:", silhouette)```三、层次聚类算法的应用层次聚类算法可以应用于以下方面:1.数据降维:层次聚类算法可以将高维数据降到低维,从而减少数据的维度,便于后续分析。

层次聚类算法


24
层次聚类 2013-5-15
ROCK


例:购物篮数据库包含关于商品a,b,…g的事物记录。簇C1涉 及商品{a,b,c,d,e},簇C2涉及商品{a,b,f,g} 假设:只考虑相似度而忽略邻域信息。 C1中{a,b,c}和{b,d,e}之间的Jaccard系数 是0.2 而C1中的{a,b,c}和C2中的{a,b,f}的Jaccard系数 是0.5 说明:仅根据Jaccard系数, 很容易导致错误。
18
层次聚类
2013-5-15
BIRCH算法


BIRCH (Balanced Iterative Reducing and Clustering) 利用层次方法的平衡迭代归约和聚类 用聚类特征(CF)和聚类特征树来概括聚类描述。 该算法通过聚类特征可以方便地进行中心、半径、直径及 类内、类间距离的运算。
7.5层次聚类方法
层次聚类方法概述
层次聚类方法将数据对象组成一棵聚类 树。 根据层次分解是自底向上(合并)还是 自顶向下(分裂),进一步分为凝聚的 和分裂的。

2
层次聚类
2013-5-15
层次聚类方法概述



凝聚的层次聚类:一种自底向上的策略,首 先将每个对象作为一个簇,然后合并这些原 子簇为越来越大的簇,直到某个终结条件被 满足。 分裂的层次聚类:采用自顶向下的策略,它 首先将所有对象置于一个簇中,然后逐渐细 分为越来越小的簇,直到达到了某个终结条 件。 层次凝聚的代表是AGNES算法。层次分裂的 代表是DIANA算法。
14
层次聚类
2013-5-15
DIANA算法


DIANA(Divisive ANAlysis)算法是典型 的分裂聚类方法。 在聚类中,用户能定义希望得到的簇数 目作为一个结束条件。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第13章 聚类算法II :层次算法1 3.1 引言⏹ 层次聚类算法与前一章描述的算法有所不同。

具体地说,它不产生单聚类,而是产生层次聚类。

⏹ 在描述基本思想之前,假设X ={,1,...,}i i N =x 是将要聚类的l 维向 量集。

回忆聚类的定义ℜ={,1,...,}j C j m =其中j C X Í。

如果ℜ1中的每一聚类都是ℜ2中集合的子集,则包含k 聚类的ℜ1嵌套在包含()r k <聚类的ℜ2中。

注意ℜ1,中至少有一个聚类是ℜ2的真子集,记为ℜ1Ìℜ2。

例如,聚类ℜ2=13425{{,},{},{,}}x x x x x 嵌套在ℜ2=134{{,,}x x x ,25{,}}x x 中;另一方面,ℜ1并不嵌套在ℜ3=14{{,}x x ,3{}x ,25{,}}x x 中。

可以看到聚类不能嵌套自身。

⏹ 层次聚类算法产生一个嵌套聚类的层次。

这些算法包含N 步, 与数据向量的数量一样多。

在第t 步,要在前t -1步的聚类基础上生成新聚类。

有两种不同的算法:合并和分裂层次算法:(1)合并算法中,初始聚类ℜ0由N 个聚类组成,每个聚类仅包含X 中的一个元素。

第一步生成聚类ℜ1,它包含N -1个集合,如ℜ0Ìℜ1。

重复此过程直到产生最后一个聚类ℜN -1,它只包含一个单个的聚类集合。

即数据集X 。

因而得到聚类的层次为ℜ0Ìℜ1Ì…ÌℜN -1(2)分裂算法与合并算法的思路恰好相反。

在这种算法中,初始聚类ℜ0仅包括一个集合X 。

第一步产生聚类ℜ1。

,它由ℜ2个集合组成,如ℜ1Ìℜ0。

重复此过程直到产生最后一个聚类ℜN-1,它包含N 个集合,每个集合仅包含X 中的一个元素。

在这种情况下可得ℜN-1Ìℜ1Ì…Ìℜ0下面详细介绍合并算法。

分裂算法将在13.4节中简单地介绍。

13.2 合并算法令(,)i j g C C 为所有可能的X 聚类对的函数,此函数用于测量i C 和j C 之间的近邻性,用t 表示当前聚类的层次级别。

因此,通用合并方法(GAS )为:-2.2.在ℜt-1的所有可能聚类对(,r S C C )中找一组(,i j C C ),满足-2.3定义q i C C =j C I ,并产生新聚类。

∙ 直到所有向量全被加入到一个聚类中。

很明显,采用此方法可以构造N 个聚类的一个层次,每个聚类嵌套在它的后继聚类中,即对于t 1< t 2,t 2 =1,…,N -1,有ℜt 1 ? ℜt 2。

另外,如果两个向量一起加入t 层次的同一聚类中,我们认为它们的后继聚类相同。

这是检验嵌套性质的另一种方法。

嵌套性质的缺点是不能从一个“坏”聚类中恢复,“坏”聚类可能产生在更早的层次上.在层次t 上,有N -t 个聚类。

为了确定t+1层上要合并的聚类对,必须考虑个聚类对。

这样,聚类过程总共要考虑的聚类对数量为()()(1)122N t N t N ----º个聚类对。

这样聚类过程总共要考虑的聚类对数量为也就是说,整个合并算法的全部运算在3N 数量级上。

此外,算法的复杂度与g 的定义有关。

13.2.1 一些有用量的定义● 合并算法主要有两类,第一类算法基于矩阵理论的概念,而第二类算法基于图论的概念。

● 一些定义:♦ 样本矩阵()D X ---是N ×l 矩阵,该矩阵第i 行是X 的第i个向量(转臵)。

♦ 相似矩阵()P X (不相似矩阵)---是N ×N 矩阵,该矩阵的(,)i j 元素表示向量i x ,和向量j x 的相似度(,)i j S x x (不相似度(,)i j d x x ),这个矩阵也可以用来判断近邻性。

P 是一个对称矩阵。

如果P 是一个相似矩阵,它的对角线元素等于s 的最大值;另一方面,如果P 是一个不相似矩阵,它的对角线元素等于d 的最小值。

注意:由于选择不同的近邻测度℘(,i j x x ),一个样本矩阵有多个近邻矩阵。

但是,对于给定的℘(,i j x x ),则一个样本矩阵只有一个近邻矩阵。

另一方面,一个近邻矩阵可能对应多个样本矩阵。

令X={i x ,i =l ,…,5),其中1[1,1]T =x ,2[2,1]T =x ,3[5,4]T =x ,4[6,5]T =x ,5[6.5,6]T =xX 的样本矩阵为使用欧几里得距离时,其相应的不相似矩阵为在详细讨论层次算法以前,先解释一个重要的概念。

正如前面讨论的那样,这种算法产生一个完整的聚类层次,而非单个聚类。

在一些应用中确定整个树图是很必要和有用的,如生物学的分类。

然而,在其他应用中,我们只对最适应数据的聚类感兴趣。

如果愿意在后者的应用中使用层次算法,那么就应该确定生成层次的哪个聚类最适应数据。

也就是说,必须选择在最恰当的层次截取树图。

类似的讨论对分裂算法同样适用。

本章最后一节会介绍确定截取层次的方法。

以后除非特殊说明,仅考虑不相似矩阵。

相似矩阵的情况类似。

13.2.2 基于矩阵理论的合并算法可以将这些算法看做是GAS 的特殊情况。

这些方法的输入是从X 推导出的N ×N 不相似矩阵,P 0=P (X )。

在t 级中,当两个聚类合并成一个时,不相似矩阵的大小P t 就变为(N -t )×(N -t )。

通过只P t-1得到P t 的方法是:(a)删去合并聚类相应的两行和两列;(b)增加包括新聚类和旧聚类(此层未影响聚类)之间距离的行和列。

新形成的聚类G(合并C i 和C j 得到的结果)和旧聚类C s 之间的距离由下式决定:这个过程在很多文献中称为矩阵更新算法。

下面给出矩阵更新算法(MUAS ),它包括了大多数这种类型的算法。

仍用t 表示当前层次。

矩阵更新算法(MUAS )∙ 初始化:-2.2.选择Ci ,Cj 使之满足(,)i j d x x ,1,...,,min (,)r s r s N r s d C C = =。

-2.3.合并Ci ,Cj 得到聚类q C ,形成ℜt =(ℜt-1-{,i j C C }){}j C U 。

-2.4.用前面描述的方法从Pt-1得到近邻性矩阵Pt 。

∙ 直到形成聚类ℜN-1,即所有的向量合并到一个聚类中。

注意此方法的GAS 特征。

很多距离函数符合下列更新方程:不同的口q ,6,c 值对应不同的不相似测度d(Cj ,0。

式(13.3)是描述两个聚类之间距离的递归定义,用初始的聚类点距离来初始化。

[Bobe 93】中讨论了另一个公式,它不包含最后一项,并允许口,,q ,6是cf ,G ,C 的函数。

下面给出基于MUAS 的算法,且令式(13.3)中的参数日,q ,易,c 取不同的值。

此方法中更简单的算法为:·单连接算法:它可由式(13.3)获得,此时令口,=1/2,q=1/2,6=0,c=-1/2。

在这种情形下,螺旌l 1.2节中定义的测度也属于此方法。

·完全连接算法:它可由式(13.3)获得,设口,=1/2,q=1/2,易=O ,c=1/2。

由此我们有①注意合并的聚类G 和cJ 之间的距离,并没有添加到上面的公式中。

在用相似测度替代不相似测度的情况下,(a)对于单连接算法,式(13.4)中的min 运算由max运算替代;(b)对于完全连接算法,式(13.5)中的max运算应该由min运算替代。

为了更深入地领会上述算法,我们来看下面这个实例。

13.3(a)中给出的数据集X。

前7个点形成了一个拉长的聚类,而剩下的4个形成一个致密聚类,连线上的数字表示向量对之间的欧几里得距离,这些距离也适用于初始的两向量间的距离。

如果距离太长则不予标明。

图13.3(b)给出了对此数据集合应用单连接算法所形成的树图,可以看出此算法首先处理拉长的聚类,并且在更高的不相似级别上进行第二个聚类。

j图13.3(c1给出了对此数据集合应用完全连接算法所形成的树图,很容易看出这个算法适合处理致密聚类。

图13.3(a)数据集X,(b)由单连接算法生成的不相似树图,(c)由完全连接算法生成的不相似树图(最后聚类层次没有显示)注释前面描述的算法是式(13.3)的两个极端情况。

实际上,在不相似树图中,由单连接算法在低不相似性时产生聚类;另一方面,由完全连接算法在高不相似性时产生聚类。

这是因为在单连接(完全连接)算法中,使用吠cf,e)和战G,e)之间的最小(最大)距离作为吠G,G)间的距离。

这意味着单连接算法有适应拉长聚类的趋势,这个特性称为链式效应。

另一方面,完全连接算法则倾向于处理小的致密聚类,如果有明显的证据证明x隐含的聚类是致密聚类,那么完全连接算法是首选。

下面讨论的其他算法介于这两种算法之间①。

·加权成对分组平均(WPGMA)算法是由式(13.3)获得的,如果令嚷=q=1/2,易=c=0,即因此,在这种情况下,新形成的聚类q与原有聚类C之间的距离定义为G,e和e,e之间的平均距离。

●不加权成对分组平均(UPGMA)算法定义为:如果令中%,吩分别代表集合cj,q的势。

此时G和C之间的距离定义为·不加权成对分组中心(UPGMC)算法定义为:如果令c=O,即此算法有一个有趣的解释。

我们选择聚类表达作为各聚类的均值(中心),即并且不相似性作为各聚类表达间的欧几里得距离的平方。

可证明如的递归定义就是各个表达间欧几里得距离的平方(见习题13.2),即·加权成对分组中心(WPGMC)算法定义为:如果选择口产吩=1/2,易=-1/4,c=0,即注意,当合并的聚类具有个数相同的向量时,式(13.8)可化简为式(13.11)。

当然,通常不是这种情况,并且这个算法基本上计算各自中心之间加权后的距离。

WPGMC算法的一个显著特点是略≤n'fin(丸,喀)(见习题13.3)。

·Ward或最小方差算法。

两个聚类G和e,间的距离屯定义为加权后的均值向量的欧几里得距离的平方,即其中吮=I[mi-鸭1120因此,在MUAS的第2.2步找一对聚类cI,G,使得呜的值最小。

而且可以证明(见习题13.4)这个距离属于式(13.3)的家族,可写成可从另外一个角度理解前面描述的距离,定义作为均值周围第个聚类的方差,且作为第f个层次上的聚类总方差(这时已经有了Ⅳ一f个聚类)。

现在通过合并两个对总方差增加影I响最小的聚类来E冀l说明Ward算法形觑+。

的过程。

假定选择聚类c』和G来合并成一个聚类q。

I在第f+1个层次上,E奠.为聚类C=f 和C『合并到e中后的总方差。

那么;因为其他的聚类在此层次{上并未受到影响,所以变化量考虑到式(13。

15)可写成由于式(13.17)变为这就是Ward算法得到的最小距离。

相关文档
最新文档