关联规则-算法原理与案例

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关联规则-算法原理与案例相关的知识,希望对你有一定的参考价值。

参考技术A ✓ 关联规则(Association Rules)反映一个事务与其他事务之间的相
互依存性和关联性。如果两个或者多个事务之间存在一定的关联关
系,那么,其中一个事务就能够通过其他事务预测到。
✓ 关联规则是无监督的机器学习方法,用于知识发现,而非预测
✓ 关联规则的学习器(learner)无需事先对训练数据进行打标签,因
为无监督学习没有训练这个步骤。缺点是很难对关联规则学习器进
行模型评估,一般都可以通过业务经验观测结果是否合理

关联规则之前,需要理解一些基本概念。
下图数据集中,每一组数据ti表示不同的顾客一次在商场购买的商品
的集合,以该数据为例来说明关联规则相关概念。

图片显示, 表中存储着二维结构的记录集,记为D,简称事务集D,含事务的个数称为|D|。那么图片中从t1,t2,......直到t7含7个事务,|D|=7。

设I=i1,i2,…im是m个不同项目的集合,每个ik(k=1,2,…m)称为一个项目(Item),I是所有项目(Item)的集合,称为所有项集(Items)。图片中所有项集I=牛肉,鸡肉,牛奶,奶酪,靴子,衣服,其中,“牛 肉”、“鸡肉”等均为项目。

在事务数据集里的一笔记录,记为事务T,牛肉、鸡肉、牛奶便是一个事务,每个事务T(Transaction)是所有项集I的一个子集。

项目的集合简称为项集(Itemset),其元素个数为项集的长度,长度为k的项集称为k-项集(k-Itemset)。
如牛肉、鸡肉均为1-项集,牛肉、奶酪为2-项集,鸡肉、衣 服、牛奶为3-项集。

重点概念5-项集的支持度:项集支持度用于描述X的重要性,对于项集X,count为事务集D中包含X的事务的数量,项集X的支持度就是项集X出现的概率。

项集的支持度就是该项集出现的次数除以总的记录数,例如,上述的7个事务中,牛肉、鸡肉出现的次数是3次,支持度就是3/7 。

我们在发现规则的时候,希望关注频次高的项集,发现关联规则要求项集必须满足的最小支持阈值,称为项集的最小支持度(Minimum Support),记为supmin。支持度大于或等于最小支持度的项集称为频繁项集,简称频繁集,反之则称为非频繁集。支持度在这个算法中通常是人为规定的参数。

规则R的支持度是交易集中同时包含X和Y的交易数与所有交易数之比;

支持度计算在事务集中,既有A又有B的概率。
例:在7条记录中,既有牛肉又有鸡肉的记录有3条,则 R:牛肉 鸡肉的支持度为3/7,即 ,表示在所有顾客当中有3/7同时购买了牛肉和鸡肉,其反映了同时购买牛肉和鸡肉的顾客在所有顾客当中的覆盖范围。

规则R的置信度是指包含X和Y的交易数与包含X的交易数之比。

规则的置信度的意义在于项集X,Y同时出现的次数占项集X出现次数的比例,即发生X的条件下,又发生Y的概率。

关联规则的最小支持度也就是衡量频繁集的最小支持度(Minimum
Support),记为supmin,它用于衡量规则需要满足的最低重要性。
Minimum Support是一个阈值参数,必须在处理关联规则之前指定该
参数。该参数表示用户对某些项集和规则感兴趣,这些规则表示数
据集的最低支持度。它是用于对项集进行限制,而不是对规则进行
限制。

✓ 如果关联规则R: A→B满足Support(A→B )>=supmin 且
Confidence( A→B )>=confmin,则称关联规则R: 为强关联规则,否
则称关联规则为弱关联规则;
✓ 在挖掘关联规则时,产生的关联规则要经过supmin和confmin的衡量,
筛选出来的强关联规则才能用于指导商家的决策;

引入例题来计算这个概念,例:在所分析的10000个事务中,6000个事务包含计算机游戏,7500包含游戏机游戏,4000个事务同时包含两者。
下面我们计算:关联规则(计算机游戏 → 游戏机游戏)支持度=4000/10000=0.4,置信度=4000/6000=0.67,但其实这个关联规则是一个误导。

在用户购买了计算机游戏后有(4000/6000)=0.667的概率去购买游戏机游戏,而在没有任何前提条件下,用户反而有(7500/10000) =0.75的概率去购买游戏机游戏,也就是说设置了购买计算机游戏这样的条件反而会降低用户去购买游戏机游戏的概率,所以计算机游戏和游戏机游戏是相斥的。

此时需要引入提升度的概念。

如果两个条件相互独立,则P(XY)=P(X)· P(Y),即提升度为1;如果小于1,说明使用这条规则来进行推荐,还不如不推荐(推荐无效);
一般在数据挖掘中当提升度大于3时,我们才承认挖掘出的关联规则是有价值的。

上述例子中,假设购买计算机游戏为X,购买游戏机游戏为Y,则有提升度数=0.667/0.75<1

这表明这样的推荐是无效的,提升度小于1,还不如不推荐。

第一步,生成候选项集,然后根据指定的最小支持度,过滤掉非频繁项集,生成频繁项集。
该步骤需要多次遍历:第一次遍历,对所有单项的支持度进行计数并确定频繁项;在后续的每次遍历中,利用上一次遍历所得频繁项集作为种子项集,产生新的频繁项集-候选项集,并对候选项集的支持度进行计数,在本次遍历结束时统计满足最小支持度的候选项集,本次遍历对应的频繁项集就算是确定了,这些频繁项集又成为下一次遍历的种子;重复此遍历过程,直到再不能发现新的频繁项集。

第二步,找出第一步的频繁项集中的规则,然后根据指定的最小置信度,过滤掉弱规则。第一步的计算量比第二步的计算量大。

步骤1:
✓ 生成候选1-项集C1,计算支持度
✓ 根据最小支持度,生成频繁1-项集L1

步骤2:
✓ 生成候选2-项集C2,计算支持度
✓ 根据最小支持度,生成频繁2-项集L2

✓ 生成关联规则时,最简单的方法就是对于每个频繁项集,列出其所有非空
真子集,任取其中两个分别作为LHS和RHS,形成关联规则,并计算每条关
联规则的置信度,删除弱规则
✓ 上例中 , 对于频繁项集 B,C,E , 它的非空子集有 B,C,E,
B,C,B,E,C,E。据此获得的关联规则及其置信度,置信度>=50%(最小
置信度),都是强关联规则

✓ Apriori原理可以帮助减少计算量
✓ Apriori原理:某个项集是频繁的,那么它的所有子集也是频繁的;
更常用的是它的逆否命题,即如果一个项集是非频繁的,那么它的
所有超集也是非频繁的(称为项集的反单调性,向下闭合性)

已知阴影项集2,3是非频繁的。利用Apriori原理,我们知道项集0,2,3, 1,2,3以及0,1,2,3也是非频繁的。也就是说,一旦计算出了2,3的支持 度 , 知 道 它 是 非 频 繁 的 , 就 可 以 紧 接 着 排 除 0,2,3 , 1,2,3 和 0,1,2,3。

✓ 反单调性能迅速剪枝,提高搜索频繁项集的处理效率

在商品列表中找出频繁项集,构建商品列表。

创建模型,传入数据,输出的support就是支持度。

该段输出结果如下

接下来可以筛选支持度大于某特定值的二项集

输出结果

以上是关于关联规则-算法原理与案例的主要内容,如果未能解决你的问题,请参考以下文章

Apriori 关联分析算法原理分析与代码实现

关联规则挖掘算法Apriori算法

关联分析原理小结

Apriori原理与实践

关联规则挖掘算法的介绍

关联分析算法-Apriori算法