Top-k高效用项集挖掘_学习笔记(二) TKU

前言

本篇博客出于学习交流目的,主要是用来记录自己学习后的理解,过程中遇到的问题和心路历程,方便之后回顾。过程中可能引用其他大牛的博客,文末会给出相应链接,侵删!

REMARK:本人菜鸟一枚,如有理解错误还望大家能够指出,相互交流。也是第一次以博客的形式记录,文笔烂到自己都看不下去,哈哈哈


这篇学习笔记关于一种高效Top-k的频繁效用项集挖掘算法。
参考文献:Efficient Algorithms for Mining Top-K High Utility Itemsets

本篇博客介绍论文中的第一种 two-phase算法TKU,一些必要的基础概念和定义在Top-k高效用项集挖掘学习笔记(一) 基础概念中给出,另一种 one-phase 算法在 Top-k高效用项集挖掘学习笔记(三) TKO 中详细记录,请手动跳转。

正文

TKU T K U (mining Top-k Utility itemsets)算法,下面先介绍基础算法 TKUBase T K U B a s e ,然后再介绍 TKU T K U 算法, TKU T K U 算法实在 TKUBase T K U B a s e 基础上加了一些优化策略(优化策略:PE、NU、MD、MC、SE )。

TKUBase T K U B a s e ——基础算法

TKUBase T K U B a s e 作为 UPGrowth U P − G r o w t h 算法的一种扩展,依然采用了 UPTree U P − T r e e 结构。算法包括三部分:A、 UPTree U P − T r e e 的构建;B、生成潜在Top-k 高效用项集potential top-k high utility itemsets (PKHUIs) ;C、从PKHUIs中识别Top-k 高效用项集(Top-k HUIs);


A、UP-Tree 的构建

UP-Tree的每个节点 N N 都有五个要素: 节点名N.name;节点支持数 N.count N . c o u n t ; 节点效用值 N.nu N . n u
节点的父节点指针;指向具有和节点同样 item name i t e m   n a m e 的节点指针 N.hlink N . h l i n k

Header table用来促进UP-Tree的遍历,包括项名 item name i t e m   n a m e ,评估效用值 estimated utility value e s t i m a t e d   u t i l i t y   v a l u e ,链接指针link三个部分。链接指针指向树中对应 item name i t e m   n a m e 的第一个节点。


还是看原文的例子,我们可以得到如上图所示的Header tableUP-Tree,先看个结构,具体数值下面再说明。

构建UP-Tree我们需要扫描两次原始数据集,第一次计算每个item的TWU值,依原文的例子我们可以得到如下表所示:

然后,按降序建Header table就得到FIg.1左边那个图例了。第二次扫描数据集,交易数据会重新组织,并插入UP-Tree中。

具体构建步骤,首先创建根节点R,交易记录中的item按TWU值进行降序排列。变化后的交易记录被称为 reorganized transaction r e o r g a n i z e d   t r a n s a c t i o n Tr T r , ),对应的效用值称为 Reorganized Transaction Utility R e o r g a n i z e d   T r a n s a c t i o n   U t i l i t y ( RTU ),RTU( Tr T r , ) 。把遍历每个重构后的交易 Tr={I1,I2,,IM}(IjI,1jM) T r , = { I 1 , I 2 , ⋯ , I M } ( I j ∈ I ∗ , 1 ≤ j ≤ M ) 的方法称为 Insert_Reorganized_Transaction(N,Ij) I n s e r t _ R e o r g a n i z e d _ T r a n s a c t i o n ( N , I j ) 并运用 Discarding_Global_Node_utilities(DGN) D i s c a r d i n g _ G l o b a l _ N o d e _ u t i l i t i e s ( D G N ) 策略将其插入UP-Tree(来自第25篇参考文献)。

Insert_Reorganized_Transaction(N,Ij) I n s e r t _ R e o r g a n i z e d _ T r a n s a c t i o n ( N , I j ) 主要步骤如下图:

输入是节点 N Tr T r , 中的项 Ij(IjTr,1jM) I j ( I j ∈ T r , , 1 ≤ j ≤ M )
Step1.如果节点有孩子的item name 与 Ij I j 的一致,那么子节点 ChN C h N 的支持数 ChN.count C h N . c o u n t 加1;否则新建子节点,并将其支持数 ChN.count C h N . c o u n t 置为1,并设效用值为0;
Step2.更新子节点的效用值,用公式 ChN.nu+RTU(T,r)Mi=j+1EU(Ii,T,r) C h N . n u + R T U ( T r , ) − ∑ i = j + 1 M E U ( I i , T r , ) 计算,其中, IjT,r,1jM I j ∈ T r , , 1 ≤ j ≤ M ,换句话说就是算到目前节点的效用值累积和, RTU(T,r)=TU(Tr) R T U ( T r , ) = T U ( T r )
Step3.进入下一个item的插入,调用 Insert_Reorganized_Transaction(ChN,Ij+1) I n s e r t _ R e o r g a n i z e d _ T r a n s a c t i o n ( C h N , I j + 1 )

abs_min_util=0 a b s _ m i n _ u t i l = 0 时,构建得到的树机构如FIg.1右侧所示。

B、生成潜在Top-k 高效用项集potential top-k high utility itemsets (PKHUIs)

这里引入一个边界最小效用阈值,记作 min_utilBorder m i n _ u t i l B o r d e r ,初始时是 0 0 ,随着PKHUIs的生成动态更新;
引理1.给定一组项集P=X1,X2,XM Mk M ≥ k Xi X i 表示 P P 中的第i个项集,对所有 j j 大于i的情况下有 EU(Xi)EU(Xj)>0 E U ( X i ) ≥ E U ( X j ) > 0 ;如果存在 EU(γ)<EU(Xk) E U ( γ ) < E U ( X k ) ,即比第k个效用值小,那 γ γ 一定不是top-k。

引理2.给定一组项集 P=X1,X2,XM P = ⟨ X 1 , X 2 , ⋯ X M ⟩ Mk M ≥ k Xi X i 表示 P P 中的第i个项集,对所有 j j 大于i的情况下有 EU(Xi)EU(Xj)>0 E U ( X i ) ≥ E U ( X j ) > 0 ;如果有 δp=EU(Xk) δ p = E U ( X k ) ,那么 fHUI(D,δ)fHUI(D,δp) f H U I ( D , δ ∗ ) ⊆ f H U I ( D , δ p ) ;根据定义11, δ δ ∗ 是当前|KH|中最大的第k个效用值,而 δp δ p P中最大的第k个效用值, δδp δ ∗ ≥ δ p ,得证。

还是以之前那个数据集为例,假设我们的 k=4 k = 4 abs_min_util=0 a b s _ m i n _ u t i l = 0 P是一项集 {{A}:20,{D}:20,{B}:16,{E}:15,{C}:13,{G}:7,{F}:5} { { A } : 20 , { D } : 20 , { B } : 16 , { E } : 15 , { C } : 13 , { G } : 7 , { F } : 5 } ;则 {C},{G},{F} { C } , { G } , { F } 都不是top-k,于是我们就可以根据上诉引理更新 abs_min_util=min_utilBorder a b s _ m i n _ u t i l = m i n _ u t i l B o r d e r ,这时 abs_min_util a b s _ m i n _ u t i l 被更新成15。

接着考虑PKHUIs的效用值下界

Definition 12. 项的最小效用值 (Minimum utility of an item): miu(I) m i u ( I )

miu(I)=min{EU(I,Tr)|TrD and rg(I)} m i u ( I ) = m i n { E U ( I , T r ) | T r ∈ D   a n d   r ∈ g ( I ) }
就是项在数据集中最小的EU值;

Definition 13. 项集的最小效用值 (Minimum utility of an itemset): MIU(X) M I U ( X )

MIU(X)=(i=1Mmiu(Ii))×SC(X) M I U ( X ) = ( ∑ i = 1 M m i u ( I i ) ) × S C ( X )
为了明确公式含义,我加了大括号,该式就是把项集 X中每个项的最小效用值相加后再乘以项集在交易集中出现的交易数(几条交易包含了该项就是几)。

依旧是之前的那个例子。
miu({B})=min{EU({B},T3,),EU({B},T4,),EU({B},T5,)}=min{4,8,4}=4 m i u ( { B } ) = m i n { E U ( { B } , T 3 , ) , E U ( { B } , T 4 , ) , E U ( { B } , T 5 , ) } = m i n { 4 , 8 , 4 } = 4
MIU({BC})=[min({B})+min({C})]×SC({BC})=[4+1]×3=15 M I U ( { B C } ) = [ m i n ( { B } ) + m i n ( { C } ) ] × S C ( { B C } ) = [ 4 + 1 ] × 3 = 15

引理3.(原文貌似有错误,按个人理解改的,欢迎讨论)给定一组项集 C=X1,X2,XM C = ⟨ X 1 , X 2 , ⋯ X M ⟩ Mk M ≥ k Xi X i 表示 C C 中的第i个项集,并且对所有 j j 大于i的情况下有 MIU(Xi)MIU(Xj)>0 M I U ( X i ) ≥ M I U ( X j ) > 0 ,也 Xi X i 就是第 i i 大的MIU值的项集;
如果存在项集γ使得 TWU(γ)<δMC=min{MIU(Xi|XiC,1ik)} T W U ( γ ) < δ M C = m i n { M I U ( X i | X i ∈ C , 1 ≤ i ≤ k ) } ,那么项集 γ γ 就不是top-k HUI
简单说明,根据最原始定义8我们可以得到 EU(γ)TWU(γ) E U ( γ ) ≤ T W U ( γ ) ,然后我们又已知 0<EU(γ)TWU(γ)<δMCMIU(Xi)EU(Xi) 0 < E U ( γ ) ≤ T W U ( γ ) < δ M C ≤ M I U ( X i ) ≤ E U ( X i ) ,得证。

引理4.(原文貌似有错误,按个人理解改的,欢迎讨论)给定一组项集 C=X1,X2,XM C = ⟨ X 1 , X 2 , ⋯ X M ⟩ Mk M ≥ k Xi X i 表示 C C 中的第i个项集,并且对所有 j j 大于i的情况下有 MIU(Xi)MIU(Xj)>0 M I U ( X i ) ≥ M I U ( X j ) > 0 ,也 Xi X i 就是第 i i 大的MIU值的项集;
如果有δMC=MIU(Xk),那么 fHUI(D,δ)fHUI(D,δMC) f H U I ( D , δ ∗ ) ⊆ f H U I ( D , δ M C ) ;同引理2证明。

引理5.对任意项集 X X ,如果TWU(X)<abs_min_utilδ,那么 X X 及其超集都不是top-k HUIs。因为EU(X)TWU(X),并且对超集 X, X , ,有 EU(X,)TWU(X,)TWU(X) E U ( X , ) ≤ T W U ( X , ) ≤ T W U ( X ) ,得证。

Definition 14. 项的最大效用值(Maximum utility of an item): mau(I) m a u ( I )
这个和定义12类似,只不过求最大,还是之前的例子。原文给了计算结果如下:

但是这个结果好像是有问题的,讲道理 mau({A})=10mau({C})=6mau({D})=12 m a u ( { A } ) = 10 , m a u ( { C } ) = 6 , m a u ( { D } ) = 12 ,欢迎大家一起讨论下,是不是我理解错了。

Definition 15. 项集的最大效用 (Maximum utility of an itemset): MAU(X) M A U ( X )

MAU(X)=(i=1Mmau(Ii))×SC(X) M A U ( X ) = ( ∑ i = 1 M m a u ( I i ) ) × S C ( X )
和定义13类似,就不再解释了。

引理6.对任意项集 X X ,如果MAU(X)<abs_min_utilδ,那么 X X 不是top-k HUIs。因为MAU可以看做是 EUX E U ( X ) 的一个上界。

引理7.对于前面那么多变量,排个序, MIU(X)EU(X)min{MAU(X),TWU(X)} M I U ( X ) ≤ E U ( X ) ≤ m i n { M A U ( X ) , T W U ( X ) }

Definition 16 . 候选 top-k高效用项集(Potential top-k high utility itemset):PKHUI
项集X称为PKHUI就是 TWU(X) T W U ( X ) MAU(X) M A U ( X ) 不小于 min_utilBorder m i n _ u t i l B o r d e r

Property 3.UP-Growth中每个候选项集是由ESTU(X)评估生成,主要利用一下性质:
(1) MIU(X)EU(X)ESTU(X)TWU(X) M I U ( X ) ≤ E U ( X ) ≤ E S T U ( X ) ≤ T W U ( X )
(2) EU(X)min{MAU(X),ESTU(X)} E U ( X ) ≤ m i n { M A U ( X ) , E S T U ( X ) }
(3)如果 ESTU(X)<abs_min_util E S T U ( X ) < a b s _ m i n _ u t i l ,和 X X 相关的项集都是低效用的。

根据前面这么多的定理和特性,具体算法伪代码如下:

就是不断更新min_utilBorder,然后不断判断可能的项集作为PKHUI。具体实现中,原文利用了一些比较高效的数据结构,有想法的可以去看看。

策略1:MC
利用MIUs提高阈值。

C、从PKHUIs中识别Top-k 高效用项集(Top-k HUIs);
这个过程也就是phase II:通过扫描原始数据集计算PKHUIs的效用值,去获取top-k个HUIs,只考虑那些评估效用值不低于 min_utilBorder m i n _ u t i l B o r d e r 的项集。

TKU T K U ——最终算法

TKU算法是在 TKUBase T K U B a s e 的基础上又加入了四个优化策略(PE、NU、MD、SE)来帮助高效提高 min_utilBorder m i n _ u t i l B o r d e r

策略2:PE(Pre-Evaluation Step)
主要思想,在构建树之前先将 min_utilBorder m i n _ u t i l B o r d e r 从0提高一些,这样帮助节省存储空间和时间,提早剪枝掉一些不怎么有前景的项。

PE在第一次数据库扫描的时候用了一个Pre-Evaluation Matrix(PEM)结构来存储所有确定的2项集对应的效用值,如下图所示。

还是用之前的例子,当 T1={(A,1),(C,1),(D,1)} T 1 = { ( A , 1 ) , ( C , 1 ) , ( D , 1 ) } 被遍历的时候 PEM[A][C] P E M [ A ] [ C ] PEM[A][D] P E M [ A ] [ D ] 将被 EU({AC},T1)=6 E U ( { A C } , T 1 ) = 6 EU({AD},T1)=7 E U ( { A D } , T 1 ) = 7 提示,之后每次都叠加。上图是遍历过程中某一时刻的截图。如果k被设置为4,那么 min_utilBorder m i n _ u t i l B o r d e r 将被更新为18。

策略3:NU(Raising the Threshold by Node Utilities)
该策略被用在UP-tree的构建过程中,策略基于以下引理

引理8. PATH=N1,N2,,NM,R P A T H = ⟨ N 1 , N 2 , ⋯ , N M , R ⟩ 是UP-Tree中节点 N1 N 1 到根节点 R R 的一个路径,并且 IiI Ni.item N i . i t e m 1iM 1 ≤ i ≤ M PATH P A T H 代表数据库中的一个唯一项集 X=I1,I2,,IM X = ⟨ I 1 , I 2 , ⋯ , I M ⟩ N1 N 1 的效用值是 X X 效用值的一个下界。

引理9.如果UP-Tree中有M个节点,那么至少M个互不相同的项集的效用值大于0。

引理10.SetNode=N1,N2,,NM,R是包含UP-Tree( Mk M ≥ k )中所有节点的有序集合。 Ni N i 是第 i i 个节点,并且对于所有i<j Ni.nuNi.nu>0 N i . n u ≥ N i . n u > 0 ;如果 δNU=Nk.nu δ N U = N k . n u ,有 fHUI(D,δ)fHUI(D,δNU) f H U I ( D , δ ∗ ) ⊆ f H U I ( D , δ N U ) ;同引理2证明。

还是之前那个例子:设 k=4 k = 4 ;当UP-Tree中插入 T1={(C,1),(A,1),(D,1)} T 1 , = { ( C , 1 ) , ( A , 1 ) , ( D , 1 ) } ,生成三个节点,并且 N{C}.nu=1 N { C } . n u = 1 , N{A}.nu=6 N { A } . n u = 6 , N{D}.nu=8 N { D } . n u = 8 ,分别表示 {C},{AC},{DAC} { C } , { A C } , { D A C } 效用值下界 ;当UP-Tree中插入 T1={(C,6),(E,2),(A,2),(G,5)} T 1 , = { ( C , 6 ) , ( E , 2 ) , ( A , 2 ) , ( G , 5 ) } ,节点数大于4,所以可以利用引理10提高 min_utilBorder m i n _ u t i l B o r d e r

策略3就是利用上诉方法利用 NUkth N U k − t h 来更新 min_utilBorder m i n _ u t i l B o r d e r

策略4: MD (raising the threshold by MIU values of Descendents)
这个策略应用在UP-Tree构建之后,PKHUIs生成之前。 Nα N α 表示树种的一个节点, α α 表示item,算法遍历 Nα N α 的子树,对每个后继节点 Nβ N β 计算 {αβ} { α ∪ β } 的MIU值;如果第 k k 大的MIU值大于 min_utilBorder m i n _ u t i l B o r d e r ,用这个值来更新 min_utilBorder m i n _ u t i l B o r d e r


以Fig.2中的UP-Tree为例,依旧设 k=4 k = 4 ;对节点 NC N C ,对后代 NA N A ,我们可以计算得到 MIU({AC})=[min({A})+min({C})]×SC({AC})=[5+1]×3=18 M I U ( { A C } ) = [ m i n ( { A } ) + m i n ( { C } ) ] × S C ( { A C } ) = [ 5 + 1 ] × 3 = 18 原文好像有点错误);对其每个子节点计算得到如上表所示结果, NG N G 的MIU值应该是6(原文好像有点错误)。

策略5:SE (raising the thresh-old by Sorting and calculating Exact utility of candidates)
这个策略用在TKU的phase II;主要思想是利用一个堆结构存储候选项集,并优先考虑效用值大的项集,因为这样可以加快 min_utilBorder m i n _ u t i l B o r d e r 的增长,这样可以减少不必要的遍历和时间,效用值评估方法可以是 min{ESTU(X),MAU(X)} m i n { E S T U ( X ) , M A U ( X ) } 等。

总结

作者在多个不同稀疏程度的数据集上作了对比, TKU T K U TKUBase T K U B a s e 速度上要快很多,因为加入了许多优化策略。原文还对比了内存消耗,可以看原文。

这篇博客介绍了一种two phase的Top-k高效用项集挖掘方法——TKU,内容实在太多,到最后都快变成英文翻译了,算法TKO将在下一篇中给出。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值