是否有任何算法从序列数据库中挖掘连续闭合序列?

时间:2016-02-18 05:29:21

标签: python algorithm data-mining

我正在进行文本压缩,我想使用挖掘闭合频繁序列的知识。 GSP,CloSpan,ClaSP,Bide等现有算法都是连续和非连续的频繁序列。你能帮我找到这样的算法吗?

For example if the sequence database is 
SID        Sequence
1            CAABC
2            ABCB
3            CABC
4            ABBCA
and minimum support is 2

现有算法考虑子序列' CB' id为1的序列,但我不想这样做。

2 个答案:

答案 0 :(得分:1)

现代顺序模式挖掘算法试图修剪搜索空间以减少运行时间。搜索空间呈指数级增长为非连续的"子序列可以是来自输入序列的任何组合。在您的情况下,搜索空间要小得多,因为序列是连续的,即我们已经知道组合。所以,如果你愿意的话,你可以自己为它做一个算法,它仍然会相当快。

这是一个粗略的递归示例如何:

def f(str, database, minSupp):
    freq = 0

    if len(patt) == 0:
        return ""

    #count frequency
    for trans in db:
        if patt in trans:
            freq += 1

    if freq >= minSupp:
        return patt
    else: #break it down
        r = []
        r.append(f(patt[1:], db, minSupp)) #All but the first element
        r.append(f(patt[:-1], db, minSupp)) #All but the last element
        return r

这只是演示了一种方法。当然,它很糟糕。

为了更快地做到这一点,你可以使用写一些条件,以便在模式已知的情况下不进行递归调用。

更快的方法是保持所有模式的倒排索引,然后逐步更新它们以使用Apriori条件创建超级模式。为此,您可以参考一些幻灯片演示,解释Apriori算法的工作原理(使用候选生成方法;其中一个例子在上面的算法中)。

答案 1 :(得分:0)

因此,不存在用于找到用于压缩的连续序列的算法。您可以修改现有算法以仅挖掘连续序列。我建议你修改BIDE算法,只找到连续的子序列。