前言
本篇博客出于学习交流目的,主要是用来记录自己学习后的理解,过程中遇到的问题和心路历程,方便之后回顾。过程中可能引用其他大牛的博客,文末会给出相应链接,侵删!
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 作为 UP−Growth U P − G r o w t h 算法的一种扩展,依然采用了 UP−Tree U P − T r e e 结构。算法包括三部分:A、 UP−Tree 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.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 table和UP-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 ( T,r 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( T,r T r , ) 。把遍历每个重构后的交易 T,r={I1,I2,⋯,IM}(Ij∈I∗,1≤j≤M) 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 和
T,r
T
r
,
中的项
Ij(Ij∈T,r,1≤j≤M)
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
,
)
计算,其中,
Ij∈T,r,1≤j≤M
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.给定一组项集,
M≥k
M
≥
k
;
Xi
X
i
表示
P
P
中的第个项集,对所有
j
j
大于的情况下有
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 ⟩ , M≥k M ≥ k ; Xi X i 表示 P P 中的第个项集,对所有 j j 大于的情况下有 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
)
Definition 13. 项集的最小效用值 (Minimum utility of an itemset):
MIU(X)
M
I
U
(
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
⟩
,
M≥k
M
≥
k
;
Xi
X
i
表示
C
C
中的第个项集,并且对所有
j
j
大于的情况下有
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|Xi∈C,1≤i≤k)}
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(γ)<δMC≤MIU(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
⟩
,
M≥k
M
≥
k
;
Xi
X
i
表示
C
C
中的第个项集,并且对所有
j
j
大于的情况下有
MIU(Xi)≥MIU(Xj)>0
M
I
U
(
X
i
)
≥
M
I
U
(
X
j
)
>
0
,也
Xi
X
i
就是第
i
i
大的MIU值的项集;
如果有,那么
fHUI(D,δ∗)⊆fHUI(D,δMC)
f
H
U
I
(
D
,
δ
∗
)
⊆
f
H
U
I
(
D
,
δ
M
C
)
;同引理2证明。
引理5.对任意项集 X X ,如果,那么 X X 及其超集都不是top-k HUIs。因为,并且对超集 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})=10,mau({C})=6,mau({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
)
引理6.对任意项集 X X ,如果,那么 X X 不是top-k HUIs。因为可以看做是 EU(X) 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
相关的项集都是低效用的。
根据前面这么多的定理和特性,具体算法伪代码如下:
就是不断更新,然后不断判断可能的项集作为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 的一个路径,并且 是 Ni.item N i . i t e m , 1≤i≤M 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.设是包含UP-Tree( M≥k M ≥ k )中所有节点的有序集合。 Ni N i 是第 i i 个节点,并且对于所有, Ni.nu≥Ni.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中插入 T,1={(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中插入 T,1={(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就是利用上诉方法利用 NUk−th 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
大的值大于
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将在下一篇中给出。