HUI-Miner:高效的高效用项集(high-utility itemset)挖掘算法

在之前的博客中我介绍过我的研究方向高效用挖掘算法。今天我将介绍解决这一问题的一个运行速度很快,并且很容易理解的一个算法–HUI-Miner,并会提供Java实现。

HUI-Miner由武汉大学刘梦赤及其博士生屈俊峰提出。之前的博客说明过高效用项集挖掘是频繁项集挖掘的一个延伸。而频繁项集挖掘算法都利用了反单调性去减小搜索空间。而高效用挖掘却不能直接适用这一性质。即一个项集的超集的总效用有可能大于也有可能小于或者等于这一项集的效用。一个经典解决方法是找了项集效用的上界(Upper bound)TWU。 TWU是指包含某一项集的所有交易的总效用。可以看出TWU是符合反单调性的,所以有很多算法分为两步:一、找出所有TWU>min_util 的项集,二、重新计算这些候选项集真实的效用。今天要讲的HUI-Miner在这一基础上的改进主要是两个方面:一、找到一个比TWU更紧凑的上界;二、算法不生成候选项集,而是直接生成高效用项集。

数据结构

在介绍数据结构的前,先介绍一下算法一个特点,方便数据结构的理解:在本算法中,会根据item的TWU先作一个排序(一般为TWU降序)。
这一算法的核心是它的数据结构Utility-List。Utility-List相当于一个数据表,共分为3栏,第一栏是交易ID(TID),第二栏是项集在本交易项集中的效用(iUtil),第三栏是交易剩余的效用(rUtil,值得注意的是,这里剩余的效用不包含在项集之前的那些items)。一个示例如下:
交易数据库
1-itemset Utility-list
如图所示,第一张图为交易数据库,包含了每个交易的item以及其效用,并计算了交易总效用。第二张图,为只有一个item的itemset 的Utility-List。

算法过程

在介绍了Utility-List后,再来介绍算法的基本流程。它运用了深度优先搜索去找所有的高效用项集。算法初始扫描数据库生成1-itemset Utility-List,然后按照所示的图的顺序去考察每个项集是否是高效用项集,如果某一项集的总iUtil>min_util则输出该项集,如果某一项集的iUtil+rUtil小于min_util则不用考察它的子树。否则,用两个k-itemset Utility 去合成一个(k+1)-itemset Utility-List。算法的具体过程可用下面的伪代码表示:
总体算法过程
合成Utility-list
在这里我会上传HUI-Miner Java实现,点击下载,值得注意的是,我写的注释不太多,有任何问题,欢迎讨论。

猜你喜欢

转载自blog.csdn.net/jiafgn/article/details/65938866