五、序列模式发现算法
关联规则刻画了交易数据库在同一事务中,各个项目 (Items) 之间存在的横向联系 (购买A的同时还买了B),但没有考虑事务中的项目在时间维度上存在的纵向联系 (购买了A一段时间后,再来购买B) ,后者就是一种时间序列模式,简称序列模式。
(一)序列模式的概念
定义 8-10 设
I
=
{
i
1
,
i
2
,
⋯
,
i
m
}
I=\{i_1,i_2,\cdots,i_m\}
I={i1,i2,⋯,im} 为项集,称
S
=
<
(
s
1
,
h
1
)
,
(
s
2
,
h
2
)
,
⋯
,
(
s
n
,
h
n
)
>
S=<(s_1,h_1), (s_2,h_2),\cdots,(s_n,h_n)>
S=<(s1,h1),(s2,h2),⋯,(sn,hn)> 为一个时间事务序列,如果
s
i
⊆
I
s_i\subseteq I
si⊆I,
h
i
h_i
hi 为
s
i
s_i
si 发生的时间且
h
i
<
h
i
+
1
(
i
=
1
,
2
,
⋯
,
n
−
1
)
h_i<h_{i+1} (i=1,2,\cdots,n-1)
hi<hi+1(i=1,2,⋯,n−1)。
如果在时间事务序列问题的分析时,只要求
h
i
<
h
i
+
1
h_i<h_{i+1}
hi<hi+1 且不计
△
h
i
=
h
i
+
1
−
h
i
\triangle h_i=h_{i+1}-h_i
△hi=hi+1−hi 的大小
(
i
=
1
,
2
,
⋯
,
n
−
1
)
(i=1,2,\cdots,n-1)
(i=1,2,⋯,n−1),即不关心前后两个事务发生的时间跨度,则时间事务序列可简记为
S
=
<
s
1
,
s
2
,
⋯
,
s
n
>
S=<s_1, s_2,\cdots,s_n>
S=<s1,s2,⋯,sn>,并称为一个序列 (Sequence)。其中项集
s
i
s_i
si 称为序列
S
S
S 的元素。
定义 8-11 若序列 S S S 中包含 k k k 个项,则称 S S S 为 k-序列或长度为 k 的序列。
例 8-14 顾客购买商品的序列。
若仅关心顾客购买商品的时间顺序而不关心购买商品的具体时间,则
S
=
<
{
笔记本电脑
,
鼠标
}
,
{
移动硬盘
,
摄像头
}
,
{
刻录机
,
刻录光盘
}
,
{
激光打印机
,
打印纸
}
>
S=<\{笔记本电脑,鼠标\},\{移动硬盘,摄像头\},\{刻录机,刻录光盘\},\{激光打印机,打印纸\}>
S=<{笔记本电脑,鼠标},{移动硬盘,摄像头},{刻录机,刻录光盘},{激光打印机,打印纸}>
就是某个顾客一段时间内购买商品的序列,它有4个元素,8个项目,其长度为8。
定义 8-12 称 S = < s 1 , s 2 , ⋯ , s r > S=<s_1, s_2,\cdots,s_r> S=<s1,s2,⋯,sr> 为序列 S ′ = < s 1 ′ , s 2 ′ , ⋯ , s n ′ > S'=<s'_1, s'_2,\cdots,s'_n> S′=<s1′,s2′,⋯,sn′> 的子序列 (Subsequence),记作 S ⊆ S ′ S\subseteq S' S⊆S′,若存在正整数 1 ≤ j 1 < j 2 < ⋯ < j r ≤ n 1≤j_1<j_2<\cdots<j_r≤n 1≤j1<j2<⋯<jr≤n,使得 s 1 ⊆ s j 1 ′ , s 2 ⊆ s j 2 ′ , ⋯ , s r ⊆ s j r ′ s_1\subseteq s'_{j_1},s_2\subseteq s'_{j_2},\cdots,s_r\subseteq s'_{j_r} s1⊆sj1′,s2⊆sj2′,⋯,sr⊆sjr′。
例 8-15 对于序列 S ′ = < { 7 } , { 3 , 8 } , { 9 } , { 4 , 5 , 6 } , { 8 } > S'=<\{7\},\{3,8\},\{9\},\{4,5,6\},\{8\}> S′=<{7},{3,8},{9},{4,5,6},{8}>,则 S = < { 3 } , { 4 , 5 } , { 8 } > S=<\{3\},\{4,5\},\{8\}> S=<{3},{4,5},{8}> 是 S ’ S’ S’ 的一个子序列,因为 S S S 的元素 { 3 } ⊆ { 3 , 8 } \{3\}\subseteq\{3,8\} {3}⊆{3,8}, S S S 的元素 { 4 , 5 } ⊆ { 4 , 5 , 6 } \{4,5\}\subseteq\{4,5,6\} {4,5}⊆{4,5,6}, S S S 的元素 { 8 } ⊆ { 8 } \{8\}\subseteq\{8\} {8}⊆{8},即 S S S 是 S ′ S' S′ 的一个子序列。
例 8-16 对于表8-13所示的交易数据库,其中商品用长度为2的数字编码表示。试给出每个顾客的购物序列。
解:对于包含时间信息的交易数据库,可以按照顾客 id 和交易日期升序排序,并把每位顾客每一次购买的商品集合作为该顾客购物序列中的一个元素,最后按照交易日期先后顺序将其组成一个购物序列,生成如表8-14所示的序列数据库
T
S
T_S
TS。
类似于关联规则中的支持度概念,我们可以将序列
S
S
S 在序列数据库
T
S
T_S
TS 中的支持数定义为该数据库中包含
S
S
S 的元组数,即
S
p
t
N
(
S
)
=
∣
{
(
C
i
d
,
S
′
)
∣
(
C
i
d
,
S
′
)
∈
T
S
∧
S
⊆
S
′
)
}
∣
SptN(S)= |\{ (C_{id}, S') | (C_{id}, S')\in T_S\wedge S\subseteq S')\}|
SptN(S)=∣{(Cid,S′)∣(Cid,S′)∈TS∧S⊆S′)}∣ 因此,
S
S
S 在序列数据库
T
S
T_S
TS 中的支持度可定义为
S
u
p
p
o
r
t
(
S
)
=
∣
{
(
C
i
d
,
S
′
)
∣
(
C
i
d
,
S
′
)
∈
T
S
∧
S
⊆
S
′
)
}
∣
/
∣
T
S
∣
=
S
p
t
N
(
S
)
/
∣
T
S
∣
Support(S)= |\{(C_{id}, S') | (C_{id}, S')\in T_S\wedge S\subseteq S')\}| / | T_S |=SptN(S) / | T_S |
Support(S)=∣{(Cid,S′)∣(Cid,S′)∈TS∧S⊆S′)}∣/∣TS∣=SptN(S)/∣TS∣
定义 8-13 给定一个最小支持度阈值 M i n S MinS MinS,如果 S u p p o r t ( S ) ≥ M i n S Support(S)≥MinS Support(S)≥MinS,则称序列 S S S 是频繁的。如果序列 S S S 是频繁的,则称 S S S 为一个频繁序列(Frequent Sequence)或序列模式(Sequence Pattern)。
例 8-17 对于表8-14所示的序列数据库 T S T_S TS,给定最小支持度阈值 M i n S = 25 % MinS=25\% MinS=25%,试找出其中的两个频繁序列模式。
解:因为 M i n S = 25 % MinS=25\% MinS=25%,而序列数据库 T S T_S TS 有5条记录,所以支持数等于1.25,即频繁序列至少应包含在2个元组之中。容易判断序列 < { 30 } , { 90 } > <\{30\},\{90\}> <{30},{90}> 和 < { 30 } , { 40 , 70 } > <\{30\},\{40,70\}> <{30},{40,70}> 都是频繁的,因为元组 C 1 C_1 C1 和 C 4 C_4 C4 包含序列 < { 30 } , { 90 } > <\{30\},\{90\}> <{30},{90}>,而元组 C 2 C_2 C2 和 C 4 C_4 C4 包含序列 < { 30 } , { 40 , 70 } > <\{30\},\{40,70\}> <{30},{40,70}>。故 < { 30 } , { 90 } > <\{30\},\{90\}> <{30},{90}> 和 < { 30 } , { 40 , 70 } > <\{30\},\{40,70\}> <{30},{40,70}> 都是序列模式。
对于项集 X ⊆ I X\subseteq I X⊆I,如果存在序列 S S S 的元素 s i s_i si 使得 X ⊆ s i X\subseteq s_i X⊆si,则称元组 ( C i d , S ) (C_{id}, S) (Cid,S) 包含项集 X X X。因此,类似于关联规则中的频繁项集概念,我们可以将 X X X 在序列数据库 T S T_S TS 中的支持数定义为该数据库中包含 X X X 的元组数 S p t N ( X ) = ∣ { ( C i d , S ) ∣ ( C i d , S ) ∈ T S ∧ ∃ s i ( X ⊆ s i ) } ∣ SptN(X)= |\{ (C_{id},S) | (C_{id}, S)\in T_S\wedge\exist s_i (X\subseteq s_i)\}| SptN(X)=∣{(Cid,S)∣(Cid,S)∈TS∧∃si(X⊆si)}∣ 同理, X X X 在序列数据库 T S T_S TS 中的支持度可定义为 S u p p o r t ( X ) = ∣ { ( C i d , S ) ∣ ( C i d , S ) ∈ T S ∧ ∃ s i ( X ⊆ s i ) } ∣ / ∣ T S ∣ = S p t N ( X ) / ∣ T S ∣ Support(X)= |\{ (C_{id},S) | (C_{id}, S)\in T_S\wedge\exist s_i (X\subseteq s_i)\}| / |T_S|= SptN(X) / |T_S| Support(X)=∣{(Cid,S)∣(Cid,S)∈TS∧∃si(X⊆si)}∣/∣TS∣=SptN(X)/∣TS∣
定义 8-14 设 X ⊆ I X\subseteq I X⊆I, M i n S MinS MinS 为最小支持度阈值,如果 S u p p o r t ( X ) ≥ M i n S Support(X)≥MinS Support(X)≥MinS,则称 X X X 为序列数据库 T S T_S TS 的频繁项集。
(二)序列模式的类Apriori算法
序列模式的发现可以采用穷举法来枚举所有可能的序列,并统计它们的支持度。但这种方法的计算复杂性非常高。容易证明,在长度为 n n n 的序列中,一个具有 n n n 个项的序列总共包含 2 n − 1 2n-1 2n−1 个不同的子序列。因此必要寻找其它更高效的算法来发现序列模式,而下面介绍的定理8-5(序列模式的性质),就可以在序列模式的搜索空间中剪裁掉那些明显的非频繁序列,从而提高序列模式挖掘的效率。
定理 8-5 (序列模式性质):如果 S ′ S' S′ 是频繁序列,则其任何非空子序列 S S S 也是频繁序列。
类 Apriori(Apriori Based)算法是一种基于 Apriori 原理的序列模式挖掘算法,利用序列模式的性质(定理8-5)来对候选序列模式集进行剪枝,从而减少了算法的计算工作量。其挖掘过程又可分解为事务数据库排序、频繁项集生成、事务转换映射、频繁序列挖掘等几个步骤,下面通过例子予以详细说明。
(1)事务数据库排序
对原始的事务数据库 T T T(表8-13),以顾客 id 为主键,交易时间为次键进行排序,并将其转换成以顾客 id 和购物序列 S S S 组成的序列数据库 T S T_S TS(表8-14)。
(2)频繁项集生成
找出所有的频繁项集,并分别用一个正整数表示。在表8-14所示的序列数据库 T S T_S TS 中, { 30 } , { 40 } , { 70 } , { 40 , 70 } \{30\},\{40\},\{70\},\{40,70\} {30},{40},{70},{40,70} 和 { 90 } \{90\} {90} 都是频繁项集。为方便计算机处理,频繁项集通常被映射为一个连续正整数的集合 (表8-15)。
(3)序列转换映射
将序列数据库 T S T_S TS 中每个顾客购物序列的每一个元素用它所包含的频繁项集的集合来表示,再将购物序列中的每个商品编号用表8-15的正整数代替,得到转换映射后的序列数据库 T N T_N TN (表8-16)。值得注意的是,元素 { 40 , 60 , 70 } \{40,60,70\} {40,60,70} 所包含的频繁项集为 { 40 } , { 70 } \{40\},\{70\} {40},{70} 和 { 40 , 70 } \{40,70\} {40,70},因此,它就被转换为一个频繁项集的集合 { { 40 } , { 70 } , { 40 , 70 } } \{\{40\},\{70\},\{40,70\}\} {{40},{70},{40,70}}。
(4)频繁序列挖掘
在映射后的序列数据库 T N T_N TN 中挖掘出所有序列模式:首先得到候选频繁1-序列模式集 C S 1 CS_1 CS1,扫描序列数据库 T N T_N TN,从 C S 1 CS_1 CS1 中删除支持度低于最小支持 M i n S MinS MinS 的序列,得到频繁1-序列模式集 F S 1 FS_1 FS1。然后循环由频繁k-序列集 F S k FS_k FSk,生成候选频繁 (k+1)-序列集 C S k + 1 CS_{k+1} CSk+1,再利用定理8-5对 C S k + 1 CS_{k+1} CSk+1 进行剪枝,并从 C S k + 1 CS_{k+1} CSk+1 中删除支持度低于最小支持度 M i n S MinS MinS 的序列,得到频繁 (k+1)-序列集 F S k + 1 FS_{k+1} FSk+1,直到 F S k + 1 = ∅ FS_{k+1}=\varnothing FSk+1=∅ 为止。
例 8-18 设有频繁3-序列集 F S 3 = { < { 1 } , { 2 } , { 3 } > , < { 1 } , { 2 } , { 4 } > , < { 1 } , { 3 } , { 4 } > , < { 1 } , { 3 } , { 5 } > , < { 2 } , { 3 } , { 4 } > } FS_3=\{<\{1\},\{2\},\{3\}>, <\{1\},\{2\},\{4\}>, <\{1\},\{3\},\{4\}>,<\{1\},\{3\},\{5\}>,<\{2\},\{3\},\{4\}>\} FS3={<{1},{2},{3}>,<{1},{2},{4}>,<{1},{3},{4}>,<{1},{3},{5}>,<{2},{3},{4}>}
解:先利用频繁3-序列集
F
S
3
FS_3
FS3 连接生成候选4-序列集,即将序列
<
{
1
}
,
{
2
}
,
{
3
}
>
<\{1\},\{2\},\{3\}>
<{1},{2},{3}> 和
<
{
1
}
,
{
2
}
,
{
4
}
>
<\{1\},\{2\},\{4\}>
<{1},{2},{4}> 连接生成
<
{
1
}
,
{
2
}
,
{
3
}
,
{
4
}
>
<\{1\},\{2\},\{3\},\{4\}>
<{1},{2},{3},{4}> 和
<
{
1
}
,
{
2
}
,
{
4
}
,
{
3
}
>
<\{1\},\{2\},\{4\},\{3\}>
<{1},{2},{4},{3}>,将序列
<
{
1
}
,
{
3
}
,
{
4
}
>
<\{1\},\{3\},\{4\}>
<{1},{3},{4}> 和
<
{
1
}
,
{
3
}
,
{
5
}
>
<\{1\},\{3\},\{5\}>
<{1},{3},{5}> 连接生成
<
{
1
}
,
{
3
}
,
{
4
}
,
{
5
}
>
<\{1\},\{3\},\{4\},\{5\}>
<{1},{3},{4},{5}> 和
<
{
1
}
,
{
3
}
,
{
5
}
,
{
4
}
>
<\{1\},\{3\},\{5\},\{4\}>
<{1},{3},{5},{4}>。
因此,得到候选4-序列集
C
S
4
=
{
<
{
1
}
,
{
2
}
,
{
3
}
,
{
4
}
>
,
<
{
1
}
,
{
2
}
,
{
4
}
,
{
3
}
>
,
<
{
1
}
,
{
3
}
,
{
4
}
,
{
5
}
>
,
<
{
1
}
,
{
3
}
,
{
5
}
,
{
4
}
>
}
CS_4=\{<\{1\},\{2\},\{3\},\{4\}>, <\{1\},\{2\},\{4\},\{3\}>, <\{1\},\{3\},\{4\},\{5\}>, <\{1\},\{3\},\{5\},\{4\}>\}
CS4={<{1},{2},{3},{4}>,<{1},{2},{4},{3}>,<{1},{3},{4},{5}>,<{1},{3},{5},{4}>}
根据频繁序列的性质(定理8-5),对
C
4
C_4
C4 进行剪枝操作。
首先将4-序列
<
{
1
}
,
{
2
}
,
{
4
}
,
{
3
}
>
<\{1\},\{2\},\{4\},\{3\}>
<{1},{2},{4},{3}> 从
C
4
C_4
C4 中删除,因为它存在一个3-序列
<
{
2
}
,
{
4
}
,
{
3
}
>
<\{2\},\{4\},\{3\}>
<{2},{4},{3}> 不在
F
S
3
FS_3
FS3 之中,即它不会是频繁4-序列。
类似地可以将
<
{
1
}
,
{
3
}
,
{
4
}
,
{
5
}
>
,
<
{
1
}
,
{
3
}
,
{
5
}
,
{
4
}
>
<\{1\},\{3\},\{4\},\{5\}>, <\{1\},\{3\},\{5\},\{4\}>
<{1},{3},{4},{5}>,<{1},{3},{5},{4}> 从
C
S
4
CS_4
CS4 中删除。
因此,得到最终的候选频繁4-序列集
C
S
4
=
{
<
{
1
}
,
{
2
}
,
{
3
}
,
{
4
}
>
}
CS_4=\{<\{1\},\{2\},\{3\},\{4\}>\}
CS4={<{1},{2},{3},{4}>}。
例 8-19 设最小支持数为2,对于表8-16转换映射后的序列数据库 T N T_N TN 挖掘出所有的序列模式。
解:在序列数据库的转换和映射过程中已得到频繁1-序列 F S 1 = { < { 1 } > , < { 2 } > , < { 3 } > , < { 4 } > , < { 5 } > } FS_1=\{ <\{1\}>,<\{2\}>,<\{3\}>,<\{4\}>,<\{5\}>\} FS1={<{1}>,<{2}>,<{3}>,<{4}>,<{5}>}
利用频繁1-序列集 F S 1 FS_1 FS1 生成候选频繁2-序列集
C S 2 = { < { 1 } , { 2 } > , < { 2 } , { 1 } > , < { 1 } , { 3 } > , < { 3 } , { 1 } > , < { 1 } , { 4 } > , < { 4 } , { 1 } > , < { 1 } , { 5 } > , < { 5 } , { 1 } > , < { 2 } , { 3 } > , < { 3 } , { 2 } > , < { 2 } , { 4 } > , < { 4 } , { 2 } > , < { 2 } , { 5 } > , < { 5 } , { 2 } > , < { 3 } , { 4 } > , < { 4 } , { 3 } > , < { 3 } , { 5 } > , < { 5 } , { 3 } > , < { 4 } , { 5 } > , < { 5 } , { 4 } > } CS_2=\{<\{1\},\{2\}>,<\{2\}, \{1\}>,<\{1\},\{3\}>,<\{3\},\{1\}>,<\{1\},\{4\}>, <\{4\},\{1\}>,<\{1\},\{5\}>,<\{5\},\{1\}>,<\{2\},\{3\}>,<\{3\},\{2\}>,<\{2\},\{4\}>, <\{4\},\{2\}>,<\{2\},\{5\}>,<\{5\},\{2\}>,<\{3\},\{4\}>,<\{4\},\{3\}>,<\{3\},\{5\}>, <\{5\},\{3\}>,<\{4\},\{5\}>,<\{5\},\{4\}>\} CS2={<{1},{2}>,<{2},{1}>,<{1},{3}>,<{3},{1}>,<{1},{4}>,<{4},{1}>,<{1},{5}>,<{5},{1}>,<{2},{3}>,<{3},{2}>,<{2},{4}>,<{4},{2}>,<{2},{5}>,<{5},{2}>,<{3},{4}>,<{4},{3}>,<{3},{5}>,<{5},{3}>,<{4},{5}>,<{5},{4}>},共有20个候选频繁2-序列。
扫描序列数据库 T N T_N TN 并对候选频繁2-序列计算支持数,如 < { 1 } , { 2 } > <\{1\},\{2\}> <{1},{2}> 的支持数为2, < { 2 } , { 1 } > <\{2\}, \{1\}> <{2},{1}> 的支持数为0, < { 1 } , { 5 } > <\{1\},\{5\}> <{1},{5}> 支持数为3等,取支持数不低于2的序列组成频繁2-序列集
F S 2 = { < { 1 } , { 2 } > , < { 1 } , { 3 } > , < { 1 } , { 4 } > , < { 1 } , { 5 } > , < { 2 } , { 3 } > , < { 2 } , { 4 } > , < { 2 } , { 5 } > , < { 3 } , { 4 } > , < { 3 } , { 5 } > , < { 4 } , { 5 } > } FS_ 2=\{<\{1\},\{2\}>, <\{1\},\{3\}>, <\{1\},\{4\}>, <\{1\},\{5\}>, <\{2\},\{3\}>, <\{2\},\{4\}>, <\{2\},\{5\}>, <\{3\},\{4\}>, <\{3\},\{5\}>, <\{4\},\{5\}>\} FS2={<{1},{2}>,<{1},{3}>,<{1},{4}>,<{1},{5}>,<{2},{3}>,<{2},{4}>,<{2},{5}>,<{3},{4}>,<{3},{5}>,<{4},{5}>}
对频繁2-序列集 F S 2 FS_2 FS2 进行自身连接并剪枝后得到候选3-序列集
C S 3 = { < { 1 } , { 2 } , { 3 } > , < { 1 } , { 2 } , { 4 } > , < { 1 } , { 2 } , { 5 } > , < { 1 } , { 3 } , { 4 } > , < { 1 } , { 3 } , { 5 } > , < { 1 } , { 4 } , { 5 } > , < { 2 } , { 3 } , { 4 } > , < { 2 } , { 3 } , { 5 } > , < { 2 } , { 4 } , { 5 } > , < { 3 } , { 4 } , { 5 } > } CS_3=\{<\{1\},\{2\},\{3\}>, <\{1\},\{2\},\{4\}>, <\{1\},\{2\},\{5\}>, <\{1\},\{3\},\{4\}>, <\{1\},\{3\},\{5\}>, <\{1\},\{4\},\{5\}>, <\{2\},\{3\},\{4\}>, <\{2\},\{3\},\{5\}>, <\{2\},\{4\},\{5\}>, <\{3\},\{4\},\{5\}>\} CS3={<{1},{2},{3}>,<{1},{2},{4}>,<{1},{2},{5}>,<{1},{3},{4}>,<{1},{3},{5}>,<{1},{4},{5}>,<{2},{3},{4}>,<{2},{3},{5}>,<{2},{4},{5}>,<{3},{4},{5}>}
说明:频繁2-序列连接生成20个候选频繁3-序列,其中10个候选频繁3-序列被剪枝,如<{1},{3},{2}>被剪枝是因其子序列<{3},{2}>不是频繁2-序列。
对候选频繁3-序列集 C S 3 CS_3 CS3 中每个序列计算支持数,保留支持数不小于2的序列形成频繁3-序列集 F S 3 = { < { 1 } , { 2 } , { 5 } > , < { 1 } , { 3 } , { 5 } > , < { 1 } , { 4 } , { 5 } > } FS_3=\{<\{1\},\{2\},\{5\}>, <\{1\},\{3\},\{5\}>, <\{1\},\{4\},\{5\}>\} FS3={<{1},{2},{5}>,<{1},{3},{5}>,<{1},{4},{5}>}。
由于 F S 3 FS_3 FS3 不能再产生候选频繁4-序列,故最后得到频繁序列模式集
F S = F S 2 ∪ F S 3 = { < { 1 } , { 2 } > , < { 1 } , { 3 } > , < { 1 } , { 4 } > , < { 1 } , { 5 } > , < { 2 } , { 3 } > , < { 2 } , { 4 } > , < { 2 } , { 5 } > , < { 3 } , { 4 } > , < { 3 } , { 5 } > , < { 4 } , { 5 } > , < { 1 } , { 2 } , { 5 } > , < { 1 } , { 3 } , { 5 } > } FS=FS_2\cup FS_3=\{<\{1\},\{2\}>, <\{1\},\{3\}>, <\{1\},\{4\}>, <\{1\},\{5\}>, <\{2\},\{3\}>, <\{2\},\{4\}>, <\{2\},\{5\}>, <\{3\},\{4\}>, <\{3\},\{5\}>, <\{4\},\{5\}>, <\{1\},\{2\},\{5\}>, <\{1\},\{3\},\{5\}>\} FS=FS2∪FS3={<{1},{2}>,<{1},{3}>,<{1},{4}>,<{1},{5}>,<{2},{3}>,<{2},{4}>,<{2},{5}>,<{3},{4}>,<{3},{5}>,<{4},{5}>,<{1},{2},{5}>,<{1},{3},{5}>}
根据需要,将 F S FS FS 中的序列模式转换为真实商品编号的序列模式。比如序列模式 < { 1 } , { 2 } > <\{1\},\{2\}> <{1},{2}> 对应于 < { 30 } , { 40 } > , < { 1 } , { 3 } , { 5 } > <\{30\},\{40\}>, <\{1\},\{3\},\{5\}> <{30},{40}>,<{1},{3},{5}> 对应于 < { 30 } , { 70 } , { 90 } > <\{30\},\{70\},\{90\}> <{30},{70},{90}>,而 < { 1 } , { 4 } , { 5 } > <\{1\},\{4\},\{5\}> <{1},{4},{5}> 对应于 < { 30 } , { 40 , 70 } , { 90 } > <\{30\},\{40,70\},\{90\}> <{30},{40,70},{90}> 等。
六、关联规则其它算法
(一)频繁项集算法优化
1、基于划分的方法
基于划分的方法,把数据库从逻辑上分成几个互不相交的块,每次单独考虑一个分块并对它生成所有的局部频繁项集。然后合并各个块的局部频繁项集,通过测试它们的支持度来生成全局频繁项集。
2、基于hash的方法
基于hash的方法,先构造一个hash函数,然后将扫描到的项目映射到不同的hash桶中,每一个2-项集最多只能放在一个特定的桶中,这样可以对每个桶中的项目进行计数,减少了候选集生成的计算时间。
3、基于抽样的方法
基于抽样的方法,使用数据库的抽样(随机抽取的部分)数据得到一些可能成立的关联规则,然后利用数据库的剩余部分验证这些关联规则是否正确。从而减少数据的分析量,提高算法效率。由于抽样方法有简单随机抽样、系统抽样、分层抽样、整群抽样、多段抽样等多种方法,因此,为了保证抽样数据对全部数据具有充分的代表性,选择恰当的抽样方法很重要。基于抽样的方法最大的优点是能够显著降低扫描数据库所付出的I/O代价,但如果抽样数据选取不当,就有可能引起结果的巨大偏差。
(二)CLOSE算法
CLOSE算法是一种基于概念格(concept lattice)的关联规则挖掘算法。Pasquier等人于1999年利用概念格中概念连接的闭合性,创造性地建立了闭合项集格(closed itemset lattice)理论,并提出挖掘频繁闭合项集(frequent closed itemset)的A-close算法。此后,不少学者在闭合项集格理论指导下,提出了多种新的、CLOSE类型的算法。
1、CLOSET算法
一个基于FP-树的频繁闭项集挖掘算法,它采用了与FP-growth (增长) 算法相同的思想,还采取了许多优化技术来改善挖掘性能,使其性能明显优于A-close算法的早期版本。
2、CHARM算法
CHARM算法采取了3方面的创造性措施,使得CHARM算法具有较好的时空效率,其性能优于A-close和CLOSET算法。
3、CLOSET+算法
CLOSET+也是CLOSE类型的关联规则挖掘算法。
4、FPClose算法
该算法将FP-tree数据结构与数组和其它优化策略相结合而成。
(三)时态关联规则
1、带有一般时态约束的关联规则挖掘
这种研究就是发现关联则有效的时间信息。比如,有学者通过对相同属性的相邻时态关联规则,发现了多数股票在 3 天左右必有上涨或下降的规则。
2、周期性关联规则挖掘
主要是研究有关周期时间区域的划分。比如,把长度为 t 的周期划分为等间隔的时间区域, 分别计算每个时间区域内项目子集的支持度, 并寻求其周期关联规则。
3、趋势性挖掘
主要针对连续型数值, 即对数值曲线模式利用统计时序中的方法进行分析, 以获得属性随时间变化的趋势, 从而制定出长期或短期的预测。
4、时态关联规则模型的建立
由于时态关联规则的挖掘是在带有时间属性的数据上进行的, 因而有关时态数据的表示也需要进行研究, 以便于事件和时态规则模型的建立。但在这方面的深入研究还不多见, 如从理论上对时间的表示及相应的性质进行研究的还很少。
(四)含负项的关联规则挖掘
为了区别,将形如
X
⇒
Y
X\Rightarrow Y
X⇒Y 的规则称为正关联规则。但在实际应用中,我们会发现还存在除此以外的有价值的规则形式,它们反映了完全不同的决策问题。比如,
(1)顾客购买了某些商品,是否一定不购买某些其它商品?
(2)顾客不购买某些商品,是否一定购买某些其它商品?
(3)顾客不购买某些商品,是否一定不购买某些其它商品?
面对这样的决策问题,用传统的关联规则挖掘方法无法得到其对应的蕴含关系或规则,用传统的规则形式也无法回答或表述它们,而它们往往是我们感兴趣的。
为避免混淆,将这种形如 X ⇒ Y ‾ X\Rightarrow \overline Y X⇒Y, X ‾ ⇒ Y \overline X\Rightarrow Y X⇒Y, X ‾ ⇒ Y ‾ \overline X\Rightarrow \overline Y X⇒Y 的关联规则称为负关联规则,其中, X X X 和 Y Y Y 是出现在事务中的项目集合,且将出现在事务中的项目称为正项目(简称正项),而 X ‾ \overline X X, Y ‾ \overline Y Y 是不出现在事务中的项目集合,对应的项目称为负项目(简称负项)。把规则的前件或后件中既包含正项又包含负项,形如 X ‾ ∩ Y ⇒ Z ‾ ∩ W \overline X\cap Y\Rightarrow\overline Z\cap W X∩Y⇒Z∩W 的关联规则称为一般化关联规则。
当然,关联规则的研究方向和研究成果远不止这些。比如, 针对传统的频繁项集 X X X 支持数仅统计了包含 X X X 的事务数,而没有考虑 X X X 中的项在一个事务中对应的数量和项的权重(一个商品在一张购物清单中的数量和单价),因此,人们提出了高效用项集的挖掘问题。
此外,关联规则与其它应用问题或技术的结合也产生出多种不同的关联规则挖掘问题,以及关联规则挖掘方法。比如,与数据仓库、OLAP技术结合产生了多层关联规则和多维关联规则的挖掘问题;与并行计算技术结合又产生并行关联规则挖掘问题;与模糊数学结合就产生了模糊关联规则挖掘方法;针对数据库数据的不断增加变化情况,就产生了关联规则的增量式更新算法等。