全连接和半连接

博客转自:https://blog.csdn.net/tyh70537/article/details/76768802

                 https://blog.csdn.net/tyh70537/article/details/75309042

首先,我们先介绍要用到的图论知识

图(Graph)是在聚类分析中有多种用途的一种数学结构。 
图是由两个集合构成,顶点的集合用VV表示,代表被聚类的对象,V={vi}V={vi}。边的集合用EE表示,代表点之间的相互关系,E={ei}E={ei}。这些点和边通过一个函数ff关联起来,ff将边映射到对应的点对上。因此图GG可以表示为一个三元组,G=(V,E,f)G=(V,E,f)。

多重边和环
若图G中,某个边e的两个端点相同,则称e是环,若两个点之间的边多于一条,则称这些边为多重边。一个无环,无多重边的图称为简单图,聚类中只用到简单图,不允许有环和多重边的出现。 


子图(subgraph)
如果V’是V的一个子集,E’是E的一个子集,那么图H=(V’,E’,f’)就是图G=(V,E,f)的一个子图。可以看出子图H里面的顶点和边都是G中已有的。 
 
上图的三个子图 


连通图与连通分图(component)
图G中,若任何两个点之间,至少有一条链,则称G是连通图,否则称为不连通图。若G是不连通图,它的每个连通的部分称为G的一个连通分图。上面三个子图都是不连通图。下面是一个不连通图的的2个连通分图。 


完全图(complete graph)
若一个图的每一对不同顶点恰有一条边相连,则称为完全图。完全图是每对顶点之间都恰连有一条边的简单图。n个顶点的完全图有n个端点及n(n − 1) / 2条边。 


最大完全子图
如果图H是图G的最大完全子图(maximal complete subgraph),显然必须满足三个条件 
一:H必须是G的一个子图(subgraph) 
二:H必须是一个完全图(complete) 
三:H不能是其它完全子图的子图,它得是最大的那个完全子图(废话) 

在全连接算法里面我们会用到这个概念。

扫描二维码关注公众号,回复: 3731643 查看本文章

最大连接子图
最大连接子图(maximal connected subgraph),其实就是上面介绍的连通分图(component),在单连接算法中会用到。

定义
这篇文章将详细介绍阈值图(threshold graph),单连接算法和全连接算法的一般步骤。 
我前面已经提到过,单连接算法和全连接算法都是从一个邻近度矩阵(proximity matrix)开始。一般情况下,给定n个待聚类的对象,X={x1,x2,⋯,xn}X={x1,x2,⋯,xn},邻近度矩阵是一个n×nn×n的对称阵,D=[d(i,j)]D=[d(i,j)]。矩阵对角线上的元素为零,由于矩阵是对称的,我们只考虑对角线右侧的n(n-1)/2个元素。 
为了简单起见,我们做出如下假定: 
        一:每个元素表示不同对象之间的不相似度(dissimilarity),比如d(1,2)>d(1,3)说明对象1和3之间的相似程度大于1和2的。 
        二:这n(n-1)/2个元素的值取1到n(n-1)/2间的整数,且没有重复值。也就是说邻近度是序数变量。后面我们也会使用包含连续变量的邻近度矩阵,其实不影响。 
本文用到的邻近度矩阵如下(n=5): 
 
阈值图(threshold graph)
在介绍单连接算法和全连接算法之前,先介绍下什么是阈值图。 
阈值图是一个有n个节点的无向图,每个节点代表一个对象,图中不存在环(self-loops)和多重边(multiple edges)。一个阈值图用G(v)表示,其中v表示不相似的水平(dissimilarity level)。给定一个v,如果节点i和j之间的不相似度小于v,就在i和j之间插入一条边edge(i,j)edge(i,j)。 
也就是说, 

以(1)中数据为例,取v=5,将得到如下阈值图: 

单连接算法
        step 1. 画出图G(0),此时图中只有n个节点,一条边都没有,每个对象都被划分为一个簇,即有n个簇。Set k←1k←1。 
        step 2. 画出图G(k),如果G(k)中的最大连通子图(maximal connected subgraph)的数量少如当前簇的数量,则把G(k)中的每个最大连通子图都作为一个簇。 
        step 3. 如果G(k)中只剩下一个连通子图,则算法停止。否则Set k←k+1k←k+1,并返回step 2。 
下面通过例子(1)的阈值图来详细说明。 
 
首先G(0)阶段把对象划分成了5个簇。 
到G(1)阶段,阈值v取1的时候,只有d(2,3)满足要求,故G(1)中只有2和3之间有边,此时G(1)中最大连接子图的数量变为4(分别是{2,3},{1},{4},{5})。因此把每个最大连接子图都划分成一个新的簇。 
同理,到了G(2)阶段,对象分别被划分成3个簇。G(3)阶段,对象被划分成2个簇。 
最后,G(4)阶段的时候,图中只剩下一个连通子图,所有的对象被划分成一个簇,算法结束。

聚类结果用树状图表示如下,其记录了聚类的顺序。 


 

全连接算法
        step 1. 画出图G(0),此时图中只有n个节点,一条边都没有,每个对象都被划分为一个簇,即有n个簇。Set k←1k←1。 
        step 2. 画出图G(k), 
         如果当前有2个簇在图G(k)中形成了最大完全子图(maximal complete subgraph)那么就把这2个簇合并成一个簇。 
       step 3. 如果k=n(n-1)/2,也就是图G(k)成为了一个完全图时,算法停止。 
        否则,Set k←k+1k←k+1,并返回step 2。 
      同样的,通过阈值图来说明聚类的过程: 
 

聚类结果树状图表示如下: 


完全连接算法和单连接算法在形成簇的要求上有很大不同。单连接算法把只要是相连的点都归为一个簇,因此当整个阈值图变成连通图时,聚类就完成了。而完全连接算法对形成簇的要求更加严格,新形成的簇必须是一个最大完全子图,也就是说簇中的每个点之间都必须相连。 
我们按顺序来解释完全连接算法的阈值图: 
G(0): 这里和单连接算法是一样的,每个点都是一个单独的簇。每个点其实也可看作只包含一个点的最大完全子图。 
G(1): 这里节点2和3是G(0)中的簇,它们此刻又构成了一个最大完全子图,故簇2和3被合并成一个新簇。 
G(2): 同上,簇1和4合并成一个新簇。 
G(3): 虽然2和5相连,但2,3,5并没有构成一个最大完全子图,所以G(3)阶段没有新簇产生。 
G(4): 没有新簇产生,理由同上。 
G(5): 现在问题就来了,2,4,5构成了一个最大完全子图,但我们并没有把它们划分成一个簇,这是为什么呢?这是因为簇{x2,x3}{x2,x3}和簇{x1,x4}{x1,x4}已经存在了,对象x5x5只能想办法合并到这两个已经存在的簇当中去,而不能把已经形成的簇重新拆开,这也是层次聚类算法的要求。 
G(6): 这里由于同样的原因,1,2,4不能聚成一个簇。 
G(7): 到这里终于有满足条件的新簇产生了,即1,4,5。 
本来按照完全连接算法的要求,一直要进行到G(10)时,算法才停止,但实际上只需要进行到G(7)就行了,因为G(7)的时候只有2个簇了,后面的步骤肯定是将这两个簇合成一个簇,也就没必要进行了。同理,单连接算法在进行到G(3)的时候就已经没有悬念了。

猜你喜欢

转载自blog.csdn.net/Phoenix_tgd/article/details/83059568
今日推荐