gSpan算法执行步骤详解示例

目录

  • 1. 问题描述
  • 2. gSpan算法步骤
    • 2.1 数据预处理
    • 2.2 深度递归挖掘频繁子图
      • 2.2.1 获取所有的频繁边
      • 2.2.2 深度递归挖掘频繁子图
  • 参考文献

1. 问题描述

gSpan 是一款图规则挖掘算法,目标是从现有的图集中挖掘频繁子图。如下图中包含三个图:
gSpan算法执行步骤详解示例_第1张图片
其中圆圈为顶点,连线为边,顶点包含两项信息:顶点表示和订单标签,如“0:A”表示顶点标识为0,顶点标签为A。边包含一项信息,即边的标签。
gSpan的目标是找出上述图集中所有的频繁子图(按标签进行查找)。例如将支持度设置为3,可以看出最大的频繁子图如下:
gSpan算法执行步骤详解示例_第2张图片
上图中只标注了最大频繁子图。

2. gSpan算法步骤

2.1 数据预处理

gSpan算法的首先会去除支持度小于设定阈值的顶点和边,因为如图某个顶点或某条边支持度小于设定阈值,那么包含这些点和这些边的子图支持度肯定也小于设定阈值。去除后得到的结果如下:
gSpan算法执行步骤详解示例_第3张图片
其中灰色的顶点和边为删除的顶点和边(虽然顶点D的支持度等于设定阈值3,但是没有边与顶点D相连因此删除顶点D)

2.2 深度递归挖掘频繁子图

2.2.1 获取所有的频繁边

遍历所有的图,构建边和所在图的映射字典,字典的key为以顶点标签和边的标签组成的三元组(<起始点标签,边标签,终止点标签>),value为该边所在的图的集合。例如边,出现在图1,图2,图3中,则字典中key为对应的value为数组“[图1,图2,图3]”。
通过上图构建的完整字典信息如下:

key(边) Value(边所在的图组成的数组)
[图1,图2,图3]
[图1,图2,图3, 图3]
[图1,图2,图3]
[图1,图2,图3]

2.2.2 深度递归挖掘频繁子图

获取频繁边后,遍历频繁边,以频繁边作为起始边,并递归扩展边,查找频繁子图。边的扩展包括三种三种方式:
gSpan算法执行步骤详解示例_第4张图片
以边为例:

  • 第一优先级扩展的边为最右侧顶点到之前顶点的边,在所在的图中查找顶点B到A的边,但所有图中均无此边,因此无第一优先级扩展边

  • 因为只有两个订单因此不存在第二优先级

  • 第三优先级为从最右侧端点B扩展出的边,遍历所在的图,查找端点B扩展出的边为,可得:,并记录该边所在的图[图1,图2,图3]

  • 接着扩展第四优先级的边(因为只有两个订单,也没有第四优先级的边)

  • 遍历所在的图,查找顶点A扩展出的其他边,为:,该边所在的图为[图1,图2,图3]

    共找到2条扩展边,且支持度均达到最小阈值:
    gSpan算法执行步骤详解示例_第5张图片
    先加入扩展边,并继续扩展(在所在的图中查找):

  • 第一优先级扩展边:查找C到A的边,为,该边所在的图为[图1,图2,图3]

  • 第二优先级扩展边:查找C到B的边,未找到对应的边,因此无第二优先级扩展边

  • 第三优先级扩展边:从最右侧顶点扩展出的到其他边,未找到,因此无第三优先级扩展边

  • 第四优先级扩展边:查找从顶点B扩展出的到其他边,未找到,因此无第四优先级扩展边

  • 第五优先级扩展边:查找从从顶点A扩展出的到其他边,为,其所在的图为[图1,图2,图3]

    gSpan算法执行步骤详解示例_第6张图片
    共找到两条边:,,这两条边的支持度均达到最小阈值
    先加入并继续扩展(在所在的图中进行查找)

  • 第一优先级:查找A到B的其它边,未找到

  • 第二优先级:查找A到C的其它边,找到,改边所在的图为[图1,图2,图3]

  • 第三优先级:查找A出发的其它边,未找到

  • 第四优先级:查找C出发的其它边,未找到

  • 第五优先级:查找B出发的其它边,未找到

只找到一条边:,且支持度达到最小阈值。
gSpan算法执行步骤详解示例_第7张图片
加入边,并继续扩展,发现五个优先级扩展边都不存在,则退回上一步
中加入扩展边,并继续扩展,以此类推,直到找出所有频繁子图。

参考文献

[1]. 数据挖掘之子图模式
[2]. gSpan频繁子图数据挖掘代码及原理解析

你可能感兴趣的:(数据挖掘,机器学习,论文阅读,算法)