频繁项集挖掘是一个关联式规则挖掘问题。关联挖掘是数据挖掘中研究最早也是最活跃的领域,其中频繁模式的挖掘是关联挖掘的核心和基础,是产生关联规则挖掘的基础。频繁项集最经典的应用就是超市的购物篮分析。
首先要理解频繁项集中的以下概念。
频繁项:在多个集合中,频繁出现的元素项。
频繁项集:在一系列集合中每项都含有某些相同的元素,这些元素形成一个子集,满足一定阀值就是频繁项集。
K项集:K个频繁项组成的一个集合。
支持度:包含频繁项集(F)的集合的数目。
可信度:频繁项与某项的并集的支持度与频繁项集支持度的比值。
简单来说。频繁项集的挖掘就是将数据集(一般是多行数据,每行数据的第一个元素的交易编号,后面的是物品编号)中出现频率超过支持度的频繁项找出来,而首先找出的单个频繁项的集合就是1-频繁项集。而2-频繁项就是某两个频繁项都同时出现在一行中并且出现频率超过支持度的,那么2-频繁项集就是这些2-频繁项的集合,依次类推,K-频繁项集就是K-频繁项的集合。
目前针对频繁项集的算法,主要有Apriori,FP-Growth和Eclat算法。
Aporiori
首先来了解一下Apriori算法的思路:Apriori算法需要对数据集进行多步处理。第一步,统计所有含一个元素项目集出现的频数,并找出那些不小于最小支持度的项目集即1-频繁项集,从第二部开始循环处理直到再没有频繁项集生成。循环过程是:第K步中,根据K-1步生成的(K-1)维频繁项集产生K候选项目集,然后对数据及进行搜索,得到候选项目集的项集支持度,与最小支持度进行对比,从而得到K-频繁项集。
FP-Grwoth
Apriori算法虽然思路很简单,但是该算法有以下缺点:(1)在每一步产生侯选项目集时循环产生的组合过多,没有排除不应该参与组合的元素;(2)每次计算项集的支持度时,都对数据集中的全部记录进行了一遍扫描比较,
由于本题中数据集较大,这样扫描下来会大大增加计算机的IO开销。这种代价会让计算机奔溃。
针对Apriori算法的性能瓶颈——需要产生大量候选集和需要重复扫描数据集,FP-growth算法应用而生。该算法只进行2次数据集扫描而且不使用候选集,直接压缩数据集成一个频繁模式树(FP树),最后通过这个FP树生成频繁项集。对于本题较大的数据集,FP-growth算法是个不错的选择。
那么首先需要理解FP树的结构和建树过程。
表1
交易ID |
物品ID |
过滤后 |
01 |
a b c e f h i k |
a b c |
02 |
b e g j m o s |
e j |
03 |
a e h j s |
a e j |
04 |
a c |
a c |
05 |
a b c j l p |
a b c j |
06 |
b e f m n o |
b e |
假设最小支持度是40%,那么b e j c的支持度就是50%,a是67%。过滤掉非频繁项集后即如上表中最后一列。并使这些元素按照出现的次序排序。
表2
元素 |
支持度 |
a |