项集:最基本的模式是项集,它是指若干个项的
集合。频繁模式是指数据集中频繁出现的项集、序列或子结构。频繁项集是指支持度大于等于最小支持度(min_sup)的集合。其中支持度是指某个集合在所有事务中出现的频率。频繁项集的经典应用是购物篮模型。
简介
频繁项集挖掘是数据挖掘研究课题中一个很重要的研究基础,它可以告诉我们在数据集中经常一起出现的变量,为可能的决策提供一些支持。频繁项集挖掘是关联规则、
相关性分析、
因果关系、序列项集、局部周期性、情节片段等许多重要数据挖掘任务的基础。因此,频繁项集有着很广泛的应用,例如:购物篮数据分析、网页预取、交叉购物、个性化网站、网络入侵检测等。,对频繁项集挖掘算法进行研究的方向大概可归纳为以下四个方面:一、在遍历方向上采取自底向上、自顶向下以及混合遍历的方式;二、在搜索策略上采取深度优先和宽度优先策略;三、在项集的产生上着眼于是否会产生候选项集;四、在数据库的布局上,从垂直和水平两个方向上考虑数据库的布局。对于不同的遍历方式,数据库的搜索策略和布局方式将会产生不同的方法,研究表明,没有什么挖掘算法能同时对所有的定义域和数据类型都优于其他的挖掘算法,也就是说,对于每一种相对较为优秀的算法,它都有它具体的适用场景和环境。
有关术语
项的集合称为项集。包含k个项的项集称为k-项集。项集的出项频率是包含项集的事务数,简称为项集的
频率,支持度计数或计数。注意,定义项集的支持度有时称为相对支持度,而出现的频率称为绝对支持度。如果项集I的相对支持度满足预定义的最小支持度阈值,则I是频繁项集。
置信度,是指某个关联规则的概率,可以用P(B|A)表示。
关联规则,表示的是在某个频繁项集的条件下推出另一个频繁项集的概率。如果该关联规则的置信度大于等于最小置信度,则为强关联规则。
闭频繁项集(closed frequent itemset):当项集X是频繁项集,且数据集D中不存在X的真超集Y,使得X和Y的支持度相等,则X是闭频繁项集。闭频繁项集的表示是无损压缩,不会丢失支持度的信息。通过闭频繁项集可以反推出所有的频繁项集以及相应的支持度。
极大频繁项集(maximal frequent itemset):当项集X是频繁项集,且数据集D中不存在X的真超集Y,使得Y是频繁项集,则X是极大频繁项集。极大频繁项集的表示是有损压缩,失去了频繁项集的支持度信息,我们可以根据极大频繁项集判断任意项集是否是频繁的,但无法得到相应的支持度。
最大规则对象数:规则中对象组所包含的最大对象数量。
最小支持:规则中对象或是对象组必顸匹配的最低案例数。
最小信心水准:计算规则所必须匹配的最低信心水准门槛。
关联规则学习
关联规则学习(Association rule learning)是一种在大型数据库中发现变量之间的有趣性关系的方法。它的目的是利用一些有趣性的量度来识别数据库中发现的强规则。基于强规则的概念,Rakesh Agrawal等人引入了关联规则以发现由超市的POS系统记录的大批交易数据中产品之间的规律性。例如,从销售数据中发现的规则 {洋葱, 土豆}→{汉堡} 会表明如果顾客一起买洋葱和土豆,他们也有可能买汉堡的肉。此类信息可以作为做出促销定价或产品植入等营销活动决定的根据。除了上面购物篮分析中的例子以外, 关联规则如今还被用在许多应用领域中,包括网络用法挖掘、入侵检测、连续生产及生物信息学中。与序列挖掘相比,关联规则学习通常不考虑在事务中、或事务间的项目的顺序。
频繁项集挖掘算法
关联规则挖掘的整个过程主要分两步来完成:第一步是找出数据库中所有满足最小支持度阈值的频繁项集;第二步是由频繁项集产生所有满足最小置信度阈值的关联规则。由于关联规则挖掘的整体性能主要是由第一步的性能所决定,因此,关联规则挖掘的关键和难点都集中在了频繁项集的挖掘上。随着关联分析技术的不断发展,众多的研究学者提出了许多优秀的频繁项集挖掘算法,包括单机(single-machine)挖掘算法、基于MPI(Message Passing Interface)的挖掘算法、基于 Map Reduce 的挖掘算法和基于Spark 的挖掘算法。单机(single-machine)挖掘算法指的是运行在一台机器上的频繁项集挖掘算法,它们的特点是数据量小,对机器的内存大小和计算性能要求不高,在一台机器上即可完成挖掘任务。一些经典的算法,如 Apriori和 FP-growth 等经典的频繁项集挖掘算法,都是单机频繁项集挖掘算法。MPI 的全称是Message Passing Interface,它是一种消息传递标准,同时也是一项被广泛采用的并行编程技术。基于MPI的频繁项集挖掘算法都是一些并行算法,它们的特点是各个计算节点并行地挖掘频繁项集,因此算法的效率很高。但是它们也有很多的缺点,比如:没有容错能力、节点之间需要进行大量的通信等等,这些缺点严重影响了算法的性能。
Spark 是一个基于内存计算的通用大数据处理引擎,用于大量数据的迭代计算。所以,需要进行迭代计算的频繁项集挖掘算法,如Apriori算法,非常适合基Spark来设计和实现。因此,基于Spark的频繁项集挖掘算法,都是Apriori 算法的改进算法。它们的优点是挖掘效率很高,并且容错能力强。但是,它们需要产生大量的候选项集,且各节点之间需要进行大量的通信。
Map Reduce是
Hadoop下的一种编程模型,用于大量数据的分布式批处理。基于Map Reduce的频繁项集挖掘算法效率很高,但是磁盘I/O开销大,且节点之间的通信负载高,集群的负载均衡较难把握。