一、基本概念
- 频繁项:在多个集合中,频繁出现的元素/项,就是频繁项
- 频繁项集:有一系列集合,这些集合有些相同的元素,集合中同时出现频率高的元素形成一个子集,满足一定阈值条件,就是频繁项集。
- 极大频繁项集:元素个数最多的频繁项集合,即其任何超集都是非频繁项集。
- k项集:k项元素组成的一个集合
- 支持度: 包含频繁项集F的集合的数目
- 可信度:频繁项F与某项j的并集 (即F U {j})的支持度 与 频繁项集F的支持度的比值,
- 兴趣度:F U {j} 可信度 与 包含{j}的集合比率之间的差值。若兴趣度很高,则 频繁项集F会促进 j 的存在, 若兴趣度为负值,且频繁项集会抑制 j 的存在;若兴趣度为0,则频繁项集对 j 无太大影响。
频繁项集 与 某项 j 的关系就是 关联规则。
- 找出所有频繁项集(满足最小支持度的项集),称所有是之全部的一项、二项、多项频繁集
- 由频繁项集找出强关联规则(满足最小支持度和最小可信度的项集)
是一种筛选频繁项集的优化算法。
频繁项集两个定理:
1)频繁项子集定理:频繁项集的子集都是频繁项集,而非频繁项的超集都是非频繁项集。
2)频繁项集的合并/连接定理:由k-1项集,向k项集进行合并。当两个k-1项集,拥有k-2个相同元素时,才能合并成k项集。
基本步骤
- Lk-1:所有 频繁 (k - 1)- 项集 的集合
- Ck :所有 候选 k- 项集 的集合
- 连接: 由Lk-1自连接得到Ck
- 修剪: 对Ck中的任意一个k- 项集 ,如果它的任一(k - 1)- 项集 不是频繁的,那么它本身也不可能是频繁的
PCY算法
当频繁项对的数量比较大时,内存放不下,而这时对频繁项对进行计数时,可能会产生内存抖动,即内存页面频繁换入换出,因为不同的频繁项对计数器可能放在不同的页面上。
对Aprior进行改进。
在第一步扫描时,为频繁项对 创建一张hash表,hash表只是统计 hash到本桶的项对的个数。第二步,统计哪些是频繁桶,并对桶内的两个频繁项进行计数处理。这样,每个频繁桶内代表的频繁项集比较少,这样,计算更大频繁项集的计算量就大大降低了。
多hash算法
PCY的形变算法,采用多个hash表和hash函数,只要桶的平均计数不小于阈值,分频繁桶的数目任然比较多。这样,一个非频繁对同时hash到两个hash表的频繁桶内的概率就更低。减少了第二遍扫描的运算量。
随机化算法
前提: 当数据量非常大,整个购物篮数据无法放入内存,这时,进行统计会有一定困难
解决方法:对购物篮进行随机抽样,只要样本数据足够大,还是能够提取出逼近真实情况的频繁项集的。
由于是抽样,涉及概率p,所以频繁项支持度的阈值s也需要降低,但是由于概率的乘法定理,抽样的频繁项集肯定是小于实际的数目,所以,需要降低阈值,可以将新的阈值设置的更小点,如0.9*p*s。
抽样带来的新问题: 伪正例(非频繁项集被统计成频繁项集)、伪反例(频繁项集没有提取出来)。伪正例可以通过后续的处理,排除掉,但是无法消除伪反例的情况。
SON算法
对随机抽样的算法进行改进。
将所有购物篮划分成相对比较小的小组,这样每个小组都能放进内存进行处理,每个小组内的项进行统计。处理完所有小组,然后,统计项对的频率,找出频繁项集。这个算法比较适合map-reduce的处理方式。
在统计每个小组的频繁项集时,其阈值仍然是需要降低的,类似于随机抽样算法。
Toivonen 算法
在给给定足够内存的情况下:
刚开始,类似于随机抽样算法,对购物篮抽样,降低阈值,找出频繁项集,除此之外,还要检测反例边界,反例边界的构成:非频繁集,但去掉任何一个元素就是频繁集。
在完整的数据集中,对反例边界上的项集进行检测,若这个反例边界的项集 没伪反例,即在完整数据集中,仍然是非频繁项集,则接收此次抽样结果;若找到了伪反例,那么就再次抽样,直至成功。