基于海量数据的关联规则挖掘(八)

2.2基于采样的方法

       前面所讨论的频繁项都是在一次能处理的情况。如果数据量过大超过了主存的大小,这就不可避免的得使用k步来计算频繁项集。这里有许多应用并不需要发现所有的频繁项。比方说在超市,我们只要找到大部分的销售频繁关联项就够了,而不必找出所有的频繁项。

        在这一节,我们介绍几种算法来找到所有或大部分的项集使用两步。我们首先从使用一个简单的数据样本开始,而不是整个数据集。一个算法叫做SON,使用两步,得到精确结果,并使得它能够在map-reduce和其他并行处理的框架下运行。最后,Toivonen的算法平均使用两步获取精确结果,但是,可能但不是经常不能在给定的时间内完成。

一个简单的随机算法

        不是使用整个文件或篮子,我们使用篮子的一个子集并加装他们是整个数据集。我们必须调整支持度的阈值来适应我们的小篮子。例如,我们针对完整数据集的支持度阈值为s,当我们选择1%的样本时,我们可以在支持度阈值为s/100的度量上测试。

        最安全的抽样方式是读入整个数据集,然后对于每个篮子,使用相同的概率p选择样品。假设这有m个篮子在整个文件中。在最后,我们需要选择的样品的数量接近pm个篮子的样品数。如果我们事先知道这些篮子本身在文件中就是随机放置的,那么我们就可以不用读入整个文件了,而是只接选择前面的pm个篮子作为样品就可以了。或在,如果文件是分布式文件系统,我们可以选择第一个随机块作为样品。

       当我们的样品选择完成,我们可以使用部分的主存来放置这些篮子。剩下的主存用来执行前面的AprioriPCYMultistageMultihash算法。当然这些算法必须运行所有的样品,在每个频繁集上,直到找不到频繁集为止。这个方法在执行读取样品时不需要磁盘操作,因为它是驻留在内存的。当每个频繁项被发现,它们就可以写到磁盘上了;这个操作和最初的读样品到内存是唯一的两次磁盘操作。当然若读入样品后剩下的内存不够执行之前所说的算法时,这种方法会失败。当然,可以选择在算法的每步完成后写到磁盘再仅从磁盘调入下步所需的数据。因为样品的数量相比与整个文件是很小的,所以,I/O操作的代价还是很小的。

 

避免错误的抽样算法

        我们需要知道在简单抽样方法中可能出现错误。因为我们使用的是抽样,所有就可能存在是频繁项的没有放进频繁集,也存在非频繁项的放入了频繁集。

        当样本足够大时,问题变得不是那么严重了。这时,那些支持度远大于阈值的项集即使在样本中其支持度也会很高,所有误分的可能性不大。但是那些支持度在阈值附近的就不好说了。很有可能由于抽样使得支持度稍微改变而改变对其是否是频繁集的判断

        我们可以通过一遍对整个数据集的扫描,计算所有样品中频繁项集的支持度,保留那些在样品中和在数据集上支持度都高于阈值的频繁项集。以此避免非频繁项集被判为频繁项集的错误。值得注意的,这种方法不能避免那些是频繁集却被当做非频繁项集的情况。

        我们不能消除那些是频繁项集却没有在样品中找出的情况,但是我们可以减少它们的数量如果内存的数量允许。我们设想如果s是支持阈值,且样品相对于整个数据集的大小为p,这样我们可以使用ps作为支持阈值。然而我们可以使用比这个值稍微小点的值作为阈值,如0.9ps。使用更低的阈值的好处是能使更多的项进入到频繁集中,这样就可以降低这种错误,然后再以这些频繁项集到整个数据集中计算支持度,除去那些非频繁项集,这样我们就可以消除非频繁项集当成频繁项集的错误,同时最大化的减少了频繁项集被当做了非频繁项集。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值