GSpan-频繁子图挖掘算法
GSpan频繁子图挖掘算法,网上有很多相关的介绍,中文的一些资料总是似是而非,讲的不是很清楚(感觉都是互相抄来抄去,,,基本都是一个样,,,),仔细的研读了原论文后,在这里做一个总结。
1. GSpan频繁子图挖掘算法:
总的思想是,先生成频繁树,再在频繁树的基础上,生成频繁子图,满足最小支持度,满足最小DFS编码的所有频繁子图。
GraphGen.
输入:图集 GD,最小支持度阈值 min_sup;
输出:频繁子图集合 FG.
(1) 扫描图集并找到图集 GD 中所有频繁边;
(2) 删除所有非频繁边;
(3) E→{GD中所有频繁边};
(4) 将 E 中的边按 DFS 编码顺序(后文中有介绍)和频率的降序进行排列;
(5) T→NULL; /*T为频繁子树集合*/
(6) t→e1; /*E中的第 1 条边作FTGen的初始值*/
(7) FTGen(D,t,E,T); /*频繁树生成算法*/(后文中有介绍)
(8) 将集合 T 中的元素按节点数与 DFS 编码顺序进行排序;
(9) FG→T;
(10) for T 中的每棵树
(11) g→t;
(12) E‘{e是频繁边,且 e 是内边(后文中有介绍),并能在图集中找到(g<>e)};
(13) for E' 中的每条边
(14) E' →E‘ - e;
(15) g→g<>e;
(16) if g ≠ min(g) then break;
(17) if FG中无 g 的同构子图 then FG <— FG‘ ∪ g;
(18) endfor;
(19) endfor;
(20) return FG;
GraphGen 分为 3 个部分,算法 2 给出了这种算法的细节.
算法在第 1 部分(第 1 行~第 6 行)对图集 GD进行预处理.作为图挖掘的基础,必须从图集中提取出必要的 信息,如频繁边集、频繁节点集等.在这一部分中,GraphGen 扫描图集 GD并得到频繁边集,将频繁边集按频率递 减与 DFS 编码值递增的顺序进行排列,供算法进一步计算。
算法在第 2 部分(第 7 行)进行频繁子树的挖掘工作,具体的挖掘过程后面的频繁树生成算法。
算法的第 3 部分(第 8 行~第 19 行)是由树向图的扩展过程.针对每一棵频繁子树,从频繁边集中找出能与之 联接的内边,逐一加入到该树,从而形成频繁子图.算法在第 12 行找到所有能与图 g 联接的频繁内边,并将这些 边在第 13 行~第 17 行的子循环中加入到图 g 中.算法的执行结果为频繁子图集合 FG。
与FTGen相似,算法GraphGen主体的时间复杂性也分为两部分:一部分是子图同构的时间复杂性.由于子图 同构的测试是NP完全问题,算法在第 17 行进行的图同构测试,其时间复杂性为O(2n);另一部分是扩展边的时间 复杂性.由于我们仅向频繁图中加入内边,通过两层循环完成,因此,这部分时间复杂性为O(n2).边的每一次扩展, 都需要检验所生成的图是否与结果集的元素重复,因此,算法总的时间复杂性为O(2n·n2)。
2. 算法 2. FTGen.频繁子树生成算法
输入:图集 GD,频繁子树 t,频繁边集 E;
输出:频繁子树集 T.
(1) if t ≠ min(t) then return; /*检查 t 是否具有最小 DFS 编码*/(后文中有介绍)
(2) E‘ <— {e是频繁外边};
(3) for E‘ 中的每条边
(4) E‘ <— E‘ - e;
(5) if (t<>e)存在于图集中;
(6) then t <— t<>e;
(7) if (T中无 t 的同构子树) then T<—T∪ t;
(8) FTGen(GD,t,E,T);
endfor;
3. 定义:外边,内边:
在图的扩展过程中,如果一条扩展边引入了一个新的节点,则称该扩展边为外边,由eo表示.若该扩 展边未引入新的节点(扩展边的两个节点已存在于该图中),则称其为内边。
4. 定义:最小DFS编码:
4.1 什么是DFS编码?
对图进行深度优先遍历
所有节点根据发现时间排序
最后发现的节点叫做最右节点
从第一个节点到最右节点的直线路径叫做最右路径
所有边表示为五元组(i,j,ni,lij,nj)
前向边i<j
后向边i>j
边的排序:e1<e2, if
同是前向边,且j1<j2
同是后向边,且i1<i2或者i1=i2&& j1<j2
e1是前向边,e2是后向边,且j1<=i2
e1是后向边,e2是前向边,且i1<j2
根据边的次序得到的边序列是图的DFS编码
eg:

最小DFS编码:

eg:

4.2 DFS编码树:

4.3 DFS树的剪枝:

剪枝后的所有生成树,DFS编码最小的就是最小DFS编码树。
GSpan-频繁子图挖掘算法的更多相关文章
- 静态频繁子图挖掘算法用于动态网络——gSpan算法研究
摘要 随着信息技术的不断发展,人类可以很容易地收集和储存大量的数据,然而,如何在海量的数据中提取对用户有用的信息逐渐地成为巨大挑战.为了应对这种挑战,数据挖掘技术应运而生,成为了最近一段时期数据科学的 ...
- 【甘道夫】并行化频繁模式挖掘算法FP Growth及其在Mahout下的命令使用
今天调研了并行化频繁模式挖掘算法PFP Growth及其在Mahout下的命令使用,简单记录下试验结果,供以后查阅: 环境:Jdk1.7 + Hadoop2.2.0单机伪集群 + Mahout0.6 ...
- 频繁项挖掘算法Apriori和FGrowth
一:背景介绍 最近在公司用spark的平台做了一个购物车的推荐,用到的算法主要是FGrowth算法,它是Apriori算法的升级版,算法的主要目的是找出频繁进行一起购买的商品.本文主要介绍两个算法的背 ...
- 频繁模式挖掘 Apriori算法 FP-tree
啤酒 尿布 组合营销 X=>Y,其中x属于项集I,Y属于项集I,且X.Y的交集等于空集. 2类算法 Apriori算法 不断地构造候选集.筛选候选集来挖掘出频繁项集,需要多次扫描原始数据.磁盘I ...
- 八、频繁模式挖掘Frequent Pattern Mining
频繁模式挖掘(Frequent Pattern Mining): 频繁项集挖掘是通常是大规模数据分析的第一步,多年以来它都是数据挖掘领域的活跃研究主题.建议用户参考维基百科的association r ...
- 频繁模式挖掘中Apriori、FP-Growth和Eclat算法的实现和对比
最近上数据挖掘的课程,其中学习到了频繁模式挖掘这一章,这章介绍了三种算法,Apriori.FP-Growth和Eclat算法:由于对于不同的数据来说,这三种算法的表现不同,所以我们本次就对这三种算法在 ...
- 关联规则挖掘算法之Apriori算法
Apriori算法是一种挖掘关联规则的频繁项集算法,其核心思想是通过候选集生成和情节的向下封闭检测两个阶段来挖掘频繁项集. 关于这个算法有一个非常有名的故事:"尿布和啤酒".故事是 ...
- 频繁模式挖掘中Apriori、FP-Growth和Eclat算法的实现和对比(Python实现)
最近上数据挖掘的课程,其中学习到了频繁模式挖掘这一章,这章介绍了三种算法,Apriori.FP-Growth和Eclat算法:由于对于不同的数据来说,这三种算法的表现不同,所以我们本次就对这三种算法在 ...
- 频繁模式挖掘apriori算法介绍及Java实现
频繁模式是频繁地出如今数据集中的模式(如项集.子序列或者子结构).比如.频繁地同一时候出如今交易数据集中的商品(如牛奶和面包)的集合是频繁项集. 一些基本概念 支持度:support(A=>B) ...
随机推荐
- 多线程中sleep和wait的区别,以及多线程的实现方式及原因,定时器--Timer
1. Java中sleep和wait的区别 ① 这两个方法来自不同的类分别是,sleep来自Thread类,和wait来自Object类. sleep是Thread的静态类方法,谁调用的谁去睡觉,即 ...
- PHP中构造函数和析构函数解析
构造函数 void __construct ([ mixed $args [, $... ]] ) PHP 5 允行开发者在一个类中定义一个方法作为构造函数.具有构造函数的类会在每次创建新对象时先调用 ...
- 【Head First Servlets and JSP】笔记 28: 过滤器与包装器
1.过滤器的执行顺序: <url-pattern> 为第一梯队, <servlet-name> 为第二梯队,梯队内的执行顺序和 DD 里的声明顺序相同. When the co ...
- iframe跨页面调用函数
在项目中难免会遇到这样一个问题就是页面引入了IFrame并且需要父页面调用子页面函数或者子页面需要调用父页面函数.比如说:现在有两个页面parent.html和child.html.其中parent. ...
- jQuery判断元素是否显示 是否隐藏
var node=$('#id'); 第一种写法 if(node.is(':hidden')){ //如果node是隐藏的则显示node元素,否则隐藏 node.show(); }else{ node ...
- openssl 编译
不要费事编译了,直接下载吧! https://www.npcglib.org/~stathis/blog/precompiled-openssl/ 下载 openssl https://www.ope ...
- zabbix分布式监控系统安装配置
zabbix简介: zabbix(音同 zæbix)是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案. zabbix能监视各种网络参数,保证服务器系统的安全运营:并提供灵 ...
- Sublime 快捷键及使用技巧
(1)打开刚刚关闭的窗口:ctrl+shift+T 默认设置. (2)全屏显示:F11 默认设置. (3)多处选择相同的词:Ctrl+D,回退选择Ctrl+U 默认设置,非常有用,可以试试. (4)取 ...
- SaltStack部署服务及配置管理apache+php-第二篇
实验目标 1.使用SaltStack部署apache和php, 2.使用salt管理httpd.conf配置文件配置访问info.php使用账户密码 3.在salt里面增加对conf.d目录进行配置管 ...
- 配置ssh秘钥登陆
环境2台linux服务器:node1 192.168.X.234 node2 192.168.X.242 演示用node1无密码登陆node ...