这个算法给出另一种不同的随机抽样算法。Toivonen算法在给出足够内存的情况下,在小样本上进行一步处理,接着再整个数据上进行一步处理。这个算法不会带来false negatives,也不会带来false positives,但是这里存在一个小的概率使得算法会产生不了任何结构。这种情况下算法需要重复直至找到一个结果,虽然如此,得到最终频繁项集的处理的平均步数不会太大。
Toivonen算法由从输入数据集中选择一个小的样品开始,并从中找到候选频繁项集,找的过程同Apriori算法,不过很重要的一点不同是阈值的设置的比样品比例的阈值小。即,当整个数据集上的支持度阈值为s,该样品所占数据集的比例为p,则该阈值可以设置为0.9ps或0.8ps。越小的阈值,就意味着在处理样本时,越多的内存在计算频繁项集时需要使用;但是也就越大的可能性避免算法不能产生结果。
当样本的频繁项集被构造完成后,我们的下一步是构造negative border。这是样品的一个非频繁项集合,但是这些项集的任意去掉一个项后就是频繁集了。
考虑项为{A,B,C,D,E},而且我们找到频繁项集为{A},{B},{C},{D},{B,C},{C,D}。注意,只要篮子数不比阈值小,Φ也是频繁的,但是我们忽略它。首先,{E}是在negative border中的,因为{E}本身不是频繁项集,但是从中去任意项后就变成Φ了,就成了频繁项集,所有包含在negative border中。
还有{A,B},{A,C},{A,D}和{B,D}都在negative border中。因为它们都不是频繁项集,但是除掉一个项的子集都是频繁项集。如{A,B}的子集{A}和{B}都是频繁集。剩下的六个二元项集不在negative border中。{B,C}和{C,D}因为它们本身是频繁项集,所有就不是negative border的元素了,而其他四个虽然不是频繁项集,但是因为包含了项E,而子集{E}不是频繁项集
没有任何三元的或更大的项集在negative border中了。例如{B,C,D}不在negative border中,因为它有一个立即子集{B,D},而{B,D}不是频繁项集。这样,negative border由下面五个集合组成:{E},{A,B},{A,C},{A,D}和{B,D}。
为了完成Toivonen算法,我们需要一步在整个数据集上的处理,算出所有在样品中的频繁项集或negative border中的所有项集。这步会产生的可能输出为:
1、 negative border中没有一个项集在整个数据集上计算为频繁项集。这种情况下,正确的频繁项集就为样本中的频繁项集。
2、 某些在negative border中的项集在整个数据集中计算是频繁项集。这时,我们不能确定是否存在更大的项集,这个项集既不在样本的negative border中,也不在它的频繁项集中,但是是整个数据集的频繁项集。这样,我们在此次的抽样中得不到结果,算法只能在重新抽样,继续重复上面的步骤,直到出现满足输出情形1时停止。
显然 Toivonen算法不会产生false positive,因为它仅仅将在样本中是频繁项并在整个数据集上计算确实为频繁项集的项集作为频繁项集。为讨论该算法能够不产生false negative,我们需要注意,在Toivonen算法中,没有negativeborder中的项集是频繁项集。所有,无论如何,不存在在整个数据集上是频繁的,而在样本中既不出现在频繁集中,也不出现在negative border中。
给个反例。假设这里有个集合S在数据集上是频繁项集,但是既不在样本的negative border中,也不是样本的频繁项集。那么在Toivonen算法的一步结束后,产生结果,并且结果中的频繁项集合中没有S。由频繁项集的单调性知,S的所有子集都是整个数据集的频繁项集。假设T是S的一个在样本中不属于频繁项集的最小子集。
我们说,T一定在negative border中。当然,T满足在negative border中的条件:它自己不是样本的频繁项集。而它的直接子集是样布的频繁项集,因为若不是,则T不是S的在样本中不属于频繁项集的最小子集,产生矛盾。
这里我们可以发现T即是数据集的频繁项集,又在样本的negative border中。所有,我们对这种情况的Toivonen算法,让其不能产生结果。