TKC算法

948 阅读4分钟

写在前面:根据传统的效用项集挖掘算法得到的高效用项集,是一个高度抽象的集合,并没有反应出该集合内部元素为什么能够构成高效用项集,它们之间存在何种关联也无从得知,因此,cross-level HUIM algorithms正是为了解决该问题而提出。 ———— By Suarne

Mining Top-K Cross-Level High Utility Itemsets

定义

大部效用值计算分内容在 HUI-MinerkHMC 算法笔记中已经有介绍,这里仅做一点额外补充

  • 分类(taxonomy) :是一棵树(τ\tau),叶节点表示具体的项,父节点表示分类标准(不同程度的抽象)

  • 广义项(generalized item) :表示一个高层次的抽象,如波斯猫和老虎都可以归类为猫科动物,简写为 GIGI;由此引申出一个概念 局部关系(location relationship) ,即在 τ\tau 中,存在一条路径从节点 gg 到节点 ii,有 (g,i)LRGI×I(g, i) \in LR \subseteq GI \times I

  • 抽象项(abstract item) :是非广义的,简写为 AIAI = GIIGI \cup III 是项集合);同理引申出一个概念 泛化关系(generalization relationship) ,即在 τ\tau 中,存在一条路径从节点 dd 到节点 ff,有 (d,f)GRAI×AI(d, f) \in GR \subseteq AI \times AI

  • 具象化(specialization) :从某个广义项 gg 节点出发,沿着树枝走到叶节点,称为对 gg 进行特殊化,公式为 Leaf(g,τ)Leaf(g, \tau) = {i(g,τ)LRi \mid (g, \tau) \in LR};当项集 XXYYfX\forall f \in XfYf \in YdY\exist d \in YfDesc(d,τ)f \in Desc(d, \tau)X\mid X \mid = Y\mid Y \mid,则称 XXYY 的具象化项集

  • 衍生(descendant) :自然地, gg 的所有子节点公式化为 Desc(g,τ)Desc(g, \tau) = {f(g,f)GRf \mid (g, f) \in GR};当项集 XXYYfX\forall f \in XdY\exist d \in YfDesc(d,τ)f \in Desc(d, \tau)X\mid X \mid = Y\mid Y \mid,则称 XXYY 的衍生项集

  • cross-level pattern:同时包含广义项和抽象项

  • multi-level pattern:针对不同的抽象层次,设置不同的阈值,多层筛选后得到的 cross-level patterns

  • generalized-weighted utilization:与 TWU 功能类似,有反单调性的特点,计算公式为 GWU(X)GWU(X) = Tig(X)TU(Ti)\sum_{T_i \in g(X)}TU(T_i),其中 g(X)g(X) 是指包含项集 XX 的交易项集合

  • 偏序关系(\succ :对于 AIAI 中的所有项,存在一种排序规则,即当 level(a)<level(b)level(a) < level(b) 或者 level(a)level(a) == level(b)level(b)GWU(a)<GWU(b)GWU(a) < GWU(b) 时,则有 aba \prec b

  • 基于并操作的扩展(join-based extensions) :对于项集 XX,jion-based extension 是将项 yAIy \in AI 直接加入 XX,同时条件 iyi \prec yiX\forall i \in Xy∉Desc(i,τ)y \not\in Desc(i, \tau) 要成立

  • 基于分类的扩展(tax-based extensions) :将项集 XX 当前最后一个项 yy 替换为 XX 的其它子节点叫做 tax-based extensions

    Ps. 两种扩展方法示意图如下:

    两种扩展方法示意图

  • 分类效用列表(tax-utility-list) :基于 utility-list 结构改进的新存储结构,相较于原来添加了分类信息,即 tuList(X)tuList(X) = <(tid,iutil,rutil)children(tid, iutil, rutil),children>,其中 childrenchildren 记录项集 XX 中最后一个项的所有子节点对应的 tuListtuList

    Ps. tuList 结构示意图如下:

    tuList结构示意图

动机

销售中的产品可以分成多个大类(广义上)如面包、牛奶等等,而在这些大类中又可以分成多个小类(垂直细分),如白面包、燕麦面包、荞麦面包等等。传统的 HUIM 算法只能分析出广义上的集合,即结果显示 “牛奶+面包” 可以销售得很好,而不能得出具体是 “哪种面包+牛奶” 卖得好(Ps. 如果把挖掘对象分得太细,传统的 HUIM 算法可能会因为低于阈值而过滤了某些结果)。其次,人为设置阈值很难保证短时间内得到满意的结果(阈值偏大或偏小会严重影响挖掘结果),所以使用 Top-kk 思想来转换获取结果的思路,避免这个问题

策略

基于反单调性的剪枝策略

该策略在效用挖掘中是通用的存在,当 GWU(X)<minUtilGWU(X) < minUtil 时,项集 XX 本身及其扩展都不可能成为符合条件的高效用项集

基于剩余效用的剪枝策略

该策略在基于utility-list数据结构的算法中最容易实现,也最符合list结构的特点,当 reu(X)reu(X) = etuList(X)(e.iutil+e.rutil)<minUtil\sum_{e \in tuList(X)}(e.iutil + e.rutil)< minUtil 时,项集 XX 和它的扩展项集都不可能是高效用项集

基于广义项的效用阈值提升策略

在挖掘开始前的准备工作中,找出 GWU>minUtilGWU > minUtil 的一阶项,而这些低阶项的真正效用值可以用来提升当前的最低阈值

伪代码

该算法是基于 CLH-Miner 算法改进的 Top-kk 版本,通过深度优先遍历方式,采用 join-based 和 tax-based 两种扩展方式挖掘高阶高效用项集

Main procedure

主方法

Find procedure

查找高阶项集方法

由于原论文中并没有提供实现 construct join-based extensionsconstruct tax-based extensionsconstruct() 的伪代码,所以本人从 CLH-Miner 和 HUI-Miner 算法中截取对应的伪代码

ConstructJoinExtension procedure

构造并扩展示意图

ConstructTaxExtension procedure

构造分类扩展示意图

Construct procedure

构造列表示意图

总结

由于该文章是与其基准算法 CLH-Miner 是同一年发表的,所以在阈值提升策略上并没有做很好的优化,只是采用了一些 top-kk HUIM 算法中比较通用的策略。但该算法是首个能解决 top-kk cross level HUIM 问题。从实验结果来看,该算法在时间上表现比较好,但是在内存上随着 kk 值的增大而急剧增加,这是 utility-list 数据结构的一个通病。个人认为应该在数据结构上进行改进,使用压缩程度更高的来提高挖掘效率,减少无效candidates的产生