gSpan算法执行步骤详解示例

目录

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

1. 问题描述

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

2. gSpan算法步骤

2.1 数据预处理

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

2.2 深度递归挖掘频繁子图

2.2.1 获取所有的频繁边

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

key(边)Value(边所在的图组成的数组)
<A,a,B>[图1,图2,图3]
<A,b,C>[图1,图2,图3, 图3]
<B,b,C>[图1,图2,图3]
<C,c,A>[图1,图2,图3]

2.2.2 深度递归挖掘频繁子图

获取频繁边后,遍历频繁边,以频繁边作为起始边,并递归扩展边,查找频繁子图。边的扩展包括三种三种方式:
扩展边的三种方式
以边<A,a,B>为例:

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

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

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

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

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

    共找到2条扩展边,且支持度均达到最小阈值:<B,b,C>和<A,b,C>
    扩展边
    先加入扩展边<B,b,C>,并继续扩展(在<A,b,B><B,b,C>所在的图中查找):

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

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

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

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

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

    扩展边
    共找到两条边:<C,c,A>,<A,b,C>,这两条边的支持度均达到最小阈值
    先加入<C,c,A>并继续扩展(在<A,a,B><B,b,C><C,c,A>所在的图中进行查找)

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

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

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

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

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

只找到一条边:<A,b,C>,且支持度达到最小阈值。
扩展边
加入边<A,B,C>,并继续扩展,发现五个优先级扩展边都不存在,则退回上一步
在<A,a,B><B,b,C>中加入扩展边<A,b,C>,并继续扩展,以此类推,直到找出所有频繁子图。

参考文献

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/72326.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

13-把矩阵看作是对系统的描述

探索矩阵乘法&#xff1a;更深刻的理解与应用视角 &#x1f9e9;&#x1f50d; 引言 &#x1f4d6; 在我们进一步探讨矩阵乘法之前&#xff0c;让我们从不同的角度来理解什么是矩阵&#xff0c;以及如何将矩阵视为一个系统。我们之前已经介绍了矩阵的基本概念和运算&#xff…

SpringBoot案例-部门管理-新增

根据页面原型&#xff0c;明确需求 页面原型 需求 阅读接口文档 接口文档链接如下&#xff1a; 【腾讯文档】SpringBoot案例所需文档 https://docs.qq.com/doc/DUkRiTWVaUmFVck9N 思路分析 前端在输入要新增的部门名称后&#xff0c;会以JSON格式将数据传入至后端&#xf…

idea如何开启远程调试

一&#xff1a;打包需要部署的jar包上传到服务器 二&#xff1a;服务器&#xff08;开启远程调试接口&#xff09; nohup java -jar -Xdebug -Xrunjdwp:transportdt_socket,servery,suspendn,address8453 xxx.jar > xxx.log 2>&1 & 三&#xff1a; idea配置rem…

电脑开机出现Boot Device怎么办?

开机出现Boot Device这个问题很常见&#xff0c;有时还会出现No Boot Device的问题&#xff0c;虽然多了一个单词&#xff0c;但意思是相同的&#xff0c;这些问题说明你的系统盘出现了问题&#xff0c;或者是引导出现了问题。这该如何解决呢&#xff1f; 方法1. 检查主板或硬盘…

如何定位线上CPU飙高的问题

1.问题情景 我们的接口卡死&#xff0c;CPU飙高到打不开的网页 2.问题定位 2.1 top指令 通过top命令找到CPU耗用最厉害的那个进程的PID 直接输入top Linux下的100%代表一个核心&#xff0c;如果是八核&#xff0c;最高可以到800%&#xff0c;这样才算满 然后通过PID找到CP…

Redis原理简述

Redis原理简述 Redis 有哪些特性 1. 特性 key-value 型内存数据库单线程——原子化操作支持lua脚本发布与订阅可持久化逐出与过期……2. 持久化 RDB:经过压缩的二进制文件;fork子进程进行操作AOF:保存所有写命令;先写缓存再同步至AOF文件;文件过大时会触发AOF重写3. 过期…

Smart HTML Elements 16.1 Crack

Smart HTML Elements 是一个现代 Vanilla JS 和 ES6 库以及下一代前端框架。企业级 Web 组件包括辅助功能&#xff08;WAI-ARIA、第 508 节/WCAG 合规性&#xff09;、本地化、从右到左键盘导航和主题。与 Angular、ReactJS、Vue.js、Bootstrap、Meteor 和任何其他框架集成。 智…

深入了解 Vue 3 组件间通信机制

什么是组件&#xff1f; 在 Vue3 中&#xff0c;组件是构建应用界面的核心概念之一。组件可以看作是可复用、自包含和可组合的代码块&#xff0c;用于封装 UI 元素和相应的行为逻辑。 通俗来说就是&#xff0c;组件&#xff08;Component&#xff09;是一种对数据和方法的简单…

c语言经典例题讲解(输出菱形,喝汽水问题)

目录 一、输出菱形 二、喝汽水问题 方法1&#xff1a;一步一步来 方法二&#xff1a;直接套公式 一、输出菱形 输出类似于下图的菱形&#xff1a; 通过分析&#xff1a;1、先分为上下两部分输出 2.在输出前先输出空格 3.找规律进行输出 可知&#xff0c;可令上半部分lin…

Vue3 + Ts + Vite 封装一套企业级axiso全流程

前期回顾 从零搭建 Vue3 VIte Ts 项目 —— 并集成eslint 、prettier、stylelint、husky、lint-staged、pinia、axios、loding、动态路由…_彩色之外的博客-CSDN博客 实现功能&#xff1a; 取消重复请求&#xff1a;完全相同的接口在上一个pending状态时&#xff0c;自动取…

C语言库函数之 qsort 讲解、使用及模拟实现

引入 我们在学习排序的时候&#xff0c;第一个接触到的应该都是冒泡排序&#xff0c;我们先来复习一下冒泡排序的代码&#xff0c;来作为一个铺垫和引入。 代码如下&#xff1a; #include<stdio.h>void bubble_sort(int *arr, int sz) {int i 0;for (i 0; i < sz…

python爬虫实战(2)--爬取某博热搜数据

1. 准备工作 使用python语言可以快速实现&#xff0c;调用BeautifulSoup包里面的方法 安装BeautifulSoup pip install BeautifulSoup完成以后引入项目 2. 开发 定义url url https://s.微博.com/top/summary?caterealtimehot定义请求头&#xff0c;微博请求数据需要cookie…

推荐 4 个 yyds 的 GitHub 项目

本期推荐开源项目目录&#xff1a; 1. 开源的 Markdown 编辑器 2. MetaGPT 3. SuperAGI 4. 一个舒适的笔记平台 01 开源的 Markdown 编辑器 Cherry 是腾讯开源的 Markdown 编辑器&#xff0c;基于 Javascript具有轻量简洁、易于扩展等特点&#xff0c; 它可以运行在浏览器或服…

Java基础入门篇——数组初识

一、数组 1.假设某公司有100个员工&#xff0c;需要统计某公司员工的工资情况&#xff0c;首先需要声明100个变量来分别记每个员工的工资&#xff0c;那么如果按照之前的做法&#xff0c;可能定义的结构如下所示&#xff1a; int a1,a2,a3,......a100; 要求你输出这100个员工…

Qt中将信号封装在一个继承类中的方法

QLabel标签类对应的信号如下&#xff1a; Qt中标签是没有双击&#xff08;double Click&#xff09;这个信号的&#xff1b; 需求一&#xff1a;若想双击标签使其能够改变标签中文字的内容&#xff0c;那么就需要自定义一个“双击”信号&#xff0c;并将其封装在QLabel类的派生…

【2023新教程】树莓派4B开机启动-树莓派第一次启动-树莓派不使用显示器启动-树莓派从购买到启动一步一步完全版!

背景 闲来无事&#xff0c;在咸鱼上买了一个树莓派4B。买来配件都十分齐全&#xff0c;于是就想着启动来测试一下。下面是树莓派无显示器第一次启动的全过程&#xff0c;包含安装系统。 网上的教程大多需要额外使用显示器、鼠标、键盘之类的外设。然而&#xff0c;树莓派本身就…

“可一学院”区块链学习平台正式启动,助力BSV技术普及与传播

2023年8月8日&#xff0c;上海可一澈科技有限公司&#xff08;以下简称“可一科技”&#xff09; 正式发布区块链学习平台“可一学院”。“可一学院” 立足于BSV区块链技术本源&#xff0c;汇集了多层次的专业课程和学习资源&#xff0c;致力于打造一个适合各类人群使用的一站式…

因果推断(三)双重差分法(DID)

因果推断&#xff08;三&#xff09;双重差分法&#xff08;DID&#xff09; 双重差分法是很简单的群体效应估计方法&#xff0c;只需要将样本数据随机分成两组&#xff0c;对其中一组进行干预。在一定程度上减轻了选择偏差带来的影响。 因果效应计算&#xff1a;对照组y在干预…

谈谈语音助手

目录 1.什么是语音助手 2.语音助手的发展过程 3.现在有哪些成熟的语音助手 4.语音助手对人类发展的影响 1.什么是语音助手 语音助手是一种能够通过语音交互与用户进行沟通和执行任务的虚拟助手。它基于人工智能和自然语言处理技术&#xff0c;能够理解用户的语音指令&#x…

[数据集][目标检测]骑电动车摩托车不戴头盔数据集VOC格式1385张

数据集格式&#xff1a;Pascal VOC格式(不包含分割路径的txt文件和yolo格式的txt文件&#xff0c;仅仅包含jpg图片和对应的xml) 图片数量(jpg文件个数)&#xff1a;1385 标注数量(xml文件个数)&#xff1a;1385 标注类别数&#xff1a;2 标注类别名称:["y","n&q…