换个角度思考问题——频繁项集挖掘的两个优化策略

在以前的博客中介绍过数据挖掘的一个基本问题频繁项集挖掘。对于这一问题,有很多不同思想的算法。同时,也有一些优化策略可以在算法基本不变的情况下大大提高算法的效率。今天介绍两个:竖向数据库(Vertical database)、Diffsets 两个策略非常相像,都是换了一个角度处理数据,巧妙而有效率。

Vertical mining 

为了说明这一策略,我用AprioriTID算法和Apriori做一比较:
首先可以将数据库做如下转换:
竖向数据库
这时,如果要计算一个项集(itemset)的支持数时,就不用扫描一遍数据库了,而可以对tid数据库做交集。

例如,要计算{pasta,lemon}的支持数:
交集计算support

Diffset

频繁项集挖掘还有一个经典算法——Eclat。Eclat是一个深度优先搜索算法,其为每一个项集维护一个tidset,记录了包含这一项集所有交易的id。
而Diffset相当于tidset的补集,在dense的数据库中,其可以大大减少所需的内存。其示意图如下,其中P表示某一前缀,X Y 代表某一元素或item, t(X)表示X的tidset, d(X)表示X的diffset。简单的说,d(PX)=t(P)-t(X):
diffset

猜你喜欢

转载自blog.csdn.net/jiafgn/article/details/75037388
今日推荐