这个算法是导师课题的一个部分,感觉对时间序列频繁模式挖掘的学习还是很有帮助的,在博客里做一下记录。
首先要明确一下什么是A->B*->D模式:
A->B->D表示在A事件发生后又发生了B事件,又发生了D事件,由于我应用在社交网络,那么这三种事件就可以表示为三个人在某微博下的留言。
什么是A->B*->D模式?这里的*表示不管在A与D时间发生的时间点当中有多少个B事件发生,都可以这个标记这种模式,比如:
A->B->B->D或A->B->B->B->D都可以写成A->B*->D的形式,但看A->B->D和A->B->B->D和A->B->B->B->D可能每个都不是频繁的,但如果把他们看成一种形式A->B*->D就有可能是频繁的,我所要解决的就是这个问题。
这里有个前提条件,就是我所研究的背景是社交网络,也就是说每个事件发生的时间点一定不可能一样,也就是说,每个事件之间一定有先后的发生顺序,综上所述,我只考虑时间序列的频繁模式挖掘,而不考虑传统的频繁模式挖掘。
程序流程图:
本算法里面的字母理论上应该是社交网络中的各个事件,目前正在搜索合适的数据集,将其封装成一个类就可以像算法里的字母一样表示了。数据集的搜索目前还在进行中。
1.26更新 ver1.1
增加多重序列识别功能:ABDBDF -> A(BD)F
增加多重序列内存在的多重序列识别功能 :
ABBDDBBDDF -> A(B)(D)(B)(D)F -> A(BD)F
增加多重序列内重复序列识别功能:
ABBBBF有这样一种形式 A(BB)F 可化为 A(B)F,目的是为了避免重复
源代码:(数据集是自己造的,比较具有代表性的小数据,肉眼可以识别出本算法在运行上没有问题)
#coding:utf-8
__author__ = 'ChiXu_15s103144_HIT'
import copy
import sys
#----------------------------------------------------------#
#