本公开涉及机器学习技术领域,具体而言,涉及一种基于密度的连通图的聚类方法与装置。
背景技术:
聚类(Clustering)的本质是对数据进行分类,将相异的数据尽可能地分开,而将相似的数据聚成一个类别(簇),使得同一类别的数据具有尽可能高的同质性(homogeneity),类别之间有尽可能高的异质性(heterogeneity),从而方便从数据中发现隐含的有用信息。
现有的聚类算法通常可以分为基于分层的聚类、基于划分的聚类、基于密度的聚类、基于网格的聚类、基于模型的聚类等等。在基于密度的聚类方法中,通常存在着计算复杂度高、用户体验不好、不具有扩展性、无法对大数据进行聚类等缺点。例如,PIC聚类算法会把不连通的点划分到一个聚类,DBSCAN算法对用户定义的参数很敏感,细微的不同都可能导致差别很大的结果,而参数的选择无规律可循,只能靠经验确定,无法给用户带来良好的用户体验。
因此,需要一种复杂度小、计算速度快、准确率较高、扩展性好并且能给用户带来良好用户体验的聚类算法。
需要说明的是,在上述背景技术部分公开的信息仅用于加强对本公开的背景的理解,因此可以包括不构成对本领域普通技术人员已知的现有技术的信息。
技术实现要素:
本公开的目的在于提供一种基于密度的连通图的聚类方法与装置,用于至少在一定程度上克服由于相关技术的限制和缺陷而导致的一个或多个问题。
根据本公开实施例的第一方面,提供一种基于密度的连通图的聚类方法,包括:
将连通图的节点划分为预设数量个节点集合;
基于密度在所述节点集合中选取种子节点;
根据所述种子节点获得所述预设数量个子聚类。
在本公开的一种示例性实施例中,所述将连通图的节点划分为预设数量个节点集合包括:使用PIC聚类算法将连通图的节点划分为预设数量个节点集合。
在本公开的一种示例性实施例中,所述根据所述种子节点获得所述预设数量个子聚类包括:使用标签传递算法获得所述预设数量个子聚类。
在本公开的一种示例性实施例中,所述基于密度在所述节点集合中选取种子节点包括:
设置选取次数m;
将所述节点集合中出入度之和最大的节点作为种子节点集合的第一个元素;
重复以下操作m次:随机选取所述种子节点集合中的任一节点,将与其具有连接关系的一个节点加入到所述种子节点集合;
将所述种子节点集合中的节点标记为种子节点。
在本公开的一种示例性实施例中,所述出入度之和最大的节点为所述节点集合中拥有最多集合内连接关系的节点。
在本公开的一种示例性实施例中,所述设置选取次数m包括通过以下方程设置:
其中|Ni|表示所述节点集合中节点的数量,|Ei|表示所述节点集合中边的数量,ε∈(0,1),表示控制计算速度和准确度的参数。
根据本公开的一个方面,提供一种基于密度的连通图的聚类装置,包括:
聚类划分模块,用于将连通图的节点划分为预设数量个节点集合;
节点选取模块,用于基于密度在所述节点集合中选取种子节点;
聚类计算模块,用于根据所述种子节点获得所述预设数量个子聚类。
在本公开的一种示例性实施例中,所述聚类划分模块包括:使用PIC聚类算法将连通图的节点划分为预设数量个节点集合。
在本公开的一种示例性实施例中,所述聚类计算模块包括:使用标签传递算法获得所述预设数量个子聚类。
在本公开的一种示例性实施例中,所述节点选取模块包括:
参数设置单元,用于设置选取次数m;
源点选取单元,用于将所述节点集合中出入度之和最大的节点作为种子节点集合的第一个元素;
节点添加单元,用于重复以下操作m次:随机选取所述种子节点集合中的任一节点,将与其具有连接关系的一个节点加入到所述种子节点集合;
节点标记单元,用于将所述种子节点集合中的节点标记为种子节点。
本公开提供的基于密度的连通图的聚类方法首先使用Power Iteration Clustering(PIC)图聚类算法将连通图分割成若干子图,然后在子图中基于密度选择若干种子节点,最后通过使用这些种子节点对连通图实施标签传递算法,将连通图划分为若干连通子图。与其他聚类算法相比,本公开提供的聚类算法具有复杂度小,计算速度快,准确率较高,扩展性好,用户体验好等特点,可用于大型连通图的聚类计算。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。显而易见地,下面描述中的附图仅仅是本公开的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1示意性示出本公开示例性实施例中一种基于密度的连通图的聚类方法的流程图。
图2示意性示出本公开示例性实施例中一种连通图的示意图。
图3示意性示出本公开示例性实施例中一种基于密度的连通图的聚类装置的方框图。
具体实施方式
现在将参考附图更全面地描述示例实施方式。然而,示例实施方式能够以多种形式实施,且不应被理解为限于在此阐述的范例;相反,提供这些实施方式使得本公开将更加全面和完整,并将示例实施方式的构思全面地传达给本领域的技术人员。所描述的特征、结构或特性可以以任何合适的方式结合在一个或更多实施方式中。在下面的描述中,提供许多具体细节从而给出对本公开的实施方式的充分理解。然而,本领域技术人员将意识到,可以实践本公开的技术方案而省略所述特定细节中的一个或更多,或者可以采用其它的方法、组元、装置、步骤等。在其它情况下,不详细示出或描述公知技术方案以避免喧宾夺主而使得本公开的各方面变得模糊。
此外,附图仅为本公开的示意性图解,图中相同的附图标记表示相同或类似的部分,因而将省略对它们的重复描述。附图中所示的一些方框图是功能实体,不一定必须与物理或逻辑上独立的实体相对应。可以采用软件形式来实现这些功能实体,或在一个或多个硬件模块或集成电路中实现这些功能实体,或在不同网络和/或处理器装置和/或微控制器装置中实现这些功能实体。
下面结合附图对本公开示例实施方式进行详细说明。
图1示意性示出本公开示例性实施例中一种基于密度的连通图的聚类方法的流程图。
参考图1,聚类方法100可以包括:
步骤S102,将连通图的节点划分为预设数量个节点集合。
在本公开的一些实施例中,将连通图的节点划分为预设数量个节点集合可以包括使用PIC(Power Iteration Clustering)聚类算法将连通图的节点划分为预设数量个节点集合。
在使用PIC聚类算法进行连通图节点划分时,可以首先设置一预设数量k作为接下来的子聚类数量。接下来,可以设连通图200包含节点的数量为|C|,聚类数量为k,使用PIC聚类算法将连通图200的节点划分为k个节点集合,并定义所聚成的每个节点集合为C1',...,Ck'。
步骤S104,基于密度在所述节点集合中选取种子节点。
在本公开的一种示例性实施例中,所述基于密度在所述节点集合中选取种子节点,即对连通图200的每个节点集合Ci'选择若干个种子节点包括:
1)对每个子类Ci'设置选取次数m。
在本公开的一种示例性实施例中,设置选取次数m可以包括通过以下方程设置:
其中|Ni|表示所述节点集合中节点的数量,|Ei|表示所述节点集合中边的数量,ε∈(0,1),表示控制计算速度和准确度的参数,当ε较大时聚类计算较准确,但计算时间较长。当|Ei|为0时,设置m为0。
2)将所述节点集合中出入度之和最大的节点作为种子节点集合的第一个元素,所述出入度之和最大的节点为所述节点集合中拥有最多集合内连接关系的节点。
可以预先设置S为属于节点集合Ci'的一节点集合,初始化S为空:并在Ci'中选择出入度之和最大的节点,将其加入S。
3)重复以下操作m次:随机选取所述种子节点集合中的任一节点,将与其具有连接关系的一个节点加入到所述种子节点集合。
可以从S中任选一个节点n,从Ei中任意选择一个以n为一端节点的边e,如果e的另一端节点n'不属于S,即将n'加入S。在种子节点集合中选择节点和边的方法可以是随机算法,也可以是其他方法,本公开不以此为限。
4)将所述种子节点集合中的节点标记为种子节点。
可以将S中的点类别标记为Ci',作为种子节点。
步骤S106,根据所述种子节点获得所述预设数量个子聚类。
在本公开的一些实施例中,所述根据所述种子节点获得所述预设数量个子聚类可以包括使用标签传递算法获得所述预设数量个子聚类。
可以使用标记过的种子节点作为标签传递算法的种子节点,将连通图200划分成k个子类,并将所聚成的每个子类C1,...,Ck作为连通图200的聚类结果。
相比于现有的聚类算法,本方法首先通过PIC聚类算法聚类,并根据密度选取种子节点,避免了在传统标签传递算法中人工进行种子节点选取所造成的低效率,同时,又利用了PIC聚类算法的快速特性,避免了PIC聚类算法中聚类准确率低的缺点,使本聚类算法兼顾复杂度小,计算速度快,准确率较高,扩展性好,用户体验好等特点,并可用于大型连通图的聚类计算。
下面通过具体实施例来对上述方法100进行详细说明。
图2示意性示出本公开示例性实施例中一种连通图200的示意图。
参考图1,连通图200中节点上的数字为该节点的标记,边上的数字为该边的权值,每个节点的权值均为1。
首先,用户可以设置聚类的数量为3。
然后,使用PIC聚类算法对连通图200进行划分。
连通图200包含节点的数量为12,聚类数量为3,可以使用PIC方法将其聚为3类,定义所聚成的每个子类为C1',C2',C3'。其中,每个聚类包含节点如下:
C1':1,2,3,4,6
C2':5,7,8,9
C3':10,11,12
接下来,可以在上述节点集合中选择种子节点。
设ε=0.5,对子类C1'、C2'、C3'根据方程(1)计算选取次数m。其中,C1'的m1的计算方法例如为:
类似的,C2'的选取次数m2=3,C3'的选取次数m3=2。
对连通图200的每个子类Ci'选择若干个种子节点,可以首先对子类C1'进行操作,选取的方法为:
步骤1.设S为C1'中的节点的集合,初始化S为空:
步骤2.选择C1'中出入度之和最大的节点2加入S。
步骤3.
1)选择S中的唯一元素节点2,随机选择到边2-3,将节点3加入S;
2)在S中随机选择到节点3,随机选择到边3-1,将节点1加入S;
3)在S中随机选择到节点2,随机选择到边2-1,由于1已经属于S,不用加入S。
步骤4.将S中的节点1、2、3类别标记为种子节点。
类似的,在子类C2'和C3'中选择的种子节点可以分别为7、8、9和10、12。当然,由于选择过程的随机化,选择结果也可以不为上述结果,本实施例仅为示例性的,并不用来限制本公开。
最后,可以根据上面选取的种子节点的连通图200进行标签传递聚类。通过使用标记过的种子节点进行标签传递聚类,可以将连通图200划分成3个子类:C1,C2,C3,其中每个子类包含的节点可以如下:
C1:1,2,3,4
C2:5,6,7,8,9,11
C3:10,12
对应于上述方法实施例,本公开还提供一种用于获取实体对象间关系紧密度的装置,可以用于执行上述方法实施例。
图3示意性示出本公开示例性实施例中一种基于密度的连通图的聚类装置的方框图。
参考图3,聚类装置300可以包括聚类划分模块302、节点选取模块304以及聚类计算模块306。
聚类划分模块302可以用于将连通图的节点划分为预设数量个节点集合。
节点选取模块304可以用于基于密度在所述节点集合中选取种子节点。
聚类计算模块306可以用于根据所述种子节点获得所述预设数量个子聚类。
在一些实施例中,所述聚类划分模块可以包括使用PIC聚类算法将连通图的节点划分为预设数量个节点集合。
在一些实施例中,所述聚类计算模块可以包括使用标签传递算法获得所述预设数量个子聚类。
在本公开的一种示例性实施例中,所述节点选取模块可以包括:
参数设置单元,用于设置选取次数m。
源点选取单元,用于将所述节点集合中出入度之和最大的节点作为种子节点集合的第一个元素。
节点添加单元,用于重复以下操作m次:随机选取所述种子节点集合中的任一节点,将与其具有连接关系的一个节点加入到所述种子节点集合。
节点标记单元,用于将所述种子节点集合中的节点标记为种子节点。
由于装置300的各功能已在其对应的方法实施例中予以详细说明,本公开于此不再赘述。
本公开提供的基于密度的连通图的聚类方法通过在标签传递算法基础上使用PIC聚类算法和基于密度法选取种子节点,避免了在传统的标签传递算法中人工选取种子节点造成的低效率,同时,在利用了PIC聚类算法的高效率基础上,规避了PIC聚类算法容易存在的聚类不准确问题。因此,与其他聚类算法相比,本公开提供的聚类算法具有复杂度小,计算速度快,准确率较高,扩展性好,用户体验好等特点,可用于大型连通图的聚类计算。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本公开的其它实施方案。本申请旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由所附的权利要求指出。