1、2018/3/29,1,数据仓库与数据挖掘技术,五邑大学计算机学院 2009.05,何国辉 教授,2018/3/29,2,关联规则(Association Rule Mining)挖掘是数据挖掘中最活跃的研究方法之一最早是由R.Agrawal等人提出的其目的是为了发现超市交易数据库中不同商品之间的关联关系。一个典型的关联规则的例子是:70%购买了牛奶的顾客将倾向于同时购买面包。经典的关联规则挖掘算法:Apriori算法和FP-growth算法,第4章 关联规则挖掘 ,4.1关联规则挖掘的基本概念,2018/3/29,3,1. 购物篮分析引发关联规则挖掘的例子 问题:“什么商品组或集合顾客多半会
2、在一次购物中同时购买?”购物篮分析:设全域为商店出售的商品的集合(即项目全集),一次购物购买(即事务)的商品为项目全集的子集,若每种商品用一个布尔变量表示该商品的有无,则每个购物篮可用一个布尔向量表示。通过对布尔向量的分析,得到反映商品频繁关联或同时购买的购买模式。这些模式可用关联规则描述。,2018/3/29,4,例购买计算机与购买财务管理软件的关联规则可表示为:computer financial_management_software support=2%,confidence=60%support为支持度,confidence为置信度。该规则表示:在所分析的全部事务中,有2的事务同时购
3、买计算机和财务管理软件;在购买计算机的顾客中60也购买了财务管理软件。,2018/3/29,5,2. 关联规则关联(Associations)分析的目的是为了挖掘隐藏在数据间的相互关系,即对于给定的一组项目和一个记录集,通过对记录集的分析,得出项目集中的项目之间的相关性。项目之间的相关性用关联规则来描述,关联规则反映了一组数据项之间的密切程度或关系。,2018/3/29,6,以商场超市的市场数据库为例,形式化地描述关联规则。定义41设I=i1,i2,,im是项的集合,表示各种商品的集合;D= t1,t2,,tn为交易集,表示每笔交易的集合(是全体事务的集合)。其中每一个事务T都是项的集合,且有
4、TI。每个事务都有一个相关的唯一标识符和它对应,也就是事务标识符或TID。设X为一个由项目构成的集合,称为项集,当且仅当XT时我们说事务T包含X。项集X在在事务数据库DB中出现的次数占总事务的百分比叫做项集的支持度。如果项集的支持度超过用户给定的最小支持度阈值,就称该项集是频繁项集(或大项集)。,2018/3/29,7,关联规则是形如XY的蕴含式,其中XI,YI且XY=,则X称为规则的条件,Y称为规则的结果。如果事务数据库DB中有s%的事务包含XY,则称关联规则XY的支持度为s%。支持度是一个概率值。,2018/3/29,8,表4-1,2018/3/29,9,定义42关联规则 XY对事物集D的
5、支持度(support)定义为D中包含有事务X和Y的百分比。关联规则XY对事务集合D的置信度(confidence)定义为D中包含有X的事务数与同时包含Y的百分比。即:lsupport(XY)(包含X和Y的事务数/事务总数)100lconfidence(XY)(包含X和Y的事务数/包含X的事务数)100,2018/3/29,10,定义43置信度和支持度均大于给定阈值(即最小置信度阈值和最小支持度阈值)。即:support(XY) min_supconfidence(XY) min_conf的关联规则称为强规则;否则称为弱规则。数据挖掘主要就是对强规则的挖掘。通过设置最小支持度和最小置信度可以了
6、解某些数据之间的关联程度。,2018/3/29,11,强规则XY对应的项集(XY)必定是频繁集。因此,可以把关联规则挖掘划分为以下两个子问题:根据最小支持度找出事务集D中的所有频繁项集。核心根据频繁项集和最小置信度产生关联规则。较易,2018/3/29,12,3. 关联规则挖掘关联规则挖掘:给定一组Item和记录集合,挖掘出Item间的相关性,使其置信度和支持度分别大于用户给定的最小置信度和最小支持度。,例 购买商品事务如下表所示,设最小支持度为50%, 最小可信度为 50%, 则可得到以下关联规则:A C (50%, 66.6%)C A (50%, 100%),支持度,可信度,表4-2,20
7、18/3/29,13,4.关联规则挖掘的分类(1)基于规则中处理的变量的类别基于规则中处理的变量的类别,关联规则可以分为布尔型和数值型。布尔型关联规则:如果规则考虑的关联是项“在”或“不在”,则关联规则是布尔型的。例如,由购物篮分析得出的关联规则。量化型关联规则:如果描述的是量化的项或属性之间的关联,则该规则是量化型的关联规则。,2018/3/29,14,例如:以下是量化型关联规则的一个例子(其中X为表示顾客的变量,量化属性age 和income已经离散化):age(X,“3039”)income(“42K48K”)buys(X,“high_resolution_TV”)量化型关联规则中也可以
8、包含多种变量。例如:性别=“女”=职业=“秘书” ,是布尔型关联规则;性别=“女”=avg(月收入)=2300,涉及的收入是数值类型,所以是一个量化型关联规则。,2018/3/29,15,(2)基于规则中数据的抽象层次基于规则中数据的抽象层次,可以分为单层关联规则和多层关联规则。 单层的关联规则:所有的变量都不涉及不同抽象层次的项或属性。例如:buys(X, “computer”) buys(X, “printer”)顾客X购买的商品不涉及不同抽象层次(“computer” 和“printer”在同一个抽象层),因此是单层关联规则。多层的关联规则:变量涉及不同抽象层次的项或属性。例如:age(
9、X,“3039”)buys(X, “laptop computer”)age(X,“3039”)buys(X, “computer”)顾客X购买的商品涉及不同抽象层次(“computer” 在比“laptop computer”高的抽象层),因此是多层关联规则。,2018/3/29,16,(3)基于规则中涉及到的数据的维数基于规则中涉及到的数据的维数,关联规则可以分为单维的和多维的。 单维关联规则:处理单个维中属性间的关系,即在单维的关联规则中,只涉及到数据的一个维。例如:用户购买的物品:“咖啡=砂糖”,这条规则只涉及到用户的购买的物品。多维关联规则:处理多个维中属性之间的关系,即在多维的关联
10、规则中,要处理的数据将会涉及多个维。例如:性别=“女”=职业=“秘书”,这条规则就涉及到两个维中字段的信息,是两个维上的一条关联规则。,2018/3/29,17,给出了关联规则的分类之后,就可以考虑某个具体的关联规则挖掘算法适用于哪一类规则的挖掘,某类关联规则又可以用哪些不同的方法进行处理。最简单的是单维、单层、布尔型的关联规则。,2018/3/29,18,1. 术语关联规则挖掘即给定一组Item和记录集合,挖掘出Item间的相关性,使其置信度和支持度分别大于用户给定的最小置信度和最小支持度。,4.2关联规则挖掘的过程,2018/3/29,19,定义44在关联规则挖掘算法中,把项目的集合称为项
11、集(itemset),包含有k个项目的项集称为k-项集。包含项集的事务数称为项集的出现频率,简称为项集的频率或支持度计数。如果项集的出现频率大于或等于最小支持度s与D中事务总数的乘积,则称该项集满足最小支持度s。如果项集满足最小支持度,则称该项集为频繁项集(frequent itemset)。,2018/3/29,20,例一个食品连锁店保留着每周的事务记录,其中每一条事务表示在一项收款机业务中卖出的项目。连锁店的管理会收到一个事务汇总报告,报告表明了每种项目的销售量是多少。此外,他们要定期了解哪些项目经常被顾客一起购买。他们发现顾客购买了花生酱后,100%地会购买面包。而且,顾客购买了花生酱后
12、,有33%也购买果冻。不过,所有事务中大约只有50%包含花生酱。被用于在其中寻找关联规则的数据库可以看作为一个元组集合,每个元组包含一组项目。一个元组可能是:花生酱、面包、果冻包含三个项目:花生酱、面包、果冻每个项目表示购买的一种产品一个元组是一次购买的产品列表,2018/3/29,21,表4-3,2018/3/29,22,项目的个数成指数增长:从5个项目的集合得到31个项目集合(忽略空集),表4-4,2018/3/29,23,2关联规则的挖掘过程,最常用的关联规则挖掘方法被分解为下面两步:第1步:找出所有的频繁项集,即找出支持度大于或等于给定的最小支持度阈值的所有项集。可以从1到k递归查找k
13、-频繁项集。第2步:由频繁项集产生强关联规则,即找出满足最小支持度和最小置信度的关联规则。,找出满足定义的大项目集,从大项目集(频繁项目集)生成关联规则,2018/3/29,24,定义45大(频繁)项目集是出现次数大于阈值S的项目集。用符号L表示大项目集组成的整个集合,用表示一个特定的大项目集。一旦找出大项目集,则对于任何有趣的关联规则XY,在频繁项目集的集合中一定有XY。,任何大项目集的子集也是大的,4.3 大项目集,2018/3/29,25,关联规则中使用了大量的符号,这些符号汇总如下。一个特定符号所带的下标表示所考虑的集合的大小,例如,lk表示一个大小为k的项目集。一些算法将事务集合分为
14、若干个分区,在这种情况下,用p表示分区的数目,用上标表明分区的编号。例如,Di表示D的第i个分区。,表10-5,2018/3/29,26,找出大项目集的算法可以很简单,但代价很高。简单的方法是:对出现在事务中的所有项目集进行计数。给定一个大小为m的项目集合,共有2m个子集,去掉空集,则潜在的大项目集数为2m - 1。随着项目数的增多,潜在的大项目集数成爆炸性增长。(当m=5,为31个;当m=30,变成1073741823个)解决问题的难点:如何高效确定所有大项目集。,大部分关联规则算法都利用巧妙的方法来减少要计数的项目集。,2018/3/29,27,几个概念:潜在的大项目集称为候选。所有被计数
15、的(潜在大的)项目集的集合称为候选项目集C。关联规则使用的一个性能度量指标是C的大小。,找出所有大项目集以后,关联规则的生成变得非常直接。,2018/3/29,28,有关算法:改自AS94,用support返回输入项目集的支持度。输入:D/事务数据库I/项目集合L/大项目集s/支持度/可信度(置信度)输出:R/满足s和的关联规则集合ARGen算法:R = ;for each lL dofor each x l such that x doif support(l)/support(x) thenR = R x (l-x);,2018/3/29,29,有关算法演示:参考表4-3、4-4假定输入的
16、支持度和可信度分别为s=30%和 =50%。利用该s值得到如下大项目集的集合:L=啤酒,面包,牛奶,花生酱, 面包、花生酱查看最后一个大项目集可以生成的关联规则,其中:l = 面包、花生酱有两个非空子集: 面包和花生酱对于第一个非空子集,可得:support(面包、花生酱)/support(面包) = 60/80 = 0.75意味着关联规则:“面包花生酱”的置信度为75%,因为其置信度高于,所以是一条有效的关联规则。,2018/3/29,30,对于第二个非空子集,可得:support(面包、花生酱)/support(花生酱) = 60/60 = 1意味着关联规则:“花生酱面包”的置信度为100
17、%,也是一条有效的关联规则。,2018/3/29,31,4.4 关联规则挖掘的Apriori算法,4.4.1 Apriori算法的基本思想Apriori算法是一种最有影响的挖掘布尔关联规则大(频繁)项目集的算法。它使用一种称作逐层搜索的迭代算法,通过k-项集用于探索(k+1)-项集。已经为大部分商业产品所使用。,2018/3/29,32,Apriori算法的基本思想是:首先,通过扫描数据集,产生一个大的候选数据项集,并计算每个候选数据项发生的次数,然后基于预先给定的最小支持度生成频繁1-项集的集合,该集合记作 ;然后基于 和数据集中的数据,产生频繁2-项集 ;用同样的方法,直到生成频繁n-项集
18、,其中已不再可能生成满足最小支持度的(N+1)项集 。最后,从大数据项集中导出规则。,在第一次迭代的第一步中,产生的候选集包含所有1-项集,实为数据库中所有的项,再计算各自的支持度。,2018/3/29,33,1. 大项目集的性质,大项目集的任一子集也一定是大的。大项目集也称作是向下封闭的,如果一个项目集满足最小支持度的要求,其所有的子集也满足这一要求。其逆命题:如果知道一个项目集是小的,就不需要生成它的任何超集来作为它的候选集,因为它们也一定是小的。Apriori性质基于如下事实:根据定义,如果项集I不满足最小支持度阈值min_sup,则I不是频繁的,即sup(I) min_sup。如果将项
19、A添加到I,则结果项集(即IA)不可能比I更频繁出现。因此,IA也不是频繁的,即sup(IA) min_sup。频繁项集的Apriori性质用于压缩搜索空间(剪枝),以提高逐层产生频繁项集的效率。,Apriori算法利用了大项目集的这些性质,2018/3/29,34,用图表示上述性质,例子中有四个项目A,B,C,D,格中的线表示子集关系,大项目集的性质表明:如果原来的项目集是大的,则在路径中位于其上的任何集合也一定是大的。,A,B,C,D项目集的格结构,项目ACD的非空子集是:AC,AD,CD,A,C,D,2018/3/29,35,如果A,C,D是大的,则其每一个子集也是大的,如果其任何一个子
20、集是小的,则 A,C,D也是小的。,A,C,D的子集,项目ACD的非空子集是:AC,AD,CD,A,C,D,2018/3/29,36,按照Apriori算法:在第i趟扫描的过程中,对Ci进行计数,只有那些大的候选集被用于生成下一趟扫描的候选集,即用Li生成Ci+1。只有一个项目集的所有子集都是大的,它才被认为是候选。为了生成大小为i+1的候选,要对前一趟扫描发现的大项目集进行连接运算。表示:Lk*Lk = XY 其中 X,Y Lk,|XY|=k 1例:对表4-3进行演算,其中s=30%, =50%,2018/3/29,37,表4-3,回忆,2018/3/29,38,对表4-3采用Apriori
21、算法,为了组合出下一级候选,每个项目集除了一个项目之外,其它的项目都相同。,因为只有一个大小为2的大项目集,所以没有大小为3的候选,2018/3/29,39,4.4.2 Apriori算法中的关键步骤,Apriori算法中的关键步骤是由Lk-1找Lk,该步骤可分为两步:第1步(连接):为找Lk,通过Lk-1与自己连接产生候选K-项集的集合。将该候选项集的集合记作Ck。设l1和l2是Lk-1中的项集,记号lij表示li的第j项。执行连接Lk-1和Lk-1,其中Lk-1的元素是可连接,如果它们前(k-2)个项相同而且第(k-2)项不同(为简单计,设l1k-1l2k-1),即:l11= l21 l12=l22l1k-2=l2k-2 l1k-1ai。,