序列挖掘算法SPADE:原理、实现与性能评估
1. 引言
在序列挖掘领域,如何高效地挖掘频繁序列是一个关键问题。由于主内存有限,处理大规模序列数据时,中间结果可能无法全部存储在内存中。为了解决这个问题,我们需要对原始序列格进行分解,并采用合适的算法来实现频繁序列的挖掘。本文将介绍一种名为SPADE的算法,包括其原理、实现步骤以及性能评估。
2. 序列格分解:基于前缀的类
2.1 问题提出
当主内存足够时,我们可以通过遍历序列格并进行时间连接来枚举所有频繁序列。但在实际应用中,主内存有限,所有中间id列表无法全部存入内存。因此,我们需要将原始序列格分解成更小的部分,使得每个部分可以在主内存中独立求解。
2.2 相关定义
- 前缀函数 :定义函数 $p : (S, N) \to S$,其中 $S$ 是序列集合,$N$ 是非负整数集合,$p(X, k) = X[1 : k]$,即返回序列 $X$ 的前 $k$ 个元素组成的前缀。
- 等价关系 :在序列格 $S$ 上定义等价关系 $\theta_k$,对于任意 $X, Y \in S$,当且仅当 $p(X, k) = p(Y, k)$ 时,称 $X$ 和 $Y$ 在 $\theta_k$ 下相关,记为 $X \equiv_{\theta_k} Y$。也就是说,两个序列如果具有相同的 $k$ 长度前缀,则它们属于同一个等价类。
2.3 等价类划分
通过等价关系 $\theta_1$ 对序列格 $S$ 进行划