参数
数据库
参数定义
- eu(i):元素i的效用值
- iu(i, T):交易集T内元素i的数量
- u(i, T):交易集T内所有元素i的总效用值,u(i, T) = iu(i, T) × eu(i)
- u(X, T):交易集T中集合X的总效用值
- u(X):数据库DB中所有集合X的总效用值
- tu(T):交易集T的总效用值
- twu(X):数据库DB中包含集合X的所有交易集的总效用值
- T/X:T/X表示集合T中所有在(经过排序后)集合X后面的元素的集合!
- ru(X, T):集合T中,T/X的效用值总和
- i项扩展:若k项集的子树节点拥有(k+i)项,则称其为 k 项集的 i 项扩展。
效用列表参数
集合X的效用列表包含有三个参数:
- tid:包含集合X的交易集id
- iutil:u(X, T)
- rutil:ru(X, T)
操作
效用列表初始化操作
每一个项目集拥有一个效用列表
- 求出所有项目的TWU(i) 。如果项目i的TWU低于所给出的阀值,那么将不再考虑任何包含有 i 的项目集。
效用列表生成操作
算法通过比较两个效用列表中的tids,通过tids的交集来构造多元效用列表。 (下图为{e}与{c}的比较)
二元效用列表的构造
- 提取两项目集的tid交集作为生成项目集的tids
- 每个生成效用列表tids对应的iutils,由两项目集对应tids的iutils相加而成
- 每个生成效用列表tids对应的rutils,取排序靠后(TWU较大)的项目集对应的rutils
- 构造{eb}的效用列表为例: {e}的效用列表为 {<2, 4, 14>, <4, 4, 2>, <5, 8, 14>}, {b}的效用列表为 {<1, 2, 5>, <2, 2, 9>, <5, 4, 10>, <6, 8, 3>}, {eb}的效用列表为 {<2, 6, 9>, <5, 12, 10>}
多元效用列表的构造
- 当我们构建一个k项集的效用列表{ i1 · · · i(k−1) ik }时,可以将它看作两个k-1项集{i1 · · · i(k−2) i(k−1)} 与 {i1 · · · i(k−2) ik}的组合。
- 所生成效用列表的iutils计算方法为:u({i1 · · · i(k−2)i(k−1)ik},T) = u({i1 · · · i(k−2)i(k−1)}, T) + u({i1 · · · i(k−2)ik}, T) - u({i1 · · · i(k−2)}, T) , 即需要减去两构成集相交部分(设为X)的u(X, T)。
伪代码表示
HUI-Miner
搜索空间
HUI-Miner算法的搜索空间可以表示为一个项目集枚举树,其各个节点按TWU顺序排列。
- 根节点为空集。
- 第一层结点为一元项目集, 按TWU顺序排列。
- 从第二层开始,只在末尾添加TWU值 大于 父亲结点最后一位元素TWU值 的元素。
- 重复第三步,直到构造完成。
剪枝策略
- 若该项目集对应效用列表所有iutils的总和大于阀值,则该项目集为高效用。
- 若该项目集对应效用列表所有iutils与rutils的总和大于阀值,则该项目集需要进一步判定。
- 若该项目集对应效用列表所有iutils与rutils的总和小于阀值,则该项目集及其所有扩展都为低效用,对其进行剪枝。
MUI-Miner算法
实现细节
- 为了提高效率,避免对效用列表的扫描。在构建效用列表的同时对其iutils与rutils的总和进行计算并保存在效用列表中。
- 也不需要将项目集与相应的效用量列表绑定起来,因为集枚举树中某节点的所有子节点表示的项目集都具有相同的前缀项目集。
- 实用程序列表中的第一行存储扩展项以及iutils和rutils的和,而前缀项集为独立存储。