EFIM算法

1,041 阅读11分钟

写在前面:该算法

  1. 目的是在HUI-Miner算法的基础上提高效率,关键在于两个新上界:revised sub-tree utility、local utility来压缩高效检索空间。
  2. 并且通过快速效用值计算算法FAC(Fast Utility Counting)来在线性时间内获取上界值和检索空间。
  3. 更进一步,通过HDP(High-utility Database Projection)和HTM(High-utility Transaction Merging)在线性时间内完成对数据库的映射和事务归并。

EFIM: A Fast and Memory Efficient Algorithm for High-Utility Itemset Mining

样例

事务数据库

扩展效用值

高效效用值项集

枚举树

定义

HUI-Miner算法

  1. p(i)p(i):i是项,p(i)是外部效用值,代表着该项对用户的相对重要性,也可以看作是该项的利润

  2. q(i,Tc)q(i, T_c):是内部效用值,也可以看作是该项i的交易数量

  3. u(i,Tc)u(i, T_c):是在某个事务T中的项i所产生的总利润,即 u(i,Tc)=p(i)q(i,Tc)u(i, T_c) = p(i) * q(i, T_c)

  4. u(X,Tc)u(X, T_c):是项集X在某个事务T中所产生总利润和,即 u(X,Tc)=iXu(i,Tc)[X⊈Tcu(X,Tc)=0]u(X, T_c) = \sum_{i \in X}u(i, T_c) \cup[X \not\subseteq T_c \Rightarrow u(X, T_c) = 0]。例如项集 u({a,c},T2)=u(a,T2)+u(c,T2)=5×2+1×6=16u(\{a, c\}, T_2) = u(a, T_2) + u(c, T_2) = 5 \times 2 + 1 \times 6 = 16

  5. g(X)g(X):是包含项集X的事务集,投影映射 g:2t2D,g(X)={tDiX,it}g: 2^t \rightarrow 2^D, g(X) = \{ t \in D | \forall i \in X, i \in t \},称g(x)为项集 XIX \subseteq I 的支持集

  6. u(X)u(X):找出所有包含项集X的事务集T,求项集X在这些事务T可以产生的总利润和,即 u(X)=Tcg(X)u(X,Tc)u(X) = \sum_{T_c \in g(X)}u(X, T_c)。例如项集 u({a,c})=u({a,c},T1)+u({a,c},T2)+u({a,c},T3)=28u(\{a, c\}) = u(\{a, c\}, T_1) + u(\{a, c\}, T_2) + u(\{a, c\}, T_3) = 28

  7. tu(Tc)tu(T_c):求某个事务T内所有项集X的总利润和,即 tu(Tc)=XTcu(X,Tc)tu(T_c) = \sum_{X \subseteq T_c}u(X, T_c)

  8. twu(X)twu(X):求包含项集X的所有事务T的总利润和,即 twu(X)=XTTcTu(X,Tc)twu(X) = \sum_{X \subseteq T \cup T_c \subseteq T}u(X, T_c)

    定理:

    twu(X)u(X)twu(X)u(Y)[XY]twu(X) \ge u(X)、twu(X) \ge u(Y)[\forall X \subset Y](TWU具备反单调性)故当twu(X) < minutil,则直接忽略项集X的超集Y


    证明:

    twu(X)=Tcg(X)tu(Tc)=Tcg(X)xTcu(x,Tc)twu(X) = \sum_{T_c \in g(X)}tu(T_c) = \sum_{T_c \in g(X)}\sum_{x \in T_c}u(x, T_c)

    u(X)=Tcg(X)u(X,Tc)=Tcg(X)xXu(x,Tc)u(X) = \sum_{T_c \in g(X)}u(X, T_c) = \sum_{T_c \in g(X)}\sum_{x \in X}u(x, T_c)

    这两个推导式看起来好像一样,但在最终 “x” 的所属范畴确是这两者间的最大差别,显然 X 是 Tc 的子集,自然上式成立

    当 项集X 是 项集Y 的子集时,X 内的项数量小于 Y,但 twu(X) 计算的是那些包含 整个项集X 的事务项的总效用值,随着项集X的规模扩大,能够符合twu计算条件的 事务项 就越少,故有 twu(X) >= twu(Y) >= u(Y)

  9. re(X,Tc)re(X, T_c):是在各事务项中 大于 项集X的所有项的效用值之和,即 iTcixxXu(i,Tc)\sum_{i \in T_c \land i \succ x \land \forall x \in X}u(i, T_c)

  10. 效用表(Utility-list)构成:(Tc,iutil[u(X,Tc)],rutil[re(X,Tc)])(T_c, iutil[u(X, T_c)], rutil[re(X, T_c)])

  11. 剩余效用边界(remaining utility upper-bound):这个概念是区别于“两步走”算法的关键之处,因为这个边界值比 TWU 是更为紧凑,能够裁剪更精细。定义为 reu(X)=re(X)+u(X)reu(X) = re(X) + u(X)

    定理:

    如果reu(X)<minutil,则项集X和它的超集都是低效用值项集

    证明:

    设项集X和它的超集Y,事务项T,其中有关系 XYT(YX)(TX)X \subset Y \subseteq T \Rightarrow (Y \setminus X) \subseteq (T \setminus X)当把所有包含项集X的事务项都计算起来,自然可知当 reu(X) < minUtil,那么超集必然也小于,那么

    u(Y,T)=u(X,T)+u(YX,T)=u(X,T)+i(YX)u(i,T)u(Y, T) = u(X, T) + u(Y \setminus X, T) = u(X, T) + \sum_{i \in (Y \setminus X)}u(i, T) u(X,T)+i(TX)u(i,T)=u(X,T)+re(X,T)=reu(X,T)\le u(X, T) + \sum_{i (\in T \setminus X)}u(i, T) = u(X, T) + re(X, T) = reu(X, T)

    Ps. 结合上面的定义9也可以看出来,其实 Y\X 就是所有大于项(集)X的项组成的剩余项集

EFI-Ming算法

  1. E(α)E(\alpha):表示根据深度优先搜索遍历所有项,得到大于 α\alpha 的所有项集,有E(α)={zzIzx,xα}E(\alpha) = \{ z | z \in I \land z \succ x, \forall x \in \alpha \},如Fig.1,设 α={c}\alpha = \{c\},则 E(α)={a,b,d}E(\alpha) = \{a, b, d\}

  2. 扩展项集(Extension of an itemset):设项集 ZZ 是项集α\alpha的扩展,若 Z=αWZ = \alpha \cup WW2E(α)W \in 2^{E(\alpha)},则有WW \ne \varnothingZZ 是项集α\alpha的子树和枚举树

  3. 一元扩展项集(Single-item extension of an itemset):设项集Z是项集α\alpha的一元扩展,若Z=αWZ = \alpha \cup W,则ZZ是项集α\alpha的子树和枚举树

    Ps.例子:假设α={d},E(α)={e,f,g}\alpha = \{ d \}, E(\alpha) = \{ e, f, g \},那么一元扩展项集就是 {d,e}{d,f}{d,g}\{d, e\}、\{d, f\}、\{d, g\},多元扩展集为 {d,e,f}{d,f,g}{d,e,f,g}\{d, e, f\}、\{d, f, g\}、\{d, e, f, g\}

  4. 映射事务(Projected transaction):由 α\alpha-T={iiTiE(α)}T = \{ i | i \in T \land i \in E(\alpha) \}表示,其中T是事务项,α\alpha是项集,E(α)E(\alpha)是扩展项集(处理一行事务项,也就是该事务项排在项集α的之后的项组成的新的事务项)

  5. 映射数据库(Projected database):由 α\alpha-D={αD = \{ \alpha-TTDαT | T \in D \land \alpha-T}T \ne \varnothing \}表示,其中D是数据库,α\alpha是项集,T是事务表(处理多行事务项,也就是对整个事务表进行映射事务处理,组成一个新的数据库)

    Ps. 当某交易项不包含指定的项集α,那么在映射过程中会删除这个交易项

  6. 相同的事务(Indentical transaction):当 TaTbT_a、T_b 两个交易项的所有的项元素都相同时,我们认为事务项TaT_a和事务TbT_b是相同的事务

  7. 归并事务(Transaction merging):当在数据库D中存在相同的事务项Tr1Tr2TrmT_{r1}、T_{r2} \dots T_{rm}时,我们设置一个新的事务TMT_M来替代这些,且每项 iTMi \in T_M 都被定义为 q(i,TM)=k=1mq(i,Trk)q(i, T_M) = \sum_{k = 1 \dots m}q(i, T_{rk})

  8. 映射归并交易(Projected transaction merging):在映射数据库 α\alpha-DD 中,将所有重复的事务项 Tr1Tr2TrmT_{r1}、T_{r2}、\dots T_{rm}用一个新的事务项 TMT_M 来替代,且每项 iTMi \in T_M 都被定义为 q(i,TM)=k=1mq(i,Trk)q(i, T_M) = \sum_{k = 1 \dots m}q(i, T_{rk})

  9. 交易项总顺序(Total order on transactions):我们用 T\succ_T 来表示,有以下四种情况则判定成立:

    • TbT_b 的TID全都大于 TaT_a 的TID,则TbTaT_b \succ T_a
    • k>mk > mimx=jkxi_{m-x} = j_{k-x} 且对 xZ,0x<m\forall x \in Z, 0 \le x < m,则 TbTTaT_b \succ_T T_a
    • x\exists x0x<y<min(m,k)0 \le x < y < min(m, k),有 jkximyj_{k-x} \succ i_{m-y}imy=jkyi_{m-y} = j_{k-y} 成立,则 TbTTaT_b \succ_T T_a
    • 其它情况是 TaTTbT_a \succ_T T_b
  10. 第一阶梯项(Primary items):设存在项集 α\alpha,那么有 Primary(α)={zzE(α)su(α,z)minuti}Primary(\alpha) = \{z|z \in E(\alpha) \land su(\alpha, z) \ge minuti\}

  11. 第二阶梯项(Secondary items):设存在项集 α\alpha,那么有 Secondary(α)={zzE(α)lu(α,z)minutil}Secondary(\alpha) = \{z | z \in E(\alpha) \land lu(\alpha, z) \ge minutil \}

  12. 修正子树效用值(Redefined Sub-tree utility):设存在项集 α\alpha 和项 zz,重新定义的 su(α,z)=Tg(α{z})[u(α,T)+u(z,T)+iTiE(α{z}iSecondary(α))u(i,T)]su(\alpha, z) = \sum_{T \in g(\alpha \cup \{z\})}[u(\alpha, T) + u(z, T) + \sum_{i \in T \land i \in E(\alpha \cup \{z\} \land i \in Secondary(\alpha))}u(i, T)]

    Ps.因为有 lu(α,z)su(α,z)lu(\alpha, z) \ge su(\alpha, z),所以 Primary(α)Secondary(α)Primary(\alpha) \subseteq Secondary(\alpha),意味着只需检索以 Primary(α)Primary(\alpha) 中的子项集与 α\alpha 的并集为根结点的子树,且其它项集不做考虑。例如项 α = {a},Primary(α) = {c, e},Secondary(α) = {c, d, e},这意味着对于项集 α,我们只要检索以 α∪{c} 和 α∪{e} 为根节点的子枚举树,并且在这两个枚举树中,除了项c、d、e,其它的项都不考虑

四个关键点

  1. 需要设计一种单一算法来避免因产生候选项集问题-Utility List
  2. 通过使用“模式增长方法”来避免多花时间去考虑数据库中那些可能不会出现的模式,而且算法要减少对数据库的扫描-HDP & HTM
  3. 通过设计一个紧凑的上界来缩小检索空间,且这个上限应该比当下算法中通过保留有效上界更紧凑-local utility & revised sub-tree utility
  4. 算法在时间和空间上的操作都要尽可能地简单-FUC

HDP(High-utility Database Projection)

采用该技术的目的是通过某个项来投影出更小的数据库,达到减少扫描量的效果

原理:

当一个项集α\alpha出现在深度优先遍历结果中,存在项集xE(α)x \notin E(\alpha)时,通过扫描数据库在α\alpha的子树或效用值上界中,可以不用计算这些项集x的效用值。我们称这种删除后的数据库为投影数据库(projected database),同理还有投影事务(projected transaction)

方法:

  1. 按照“\succ”关系对源数据库的每个交易项目进行升序排序
  2. 每个投影事务由对应的源交易上的偏移指针来表示,也称为伪投影

HTM(High-utility Transaction Merging)

采用该技术的目的通过减小数据库规模来减少对数据库扫描的开销

原理:

交易数据库中常常包含重复的交易信息(Identical transaction),本技术需要找出这些相同的交易信息,然后在梳理它们效用值得过程中只保留一条交易信息

方法:

  1. 找出相同的交易信息(Identical transaction),进行归并处理,用一个新的交易项 TMT_M 来代表这些重复的
  2. 对映射数据库做同样的处理,称为映射归并交易(Projected transaction merging)
  3. 最后得出交易总订单(Total order on transaction),这之间的交易项集是按序从小到大排列

Ps.以上两个技术是配套使用的:“归并 -> 投影 -> 归并 -> 投影 -> ...”,一边通过归并使得共同前缀不断增长(上界),一边投影事务表(缩小,因为有共同前缀,那么前缀就可以暂时不考虑)

排序T\succ_T

其实在每次投影开始前,都要对交易表进行交易项排序,这样是在一定程度上提高投影和归并效率,不必重复扫描数据项

排序判定有以下四个标准,我们设有交易项 Ta={i1,,im},Tb={j1,,jk}T_a = \{i_1, \cdots, i_m\}, T_b = \{j_1, \cdots, j_k\}

  • m=k,x[0,mk]m = k, \forall x \in [0, m|k],有 ix=jxi_x = j_x,但是 b > a,则 TbTTaT_b \succ_T T_a(翻译一下就是从后往前依次对比两个交易项的各项元素,发现两个交易项一模一样,差别就是交易项b的角标数字大于交易项a,所以交易项b大于交易项a)

  • x[0,m)\forall x \in [0, m),若 k>m,imx=jkxk > m, i_{m-x} = j_{k - x},则 TbTTaT_b \succ_T T_a(翻译一下就是从后往前依次对比两个交易项的各项元素都相等,但交易项a没交易项b长,所以交易项b大于交易项a)

  • x[x,min(m,k)),y(x,min(m,k))\forall x \in [x, min(m, k)), y \in (x, min(m, k)),有 imy=jky,jkximxi_{m-y} = j_{k-y}, j_{k-x} \succ i_{m-x},则 TbTTaT_b \succ_T T_a(翻译一下就是从后往前依次对比两个交易项的各项元素,发现比到一个位置n这两个项元素有 jninj_n \succ i_n,所以交易项b大于交易项a,类似于比较字符串字串大小一样)

  • 其它情况统统设定为 TaTTbT_a \succ_T T_b


以下两个概念是定义了新的上边界值,不同于 Remain Utility 和 Transaction Weighted Utilization 这两个上边界值,他们分别是在搜索枚举树中的项目集α的子树中定义的,时刻动态变化的上界值,而不是像twu这样的定值,所以新提出的上界值会更紧凑,对检索空间的有效删减程度更大

Local utility

定义:

设项集 α\alpha 和项 zE(α)z \in E(\alpha),有 lu(α,z)=Tg(α{z})[u(α,T)+re(α,T)]lu(\alpha, z) = \sum_{T \in g(\alpha \cup \{z\})}[u(\alpha, T) + re(\alpha, T)],例如:设 α={a}\alpha = \{a\},则有 lu(α,c)=(8+27+30),lu(α,d)=30,lu(α,e)=57lu(\alpha, c) = (8+27+30), lu(\alpha, d) = 30, lu(\alpha, e) = 57(通过观察Table 1,你会发现 lu(a,c)=TU(T1)+TU(T2)+TU(T3)lu(a, c) = TU(T_1) + TU(T_2) + TU(T_3),当然这只适用于排在第一位的项,比如对于项 {c} 就不是这样的了,有没有对 {c} 计算更简便的方法,利用前面已经算出来的值?)

定理:

设存在项集 α\alpha 和项 zE(α)z \in E(\alpha),且有 zZz \in Z,其中 ZZα\alpha 的扩展集,对于 lu(α,z)u(Z)lu(\alpha, z) \ge u(Z) 仍然成立,故当 lu(α,z)<minutillu(\alpha, z) < minutil 时,在项集 α\alpha 的扩展项集中所有包含项 z 的项集都是低效用值,简而言之就是在遍历 α\alpha 的子树中,可以忽略掉项 z 和项集 α 为根节点的子树

证明:

设 项集 Y = α ∪ {z},项集Z 的效用值定义为 u(Z)=Tcg(Z)u(Z,Tc)=Tcg(Z)[u(α,Tc)+u(Zα,Tc)]u(Z) = \sum_{T_c \in g(Z)}u(Z, T_c) = \sum_{T_c \in g(Z)}[u(\alpha, T_c) + u(Z \setminus \alpha, T_c)],那么项集α 的局部效用值(local utility)就为 lu(α,z)=Tcg(Y)[u(α,Tc)+re(α,Tc)]lu(\alpha, z) = \sum_{T_c \in g(Y)}[u(\alpha, T_c) + re(\alpha, T_c)](这个公式是不是很像 reu = iutils + rutils???)。原因在于 g(Z)g(Y)g(Z) \subseteq g(Y)ZYE(α)Z \setminus Y \subseteq E(\alpha),故必有 u(Zα,Tc)re(α,Tc)u(Z)lu(α,z)u(Z \setminus \alpha, T_c) \le re(\alpha, T_c)、u(Z) \le lu(\alpha, z)

Ps. 其实这部分证明只要对着上图中的枚举树(图Fig. 1.),把上述公式套进去就很容易看出来

Sub-tree utility

定义:

设有一个项集 α\alpha 且有一个项 zz 可以对 α\alpha 通过深度优先遍历进行扩展,其中 zE(α)z \in E(\alpha),那么有 su(α,z)=Tg(α{z})[u(α,T)+u(z,T)+iTiE(α{z})u(i,T)]su(\alpha, z) = \sum_{T \in g(\alpha \cup \{z\})}[u(\alpha, T) + u(z, T) + \sum_{i \in T \land i \in E(\alpha \cup \{z\})}u(i, T)],例如:设 α = {a},则有

su(\alpha, c) = \\ [u(a, T_1) + u(c, T_1) + u(d, T_1)] + \\ [u(a, T_2) + u(c, T_2) + u(e, T_2) + u(g, T_2)] + \\ [u(a, T_3) + u(c, T_3) + u(d, T_3) + u(e, T_3) + u(f, T_3)] \\ = 61

su(α,d)=25,su(α,e)=34su(\alpha, d) = 25, su(\alpha, e) = 34

定理:

1.设存在项集 α\alpha 和项 zE(α)z \in E(\alpha),对于 su(α,z)u(α{z})su(\alpha, z) \ge u(\alpha \cup \{z\}) 仍然成立,并且有 su(α,z)ZZα{z}su(\alpha, z) \ge Z \land Z \subseteq \alpha \cup \{z\},故当 su(α,z)<minutilsu(\alpha, z) < minutil 时,在一元项集 α{z}\alpha \cup \{z\} 和它的扩展集都是低效用值,简而言之可以剪去枚举树中的 α{z}\alpha \cup \{z\} 子树

2.设存在项集 αY=α{z}\alpha、Y = \alpha \cup \{z\} 和项 zz,则存在不等式 twu(Y)lu(α,z)reu(Y)=su(α,z)twu(Y) \ge lu(\alpha, z) \ge reu(Y) = su(\alpha, z)

证明:

1.设项集 Y = α ∪ {z},那么

u(Y)=Tcg(Y)u(Y,Tc)su(α,z)=Tcg(Y)[u(α,Tc)+u(z,Tc)+iTciE(α{z})u(i,Tc)]=Tcg(Y)u(Y,Tc)+Tcg(Y)iTE(α{z})u(i,Tc)Tcg(Y)u(Y,Tc)=u(Y)u(Y) = \sum_{T_c \in g(Y)}u(Y, T_c),\\ su(\alpha, z) = \sum_{T_c \in g(Y)}[u(\alpha, T_c) + u(z, T_c) + \sum_{i \in T_c \land i \in E(\alpha \cup \{z\})}u(i, T_c)] \\ = \sum_{T_c \in g(Y)}u(Y, T_c) + \sum_{T_c \in g(Y)}\sum_{i \in T \land \in E(\alpha \cup \{z\})}u(i, T_c) \\ \ge \sum_{T_c \in g(Y)}u(Y, T_c) = u(Y)

2.设项集Z是项集Y的扩展,那么 u(Z)=Tcg(Z)u(Y,Tc)+Tcg(Z)u(ZY,Tc)u(Z) = \sum_{T_c \in g(Z)}u(Y, T_c) + \sum_{T_c \in g(Z)}u(Z \setminus Y, T_c),因为有 g(Z)g(Y),ZYE(α)g(Z) \subseteq g(Y), Z \setminus Y \subseteq E(\alpha),故有 su(α,z)u(Z)su(\alpha, z) \ge u(Z)

下图表示EFI-Ming算法的裁剪优势:

裁剪比较

FUC(Fast Utility Counting)

采用该剪枝技术的目的是通过一种数组结构(utility-bin)在线性时间和空间内计算出上界

定义:

效用箱(utility-bin):设 I 是数据库中的一个项集,效用箱数组 U 的长度为length(I),在数组 U 中每项表示为 U[z](zI)(z \in I),数组内存储的是效用值,效用箱数组通常是用来在O(n)时间复杂度内去高效计算上界值

使用:

  • 利用utility-bin计算twu(X)twu(X),有公式 U[z]=U[z]+tu(T)U[z] = U[z] + tu(T),其中 zTz \in T,在处理完最后一个事务时,对于 iItwu(i)=U[i]\forall i \in I,twu(i) = U[i]

    下图是个示例: 计算效用箱数组

  • 利用utility-bin计算su(α,Tj)su(\alpha, T_j),对于项集 α,

    有公式 U[z]=U[z]+u(α,Tj)+u(z,Tj)+iTjiziSecondary(α)u(i,Tj)U[z] = U[z] + u(\alpha, T_j) + u(z, T_j) + \sum_{i \in T_j \land i \succ z \land i \in Secondary(\alpha)}u(i, T_j),其中 zTjE(α)z \in T_j \land E(\alpha),在处理完最后一个事务时,对于 iE(α),U[i]=su(α,i)\forall i \in E(\alpha), U[i] = su(\alpha, i)

  • 利用utility-bin计算lu(α,Tj)lu(\alpha, T_j),对于项集 α,有公式 U[z]=U[z]+u(α,Tj)+re(α,Tj)U[z] = U[z] + u(\alpha, T_j) + re(\alpha, T_j),其中 zTjE(α)z \in T_j \land E(\alpha),在处理完最后一个事务时,对于 iE(α),U[i]=lu(α,i)\forall i \in E(\alpha), U[i] = lu(\alpha, i)

关键算法实现

EFIM算法实现

检索空间剪枝伪代码


个人总结

花了很长时间去研究这个算法,不得不说很多地方设计得很精彩,例如使用utility-bin来使得twu的计算控制在线性范畴内,local utility和sub-tree utility能得出更紧凑的上界。思路可以认为是先构造一元项的枚举树,这里是第一次缩减检索空间;然后围绕枚举树,开始对事务表进行操作;通过检查出的共同前缀,来进进一步对枚举树进行删减,这是第二次缩减检索空间;利用共同前缀,对项e进行一个个扩展(增长模式法),留下符合的项集并输出,删除不符合条件的;重复进行以上过程最终枚举树无法延伸即可结束。在这个过程中还有各种参数的转换、留存,详情可见代码。


参考

  1. EFIM算法演示教程-www.philippe-fournier-viger.com/spmf/EFIM.p…
  2. EFIM: A Fast and Memory Efficient Algorithm for High-Utility Itemset Mining-philippe-fournier-viger.com/EFIM_JOURNA… KAIS 2016.pdf
  3. EFIM原作的ppt-www.philippe-fournier-viger.com/EFIM_and_EF…