频繁子图挖掘算法gSpan的实现
项目地址:https://github.com/betterenvi/gSpan
频繁子图挖掘是数据挖掘中一个非常广泛的应用。频繁子图挖掘是指从大量的图中挖掘出满足给定支持度的频繁子图,同时算法需要保证这些频繁图不能重复。频繁模式挖掘主要就是应用两种策略(这里不讨论基于垂直增长的方法)——Apriori和Growth。最早的AGM和FSG就分别实现了这两重策略的基本思想。gSpan是一个非常高效的算法,它利用dfs-code序列对搜索树进行编码,并且制定一系列比较规则,从而保证最后只得到序列“最小”的频繁图集合。
我用Python实现了面向无向图、有向图的GSpan,在实现时,参考了gboost,一个gSpan的C++实现。在挖掘无向图的频繁子图时,经过多轮比较,我的实现和gboost的输出一致。
当前(时间:2016-10-29),gboost还不支持有向图的频繁子图挖掘。在我的实现中,支持面向有向图的频繁子图挖掘,可以挖掘那些至少有一个点能够到达其他任一点的频繁子图,但是还没有全面测试过,正确性不敢保证。只在两个简单的数据集上,运行了数次,暂时还未发现错误。欢迎大家访问我的项目https://github.com/betterenvi/gSpan,如果能够帮忙看看面向有向图的挖掘是否正确,将十分感谢!