zoukankan      html  css  js  c++  java
  • Mining Sequential Patterns by PrefixSpan算法

     prefixspan算法韩家炜老师在2001年提出的序列模式算法,该算法和他在2000提出的FP_growth算法有很大的相似之处,都避免产生候选序列。

        prefixspan算法的核心是产生前缀和对应的后缀,每次递归都将合适的后缀变为前缀。难点是类似:<a x>,<(a x)>和<(_ x)>,后两种可以做一类处理。现以下图所示的超市购物数据详细讲解,阈值是2=4*50%。

        prefixspan算法

        概念介绍:每行数据叫序列,可以理解某人第一天买了商品a,b,c,第二天又买了商品a,b,c,第三天买了商品a,c。某天买的总商品叫项目如:a,b,c。每件商品叫元素如a。

        第一步:按每个元素排序,每个元素在一个序列中即使出现多次,也只算一次,然后删除不满足阈值的元素,这里只删除了元素g,结果如下图:

       prefixspan算法
       第二步:找前缀分别为a,b,c,d,e,f的后缀,那么这些后缀是相互独立,互不影响的。这是算法的关键。前缀a和b的后缀如下图:

      prefixspan算法   prefixspan算法

    这里的下划线"_"表示它就是前缀,并且该项目还有其他元素。

      第三步:在各个后缀中分别递归的讲后缀变成前缀。以前缀a为例。前缀为<a b>的后缀是:

      prefixspan算法
      后面的4表示前缀为<a b>出现了4次,分别是下面两次,第三次是空的,表示前缀<a b>后面没有项目了。前缀为<(a b)>的后缀是:

      prefixspan算法
      注意前缀<a b>和<(a b)>是有区别的。前者表示元素a,b在不同的项目里面,而后者表示元素a,b必须在同一个项目里面。这代表了两种不同的情况。这一步可以一直递归下去,知道全部后缀变成前缀为止。下面就前缀<a b>继续分析,它会生成前缀为<a b c>的后缀:

    prefixspan算法
    此时,再没有合适的后缀可以转换成前缀了,结束递归。前缀为<a (b c)>的后缀:

    prefixspan算法
    这个后缀还可以继续转换成前缀,有:

    prefixspan算法
    此时,再没有合适的后缀可以转换成前缀了,结束递归。于是整个前缀为<a b>的所有情况的找出来了。类似的可以找出前缀为b,c,d,e,f的部分。

    论文下载地址

  • 相关阅读:
    第十二章学习笔记
    UVa OJ 107 The Cat in the Hat (戴帽子的猫)
    UVa OJ 123 Searching Quickly (快速查找)
    UVa OJ 119 Greedy Gift Givers (贪婪的送礼者)
    UVa OJ 113 Power of Cryptography (密文的乘方)
    UVa OJ 112 Tree Summing (树的求和)
    UVa OJ 641 Do the Untwist (解密工作)
    UVa OJ 105 The Skyline Problem (地平线问题)
    UVa OJ 100 The 3n + 1 problem (3n + 1问题)
    UVa OJ 121 Pipe Fitters (装管子)
  • 原文地址:https://www.cnblogs.com/ywl925/p/3088896.html
Copyright © 2011-2022 走看看