一、序列模式算法概述
序列模式挖掘是数据挖掘的一个重要分支,主要用于发现数据集中的序列模式,即按照时间或其他顺序排列的事件模式。
二、AprioriAll算法(基于Apriori思想的序列模式挖掘算法)
-
原理
- 频繁序列生成 :类似于Apriori算法用于关联规则挖掘的思想。首先,找出所有长度为1的频繁序列(单项序列),通过扫描数据集,统计每个单项序列的出现次数,满足最小支持度阈值的即为频繁1 - 序列。然后,通过频繁 k − 1 k - 1 k−1 - 序列来生成候选 k k k - 序列。对于两个频繁 k − 1 k - 1 k−1 - 序列,如果它们的前 k − 2 k - 2 k−2个元素相同,并且最后一个元素不同,就可以将它们合并生成一个候选 k k k - 序列。之后,再次扫描数据集来计算候选 k k k - 序列的支持度,筛选出频繁 k k k - 序列。这个过程不断迭代,直到不能生成新的频繁序列为止。
- 支持度计算 :序列的支持度定义为包含该序列的序列数量占总序列数量的比例。假设数据集 D D D中有 n n n个序列,序列 s s s出现的次数为 m m m,则序列 s s s的支持度为:
S u p p o r t ( s ) = m n Support(s)=\frac{m}{n} Support(s)=nm
-
应用场景
- 客户购买行为分析。例如,在电商平台上,分析客户在一段时间内购买商品的顺序模式,像"购买手机后,一段时间内购买手机壳和耳机"这样的序列模式,用于商品推荐和营销活动规划。
-
优点
- 基于Apriori的思想,比较直观,容易理解和实现。对于简单的序列模式挖掘场景,能够有效地找到频繁序列。
- 可以通过调整最小支持度阈值来控制挖掘出的序列模式的数量和质量,灵活性较高。
-
缺点
- 需要多次扫描数据集,当数据集规模较大时,会产生较高的I/O开销,导致性能下降。
- 生成候选序列的过程可能会产生大量的候选项,特别是在处理长序列或低支持度阈值的情况时,计算成本会很高。
三、GSP(Generalized Sequential Patterns)算法
-
原理
- 候选序列生成 :GSP算法也类似于Apriori算法。它从频繁1 - 序列开始,通过合并频繁 k − 1 k - 1 k−1 - 序列来生成候选 k k k - 序列。在合并过程中,采用了更灵活的规则,例如可以根据用户定义的时间间隔或其他约束条件来合并序列。
- 支持度和置信度计算 :支持度的计算方式与AprioriAll类似,即序列出现的次数与总序列数的比例。此外,GSP算法还可以计算置信度等其他度量指标。对于序列规则 A ⇒ B A\Rightarrow B A⇒B(其中 A A A和 B B B是序列),置信度的计算公式为:
C o n f i d e n c e ( A ⇒ B ) = S u p p o r t ( A ∪ B ) S u p p o r t ( A ) Confidence(A\Rightarrow B)=\frac{Support(A\cup B)}{Support(A)} Confidence(A⇒B)=Support(A)Support(A∪B) - 剪枝策略:GSP算法采用了多种剪枝策略来减少候选项的数量。例如,如果一个候选序列的子序列是非频繁的,那么这个候选序列也可以被剪枝掉,这是基于频繁序列的反单调性原理。
-
应用场景
- 网页浏览序列分析。在网站流量分析中,挖掘用户浏览网页的顺序模式,如"用户浏览产品页面后,接着浏览评论页面,最后可能进行购买操作"的序列模式,用于网站布局优化和用户体验提升。
-
优点
- 能够处理带有时间间隔等复杂约束条件的序列模式挖掘。通过灵活的候选序列生成和剪枝策略,在一定程度上提高了挖掘效率。
- 除了支持度外,还可以计算置信度等指标,提供更丰富的序列模式评估信息。
-
缺点
- 仍然需要多次扫描数据集,虽然有剪枝策略,但在处理大规模数据集和复杂序列模式时,性能可能仍然受到限制。
- 算法的性能和挖掘结果对参数(如时间间隔参数、支持度和置信度阈值等)比较敏感,需要根据具体的应用场景进行仔细调整。
四、PrefixSpan(Prefix - Projected Sequential Pattern Mining)算法
-
原理
- 前缀和投影划分:PrefixSpan算法的核心是前缀和投影的概念。对于一个序列数据库,首先找到频繁1 - 序列作为前缀。然后,对于每个前缀,将数据库中的序列划分为多个投影数据库,每个投影数据库包含以该前缀开始的序列。在投影数据库中继续挖掘频繁序列,这个过程是递归的。通过不断地扩展前缀和划分投影数据库,挖掘出所有的频繁序列。
- 支持度计算 :同样,序列的支持度是包含该序列的序列数量占总序列数量的比例,计算公式与前面相同:
S u p p o r t ( s ) = m n Support(s)=\frac{m}{n} Support(s)=nm
其中 m m m是序列 s s s出现的次数, n n n是总序列数。
-
应用场景
- DNA序列分析。在生物信息学领域,挖掘DNA序列中的频繁模式,如特定碱基序列的重复模式,有助于基因功能的研究和疾病的诊断。
-
优点
- 只需要扫描数据集两次,一次用于找到频繁1 - 序列,另一次用于在投影数据库中挖掘频繁序列。相比前面的算法,大大减少了I/O开销。
- 采用递归的投影挖掘方式,能够有效地挖掘长序列模式,并且不会生成大量的候选序列,在处理复杂序列数据时具有较高的效率。
-
缺点
- 对于内存的要求较高,因为在挖掘过程中需要存储投影数据库。当数据集很大或者序列很长时,可能会出现内存不足的情况。
- 算法的实现相对复杂,理解前缀和投影的概念以及递归挖掘过程需要一定的学习成本。
五、举例说明
假设我们有一个电商平台的客户购买序列数据集如下(每个序列代表一个客户在一段时间内的购买行为):
客户编号 | 购买序列 |
---|---|
1 | 衬衫,裤子,领带 |
2 | 衬衫,领带 |
3 | 裤子,领带,鞋子 |
4 | 衬衫,裤子 |
- AprioriAll算法示例
- 频繁序列生成 :
- 首先计算1 - 序列的支持度,假设最小支持度阈值为 0.5 0.5 0.5。"衬衫"出现了3次,支持度为 3 4 = 0.75 \frac{3}{4}=0.75 43=0.75;"裤子"出现了3次,支持度为 0.75 0.75 0.75;"领带"出现了3次,支持度为 0.75 0.75 0.75;"鞋子"出现了1次,支持度为 0.25 0.25 0.25。所以频繁1 - 序列为{衬衫、裤子、领带}。
- 然后生成候选2 - 序列:{衬衫,裤子},{衬衫,领带},{裤子,领带}。计算它们的支持度,例如{衬衫,裤子}出现了2次,支持度为 2 4 = 0.5 \frac{2}{4}=0.5 42=0.5。经过筛选,频繁2 - 序列为{衬衫,裤子},{衬衫,领带},{裤子,领带}。
- 接着生成候选3 - 序列:{衬衫,裤子,领带}。计算支持度后,发现其支持度为 2 4 = 0.5 \frac{2}{4}=0.5 42=0.5满足阈值,是频繁3 - 序列。
- 挖掘结果应用 :
- 发现的频繁序列模式可以用于商品推荐。例如,对于购买了衬衫的客户,根据"衬衫,领带"这个频繁序列模式,可以向其推荐领带。
- 频繁序列生成 :
- GSP算法示例
- 候选序列生成和支持度计算 :
- 与AprioriAll类似,先找到频繁1 - 序列{衬衫、裤子、领带}。假设考虑时间间隔约束,比如购买下一件商品的时间间隔不超过一周。在生成候选2 - 序列时,按照这个约束合并频繁1 - 序列。例如,如果有客户在购买衬衫后一周内购买了领带,就可以生成{衬衫,领带}这个候选2 - 序列。计算支持度后得到频繁2 - 序列。
- 置信度计算和规则挖掘 :
- 对于序列规则,如{衬衫} ⇒ \Rightarrow ⇒{领带},计算置信度。假设{衬衫}的支持度为 0.75 0.75 0.75,{衬衫,领带}的支持度为 0.5 0.5 0.5,则置信度为 0.5 0.75 = 2 3 \frac{0.5}{0.75}=\frac{2}{3} 0.750.5=32。根据置信度和支持度等指标来挖掘有价值的序列规则,用于营销决策。
- 候选序列生成和支持度计算 :
- PrefixSpan算法示例
- 前缀和投影划分 :
- 首先找到频繁1 - 序列,如"衬衫"。以"衬衫"为前缀,将数据集划分为投影数据库,在这个投影数据库中,包含以"衬衫"开头的序列,如(衬衫,裤子,领带),(衬衫,领带),(衬衫,裤子)。
- 在这个投影数据库中继续挖掘频繁序列,例如找到频繁序列"领带",得到频繁2 - 序列"衬衫,领带"。然后以"衬衫,领带"为前缀,再次划分投影数据库,挖掘更复杂的频繁序列。
- 应用于DNA序列分析示例(类比) :
- 假设DNA序列数据集,如序列1:A - T - G - C,序列2:A - T - C,序列3:G - C - A。把碱基看作商品,以"A"为前缀划分投影数据库,在这个投影数据库中挖掘频繁序列模式,如"A - T",然后继续挖掘更长的模式,用于研究基因序列中的重复模式和潜在规律。
- 前缀和投影划分 :