写在前面: 现在开始接触数据挖掘相关知识,从挖掘算法开始,本篇记录对HUIminer算法文献一些翻译上的个人理解,如有错误还望指正。
频繁挖掘
原理
不频繁的项集的所有超级集都不频繁,并且频繁项集的所有子集都频繁。当发现一个不频繁的项集,它的超集一定也是不频繁的,所以超集不用检查。
缺点
只统计项集出现与缺失,很多附带价值(商品价格、出现次数等)无法加入计算,会出现高值低频、高频低值的现象(比如万元笔记本和4G内存条)
高效用项集挖掘(HUI-Miner)
因为原高效用项集挖掘模式会产生许多低阈值的候选集,所以用高效列表(utility-list)来替代候选集的作用。
样本
每个在效用表()中都存在对应的效用值()
是关于的集合,叫效用集
:交易表中的每一项的,且每项都是由组成的超集,交易效用值是所有的效用值的合计
:的效用值
:在交易表项中出现的次数
:,交易项集项中所有的总效用值和
:,效用集的所有元素在交易表中的总效用值
:,效用项集在数据库中的总效用值
:,在数据库中所有在项的效用值和
:,数据库DB中包含集合X出现在效用集项的所有交易项集的总效用值
当twu(X)值小于设定的阈值,X的所有超集都不是有效项集,因为 时,有
Ps.其实个人认为加上这个是整个算法的前提,因为它解决了之前项集效用值既不是单调也不是反单调的问题,使整个项集又有了排序的可能,再者产生剩余效用项集,构造剩余效用列表(本文亮点)
构造效用列表
效用表是在twu操作进行删除和排序操作之后一个新表,这个表中的项集更少(因为删除了低效用值的一元项)
初始化效用列表(一元)
第一遍扫描数据库:生成所有项的twu(i),如果某个项的值低于设定的最小阈值,那么之后的处理都跳过含有该项的项集,删除低于阈值的项,将大于阈值的项按升序排列,设样例中阈值为30。
第二遍扫描数据库:生成如下图的数据库视图
:,在T中项集X之后的所有项都用T/X表示(因为之前的已经排好序了),例如,参考上表(枚举树会更容易理解)
:是在各交易项中除去共同前缀项集剩下的项的效用值之和,计算公式为:
补充:
其中集合X的每个效用列表都包含三个属性:
:包含集合X的交易项id
:
:
二元效用表
无需再次扫描数据库,
通过比较两个效用列表中的tid,取交集生成新的多元效用列表,
上图(a)第一行是交易表T中包含{e}的项的下标,第二行是交易表T中包含{c}的项的下标(对照Fig.4),
上图(b)其中
- 每一项的Iutils取两者Iutils的和,Rutils取两者中小的Rutils(对照Fig.5,因为它们都是排好序的,前面的项与后面的项结合,必然是会导致剩余项的效用值减少(Rutils),剩下没合并的项少了)
- Iutils这一列的值相加得到的和就是该项集的效用值
- iutils和rutils这两列的值相加得到的就是该项集的扩展项集的ru值
多元效用表
具体方法和二元计算类似,从二元项集中选取项,如{ec}与{eb}可以生成{ecb},但需要注意的是,计算之间有重叠部分{e}(如下图(a)),所以还要减去u(e, T)(如下图(b)),这里算作是重复计算了共同前缀
下面是求多元效用表伪代码:
HUI-Miner算法
检索空间
使用枚举树结构,每个节点按twu值顺序排序构造方法如下:
- 根节点为空集
- 第一层节点为一元项集
- 从第二层开始,在每个节点末尾依次添加twu值大于父节点最后一位元素twu值的元素。(可以简单地认为把后面的节点单个地添加到前面去,因为每层节点twu值都是有序的)
- 重复第三步,直到生成所有节点(每层节点不出现重复节点)
剪枝策略
- 若该项目集对应效用列表所有iutils的总和大于阀值,则该项集为高效用项集。
- 若该项目集对应效用列表所有iutils与rutils的总和大于阀值,则该项目集需要进一步判定。
- 若该项目集对应效用列表所有iutils与rutils的总和小于阀值,则该项目集及其所有扩展都为低效用,对其进行剪枝。
算法实现
同时为了提高效率,减少对效用列表的扫描次数,集合枚举树中一个节点的所有子节点所代表的项集具有相同的前缀项集。为此,我们将扩展项与前缀项分开存储,Fig.7(b)中的表可以构造成如下图结构:
后记
个人的感理解是因为以前的频繁挖掘模式根据反单调性来生成候选集,后来提出了twu这个概念去弥补之前的模式对物品的真实价值考量不足的情况;可问题也随之而来,单个项(集)的效用值是非单调的,所以HUI-Miner算法提出twu(Transaction Weighted Utilities),它具备反单调性,并设计一种数据结构——效用列表(Utility-List),围绕Utility-List展开的效用值计算才是本算法的核心
参考:
1.Mengchi Liu, Junfeng Qu:Mining High Utility Itemsets without Candidate Generation