一、关联规则简述

  • 关联规则是一种在大型数据库中发现事物之间相关性的方法,这里的事物有产品、 事件,比如什么商品会被一起购买。
  • 当某件事发生时,其他事件也会发生,这种联系称为关联。所谓关联分析,就是指如果两个事物或者多个事物之间存在-定的关联,那么其中一个事物就能通过其他事物进行预测,它的目的是为了挖掘隐藏在数据间的规律和相关关系,根据 挖掘结果,设计促销组合方案,实现销量的提升。
  • 比较常见的场景就是“购物篮分析” , 这个场景可以从消费者交易记录中发掘商品与商品之间的关联关系,分析顾客的购买习惯,进而通过商品捆绑销售或者相关推荐的方式带来更多的销售量。所以说,关联规则挖掘是个非常有用的技术。

二、关联规则

关联规则可以表示为一个形如X➡Y的蕴含表达式,其中X和Y是不相交的项集。

例如:
{牛奶, 尿布} ➡ {啤酒}

2.1.项与项集


数据库中不可分割的最小单位信息,也叫项目,用符号i表示

项集
项的集合就是项集, 设集合I= {i1,i2,i3,…ik}是项集,I中项目个数为k,集合称为k-项集。

eg: {牛奶,面包,尿布} 是一个项集

2.2.事务

  • 假设I= {i1,i2,i3,…ik}是数据库中所有项构成的集合,给定一个交易数据库D,每个事务(Transaction)t是1的子集,每一个交易都与一个唯一的标示符TID (Transaction ID) 对应。
  • 例如,顾客一次购买多种商品,这些购物信息在数据库中有一个唯一 标示,用来标示这些商品是同一顾客同一次购买的,称该用户的本次购物活动对应一个事务。


在本图中有1-5个事务,I={面包,牛奶,尿布,啤酒,鸡蛋,可乐}

2.3.三个重要概念

1)支持度

(是个百分比,它指的是某个商品组合出现的次数与总次数之间的比例)

支持度表示项集在整个D中出现的频率,假定D中含有N条数据,支持度的计算公式为:

Sup(X)=sum(X)/N

最小支持度

  • 关联规则的最小支持度就是衡量频繁集的最小支持度(Minimum Support),它用于衡量规则需要满足的最低重要性。
  • Support(X)大于或者等于最小支持度阈值minsup的项集X称为频繁项集,也可以说X是频繁的。

设minsup=50%,那么频繁项集为:{A:3,B:3,D:4,E:3,AD:3}

  • 最小支持度是一个阈值参数,它必须在处理关联模型之前指定该参数。该参数表示用于只对某些项集和规则感兴趣,这些规则表示数据集的最低支持度。

2)置信度

(它指的就是,当你购买了商品A,会有多大的概率购买商品B)

置信度表示为规则X➡Y 。

  • 它指的就是当你购买了商品X,会有多大的概率购买商品Y。
  • 置信度的值表示是X和V的支持度与X的支持度的比例。
  • 假定D中含有N条数据,那么置信度的计算公式为:

Conf(X➡Y)=sup(XUY)/Sup(X)

从概率学的角度来讲,就是发生X的条件下,又发生Y的概率。

最小置信度

  • 关联规则的最小置信度(Minimun Confidence)记作confmin,它表示关联规则需要满足的最低可靠性。
  • 最小置信度是一个阈值参数,必须在运行算法前指定该参数,它表示用户只对某些规则感兴趣,这些规则要拥有比较高的概率,而不是很小的概率。

3)提升度

(提升度代表的是 “商品A的出现,对商品B的出现概率提升的”程度。)
提升度(A→B)=置信度(A→B)/支持度(B)

仅仅使用支持度和置信度是否可靠?

  • 食堂买饭,在1000份打饭记录中,买米饭的有800人,买牛肉的有600人,两个同时买的有400人。
  • 那么牛肉和米饭的关联规则有(牛肉→米饭)
    Sup({牛肉,米饭}) = 400/1000=0.4
    Conf(牛肉→米饭)= Sup({牛肉,米饭}/Sup(牛肉)= 400/600= 0.67
  • 置信度和支持度都很高,但这样的推荐没有意义。
  • 无任何条件下,买米饭的概率都为P(米饭)=800/1000= 0.8
    基于冷门产品去推荐热门产品,效果不好。

提升度可以用来判断规则X➡Y中的X和Y是否独立,如果独立,那么该规则是无效的

提升度计算如下:

Lift(X➡Y)=Conf(X➡Y)/Sup(Y)=sup(XUY)/Sup(X)xSup(Y)

  • 该值等于1,说明两个条件没有任何联系,即X和Y相互独立。
  • 小于1,说明X和Y是负向关系,意味着一个的出现可能会导致另一个不出现。
  • 大于1,才是我们所关心的规则,一般大于3的规则,挖掘出来的比较有价值。

在上一个例子中。牛肉为X,米饭为Y,Lift(牛肉➡米饭)=0.67/0.80 <1,该推荐没有意义

2.4.购物篮分析案例

在这个例子中, “牛奶”出现了4次,那么这5笔订单中,Sup({牛奶}) = 0.8。

  • Sup({牛奶, 面包})= 0.6。
  • Conf(牛奶→面包) = 0.6/0.8 = 0.75。
  • Lift(牛奶→面包)= 0.75/0.8<1, 那么Rule:牛奶-→面包,这条规则就不应该采纳,即购买了牛奶的用户,不用推荐面包。
  • Sup(啤酒))= 0.6, Sup({啤酒, 鸡蛋})=0.2。
  • Conf(啤酒→鸡蛋)= 0.2/0.6= 1/3, Lift(啤酒→鸡蛋)= 1.67。
  • Rule :啤酒→鸡蛋,这条规则可以考虑采纳,即购买了啤酒的用户,推荐鸡蛋给该用户。

2.5.关联规则总结

  • 置信度是对关联规则的准确度的衡量,支持度是对关联规则重要性的衡量。支持度说明了这条规则在所有事务中有多大的代表性。
  • 显然支持度越大,关联规则越重要。有些关联规则置信度虽然很高,但支持度却很低,说明该关联规则实用的机会很小,因此也不重要。
  • 提升度(Lift) ,表示关联规则A→B的“提升”。如果提升度不大于 1,则此关联规则就没有意义了
  • 给定一组事务T,关联规则挖掘的目标是找到具有:支持度≥minsup阈值,置信度≥minconf阈值。若同时满足上述两点,则称该规则在数据库中成立

三、频繁项集的产生

大多数关联规则挖掘算法通常采用的一种策略是,将关联规则挖掘任务分解为如下两个重要的子任务:

  1. 频繁项集的产生:其目标是发现满足最小支持度阈值的所有项集,这些项集乘坐频繁项集。
  2. 规则的产生:其目标是从每个频繁项集中提取所有高置信度的规则,这些规则称作强规则。
    通常,频繁项集产生所需的计算开销远大于生产规则所需的计算开销。

3.1格结构

格结构常常被用来枚举所有可能的项集,上图显示I={A,B,C,D,E}的项集格。一般来说,一个包含d项的数据集可能包含2的d次方的频繁项集(包括一个空集)。

发现发现频繁项集的一种原始方法是确定格结构中每个候选项集的支持度计数。为了完成这一任务, 必须将每个候选项集与每个事务进行比较,如上图所示。如果候选项集包含在事务中,则候选项集的支持度计数增加。例如,由于项集{bread,milk}出现在事务1, 4和5中,其支持度计数将增加3次。

这种方法的开销可能非常大,因为它需要进行O(NMw)次比较,其中N是事务数,M=2d2^{d}2d是候选项集数,而w是事务的最大宽度。

有几种方法可以降低产生频繁项集的计算复杂度

  1. 减少候选集的数目:
    完全搜索: M=2d2^{d}2d
    使用修剪技术减少M
  2. 减少比较次数(NM) :
    不需要将每个候选集与每个事务匹配
    使用更高级的数据结构,或者存储集或者压缩数据集

3.2先验原理

先验原理
如果一个项集是频繁的,则它的所有子集一定也是频繁的 ➡ 如果项集的子集不频繁,则该项集必定不频繁
假定{CDE}是频繁项集,显而易见,任何包含{CDE}的事务一定包含它的子集{C,D},{C,E},{D,E},{C},{D},{E},这样,如果{CDE}是频繁的,则他的所有子集一定也是频繁的

相反,如上图所示,如果项集{A,B}是非频繁的,则它的超集{A,B,C,D},{A,B,C,E},{A,B,D,E},{A,B,C},{A,B,D},{A,B,E}也一定是非频繁的。则整个包含{A,B}的超集可以被立即减枝。

这种支持度度量剪指数搜索空间的策略称为基于支持度的剪枝。 这种剪枝策略依赖于支持度度量的一个关键性质,即一个项集的支持度决不会超过它的子集的支持度。这个性质也称支特度度量的反单调性

3.3Apriori算法的频繁项集产生

Apriori算法是一个关联规则挖掘算法,它使用基于支持度的剪枝技术,系统地控制候选项集指数增长。图给出Apriori算法频繁项集产生部分的一个高层实例。假定支持度阈值是60%,相当于最小支持度计数为3。

初始时每个项都被看作候选1-项集。对它们的支持度计数之后,候选项集{可乐}和{鸡蛋}被丢弃,因为它们出现的事务少于3个。

在下一次迭代,仅使用频繁1-项集来产生候选2-项集,因为先验原理保证所有非频繁的1-项集的超集都是非频繁的。由于只有4个频繁1-项集,因此算法产生的候选2-项集的数目为C2 4 = 6。

计算它们的支持度值之后,发现这6个候选项集中的2个,{啤酒,面包}和{啤酒,牛奶}是非频繁的。

剩下的4个候选项集是频繁的,因此用来产生候选3-项集。不使用基于支持度的剪枝,使用该例给定的6个项,将形成C3 6 = 20个候选项集。依据先验原理,只需要保留其子集都频繁的候选3-项集。具有这种性质的唯一候选是{面包, 尿布,牛奶}。

案例小结:
通过计算产生的候选集数目,可以看出先验剪枝策略的有效性。枚举所有项集产生41个候选,使用先验原理将减少为13个候选。在此例中,候选集的数目降低了68%
上图为Apriori算法产生频繁项集部分的伪代码,令Ck为候选集k-项集的集合,而Fk为频繁项集k-项集的集合。

Apriori算法的频繁项集产生的部分有两个重要的特点:

第一,它是一个逐层算法,即从频繁1-项集到最长的频繁项集,它每次遍历项集格中的一层;第二,它使用产生测试策略来发现频繁项集。在每次迭代之后,新的候选项集都由前一次迭代发现的频繁项集产生,然后对每个候选的支持度进行计数,并与最小支持度阈值进行比较。该算法需要的总迭代次数是Kmax+1,其中Kmax是频繁项集的最大长度。

3.4候选的产生与剪枝

在伪代码中步骤5的apriori-gen函数通过如下两个操作产生候选项集:

  1. 候选项集的产生:该操作由前一次迭代发现的频繁(k-1)-项集产生新的候选k-项集
  2. 候选项集的剪枝:该操作采用基于支持度的剪枝策略,删除一些候选k-项集

算法需确定k-项集X={i1,i2…ik)的候选集是否都是频繁的,如果有一个是非频繁的则X会被立即剪枝。

对有效选集的要求:

  1. 避免产生太多不必要的候选
    不必要的候选:至少有一个子集是非频繁的
  2. 确保候选项集的集合是完全的
    不遗漏任何可能的频繁项集
  3. 不重复产生候选项集
    {a, b, c, d }可能会通过多种方法产生: 合并{a, b, c}和{d },合并{b, d}和{a, c},合并{c}和{a, b, d }

候选产生的过程

  • 蛮力方法

把所有的k-项集都看作可能的候选,然后使用剪枝策略除去不必要的候选

  • Fk-1xF1方法

用一个频繁(K-1)-项集和一个频繁1-项集构造一个候选, 然后剪枝除去不必要的候选

  • Fk-1xFk-1方法
    令A = {a1, a2,…, ak-1}和B = {b1, b2,…, bk-1}是一对频繁(k-1)-项集,合 并A和B,如果它们满足如下条件:
    ai = bi (i =1, 2,…, k-2) 并且 ak-1 > bk-1

3.5支持度计数

支持度计数过程确定在apriori- gen函数的候选项剪枝步骤保留下来的每个候选项集出现的频繁程度。支持度计数在算法伪代码的第6步到第11步实现。

支持度计数的一种方法是,将每个事务与所有的候选项集进行比较,并且更新包含在事务的候选项集的支持度计数。这种方法是计算昂贵的,尤其当事务和候选项集的数目都很大时。

另一种方法是枚举每个事务所包含的项集,并且利用它们更新对应的候选项集的支持度。例如,考虑事务t,它包含5个项{1,2,3,5,6}。该事务包含C3 5 =10个大小为3的项集,其中的某些项集可能对应于所考察的候选3-项集,在这种情况下,增加它们的支持度。那些不与任何候选项集对应的事务t的子集可以忽略。
例如,第一层1【2 3 5 6】表示从1开始,后随两个取自集合{2,3,5,6}的项的3-项子集。

确定的第一项之后,第二层的前缀结构表示选择第二项的方法。12【3 5 6】表示以{1,2}为前缀,后随项3、5或6的项集。

最后,第三层的前缀结构显示了事务t包含的所有的3-项集。例如,{1,2}为前缀的项集是{1,2,3},{1,2,5}和{1,2,6}

使用Hash树进行支持度计算


上图是一棵Hash树结构的例子。树的每个内部结点都使用Hash函数h§ = p mod 3来确定应当沿着当前结点的哪个分支向下。例如,项1, 4和7应当散列到相同的分支(即最左分支),因为除以3之后它们都具有相同的余数。所有的候选项集都存放在Hash树的叶结点中。图显示的Hash树包含15个候选3~项集,分布在9个叶结点中。

考虑一个事务 t={1,2, 3, 5, 6}。为了更新候选项集的支持度计数,必须这样遍历Hash树:所有包含属于事务t的候选3-项集的叶结点至少访问一次。注意,包含在1中的候选3-项集必须以项1,2或3开始,这样,在Hash树的根结点,事务中的项1,2和3将分别散列。项1被散列到根结点的左子女,项2被散列到中间子女,而项3被散列到右子女。在树的下一层,事务根据图6-9中的第二层结构列出的第二项进行散列。例如,在根结点散列项1之后,散列事务的项2、3和5。项2和5散列到中间子女,而3散列到右子女。

继续该过程,直至到达Hash树的叶结点。存放在被访问的叶结点中的候选项集与事务进行比较,如果候选项集是该事务的子集,则增加它的支持度计数。在这个例子中,访问了9个叶结点中的5个,15 个项集中的9个与事务进行比较。

过程总结如下图:

3.6计算复杂度

Apriori算法的计算复杂度受如下因素影响:

  • 最小支持阈值的选择:
    降低支持阈值会导致更多的频繁项集,这可能会增加候选项的数量和频繁项集的最大长度,算法需要扫描数据集的次数也增多
  • 数据集的维数(项目数) :
    随着项数增加,需要更多空间来存储每个项目的支持度计数。
    如果频繁项的数量也增加,计算量和I/O成本也可能增加。
  • 事务数:
    由于Apriori算法反复扫描数据集,算法的运行时间会随着事务数的增加而增加
  • 事务的平均宽度:
    对于密集数据集,事务的平均宽度可能很大,这将在两个方面影响Apriori算法的复杂度。
    首先,频繁项集的最大长度随着数据集的平均宽度而增加,因此在候选项产生和支持度计数时需考察更多候选项集。
    其次,随着事务宽度的增加,事务中将包含更多项集,这将增加支持度计数时Hash树的遍历次数。

四、规则产生

关联规则可以这样提取:将频繁项集L划分成两个非空子集,一个是f,一个是L – f。 求出所有非空子集f ⊂ L,使得f ➡ L – f 满足置信度阈值。


忽略前件或后件为空的规则,如果|L|=k,每个频繁k-项集能够产生多达2k2^{k}2k-2个关联规则。

4.1基于置信度的剪枝

  • 置信度不具备支持度度量那样的反单调性

c(ABC ➡D) 可能大于或小于(AB ➡D)

  • 但由同一项集生成的规则的置信度具有反单调性
    L = {A,B,C,D}:
    c(ABC ➡ D) ≥ c(AB ➡ CD) ≥ c(A ➡ BCD)

    上图:如果规则格中的任意结点具有低置信度,则可以立即剪掉该结点生成的整个子图。假设规则{BCD}➡{A}具有低置信度,则可以丢弃后件包含A的所有规则,包括{CD}➡{AB}, {BD }➡{AC}, {BC}➡{AD}和{D}➡{ABC}等。

4.2Apriori算法的规则生成


Apriori算法使用一种逐层方法来产生关联规则,其中每层对应于规则后件中的项数。提取规则后件最初只含有一个项的所有高置信度规则,然后,使用这些规则来产生新的候选规则。

例如,{CD}➡{AB} 和 {BD}➡{AC} 是两个高置信度规则,通过合并这两个规则的后件产生候选规则{D} ➡{ABC},如果其子集{AD}➡{BC}不具有高置信度,则删减规则{D}➡{ABC}

五、FP增长算法

FP增长算法不同于Apriori算法的“产生-测试”范型,而是使用一种称作FP树的紧凑型数据结构组织数据,并直接从该结构中提取频繁项集

5.1FP树表示法

FP树是一种输入数据的压缩表示,它通过逐个读入事务,并把每个事务映射到FP树中的一条路径来构造。由于不同的事务可能会有若千个相同的项,因此它们的路径可能部分重叠。路径相互重叠越多,使用P树结构获得的压缩的效果越好。如果FP树足够小,能够存放在内存中,.就可以直接从这个内存中的结构提取频繁项集,而不必重复地扫描存放在硬盘上的数据。
1.扫描一次数据集,确定每个项的支持度计数。丢弃非频繁项集。对于本数据集,I2是最频繁的项,依次是I1,I3,I4,I5
2.第二次扫描数据集,构建FP树。读入第一个事务{I1,I2,I5}之后,创建标记为I1,I2,I5的结点,然后形成null➡I2➡I1➡I5路径,对该事务编码,该路径上所有结点的频度计数为1
3.读入第二个事务{I2,I4},与第一个事务共享一个共同前缀I2,所以第二个事务的路径null➡I2➡I4与第一个事务的路径null➡I2部分重叠。所以结点I2的频度计数增加为2,新创建的结点I4的频度计数为1.
4.继续该过程,直到每个事务都映射到FP树的一条路径

5.2FP增长算法的频繁项集产生

FP增长是一种以自底向上方式探索树,由FP树产生频繁项集的算法。
给定上图所示的树,算法首先查找以I5结尾的频繁项集,接下来依次是I3,I1,I2
由于每一个事务 都映射到FP树中的一条路径, 因而通过仅考察包含特定结点(例如I5)的路径,就可以发现以I5结尾的频繁项集。使用与结点I5相关联的指针,可以快速访问这些路径。
发现了I5结尾的频繁项集后,算法通过处理与结点I3相关联的路径,进一步寻找以I2结尾的频繁项集,继续该过程,直到处理了所有与结点I5,I3,I1,I2相关联的路径为止。

5.3FP增长算法的优点

  • 分治:

根据已经得到的频繁模式划分任务和数据库
导致较小的数据库的聚焦的搜索

  • 其它因素

没有候选产生, 没有候选测试
压缩数据库 : FP-树结构
不重复地扫描整个数据库
基本操作—局部频繁项计数和建立子FP-树, 没有模式搜索和匹配

六、关联模式的评估

6.1兴趣因子

关联规则茶➡咖啡


6.2相关分析

6.3IS度量

七、课后作业

现有A、B、C、D、E五种商品的交易记录表,找出所有频繁项集,假设最小支持度>=50%,最小置信度>=50%

:本题可以采用Apriori算法产生频繁项集,步骤如下

1.初始时每个项都被看作候选1-项集。对它们的支持度计数之后,候选项集{D}被丢弃。


2. 在下一次迭代,仅使用频繁1-项集来产生候选2-项集。计算它们的支持度值之后,丢弃选项集{A,B}和{A,E},因为他们支持度<50%


3.剩下的4个候选项集是频繁的,因此用来产生候选3-项集。依据先验原理,只需要保留其子集都频繁的候选3-项集。


4.{A,B,C}和{A,C,E}的支持度<50%,故唯一候选是{B,C,E}。

计算置信度:

数据挖掘课程笔记--关联分析相关推荐

  1. 【Python数据挖掘课程笔记】八.关联规则挖掘及Apriori实现购物推荐

    #2018-03-23 10:48:40 March Friday the 12 week, the 082 day SZ SSMR[Python数据挖掘课程笔记]八.关联规则挖掘及Apriori实现 ...

  2. 数据挖掘课程笔记6 : Numpy、Pandas和Matplotlib包基础知识

    #2018-03-22 10:23:16 March Thursday the 12 week, the 081 day SZ SSMR http://blog.csdn.net/eastmount/ ...

  3. 大数据学习笔记之三十七 数据挖掘算法之关联分析

    数据挖掘中算法分为三种:关联分析.聚类分析和预测模型,本篇主要是为了介绍关联分析相关的知识

  4. 数据挖掘技术之关联分析

    转载自:http://blog.sina.com.cn/s/blog_6002b97001014niv.html 3.关联分析 3.1.基本概念 (1)通常认为项在事物中出现比不出现更重要,因此项是非 ...

  5. 数据挖掘课程笔记--分类(4)朴素贝叶斯

    零.前言 在很多应用中,属性集和类变量之间的关系是不确定的.换句话说,尽管测试记录的属性集和某些训练样例相同,但是也不能正确地预测它的类标号.这种情况产生的原因可能是噪声,或者出现了某些影响分类的因素 ...

  6. 【独家】一文读懂关联分析

    前言 关联分析是数据挖掘中一项基础又重要的技术,是一种在大型数据库中发现变量之间有趣关系的方法.说到数据挖掘的案例,相信很多人都会首先想到沃尔玛超市发现购买尿布的顾客通常也会购买啤酒,于是把啤酒和尿布 ...

  7. python机器学习案例系列教程——关联分析(Apriori、FP-growth)

    全栈工程师开发手册 (作者:栾鹏) python数据挖掘系列教程 关联分析的基本概念 关联分析(Association Analysis):在大规模数据集中寻找有趣的关系. 频繁项集(Frequent ...

  8. UCAS - AI学院 - 自然语言处理专项课 - 第7讲 - 课程笔记

    UCAS-AI学院-自然语言处理专项课-第7讲-课程笔记 形态分析.汉语分词与词性标注 概述 英语形态分析 汉语自动分词 概要 性能评价方法 未登录词识别 现状和未来 词性标注 形态分析.汉语分词与词 ...

  9. 【笔记3-6】CS224N课程笔记 - RNN和语言模型

    CS224N(六)Recurrent Neural Networks and Language Models 语言模型 语言模型介绍 n-gram 基于窗口的神经语言模型 RNN RNN Loss a ...

最新文章

  1. html5日期转long
  2. oracle 延迟段,oracle - 未启用延迟段创建功能(ORA-00439) - 堆栈内存溢出
  3. Python 的数据类型
  4. 阿里云MongoDB,一直被模仿,从未被超越
  5. TypeError: 'builtin_function_or_method' object has no attribute '__getitem__'的解决方法等
  6. 访问index.php跳转,打开index.php后,跳转到/user/login.html
  7. 造车大军再添一员!消息称滴滴正式启动造车项目
  8. 智能算法——遗传算法原理、应用汇总
  9. (保姆级)Oracle的下载及安装详细教程
  10. 手机远程计算机桌面,win10系统下手机远程连接电脑桌面方法
  11. python同构数_怎么用python判断一个数是否是同构数?
  12. SLAM常见面试题集锦
  13. SpringCloud基础学习
  14. GitHub创建仓库
  15. 抖音扫码跳转QQ群等外链源代码分享
  16. 大学四年,我做过哪些兼职
  17. 乐高机器人纲要_人工智能与机器人课程纲要
  18. C语言拯救者(程序的预处理、编译、链接与宏- -15)
  19. 三款国产操作系统使用初步体验
  20. Codeforces - Bombs

热门文章

  1. 乌合之众-大众心理研究(五)
  2. pytest学习:setup、teardown、setup_class、teardown_class的区别
  3. 此共享需要过时的SMB1协议及centos6.8的samba3升级samba4.0
  4. jpi多表联查_sql 多表联查询
  5. 米的换算单位和公式_小学数学单位换算公式大全
  6. [paper]Intriguing properties of neural networks(L-BFGS)
  7. iOS 导入自定义字体不生效
  8. 要求输出国际象棋棋盘
  9. 函数的定义、调用和声明
  10. 洗头冲水时冲下好些头发,我是要秃了吗?