关联规则挖掘算法之Apriori算法

  沃尔玛一家分店的营销经理对超市的销售数量进行设定跟踪,他发现了一个很奇怪的现象:啤酒与尿不湿的销量在周末总会出现成比例增长。他们立即对这个现象进行了分析和讨论,并且派出专门的人员在卖场内进行全天候的观察。他们发现这些顾客有几个共同的特点:

  • 一般是周末出现这种情况
  • 购买者以已婚男士为主
  • 他们家中有孩子且不到两岁,有尿不湿的刚需
  • 他们喜欢看体育比赛节目,并且喜欢边喝啤酒边看,顾客有喝啤酒的需求
  • 周末是体育比赛扎堆的日子,所以出现这种关联销售多在周末的时候

   这位营销经理从中受到启发,他对超市的物品摆放进行了调整,将卖场内原来相隔很远的妇婴用品区与酒类饮料区的空间距离拉近,减少顾客的行走时间,将啤酒与尿不湿摆放在一起,同时将牛肉干等一些简便的下酒食品也摆放在一起,这样全年下来,营业额增加了几百万美元。
   我们先不管这个故事的真实性与否,我们关心的是,是否能有一种较为通用的办法,从一份资料库中(如销售记录)中发现某些特征(如商品种类)之间的联系?这就是本文分享的内容——关联规则算法,它是从数据背后发现事物之间可能存在的关联或者联系

一.关联规则挖掘中的几个基本概念

(1)事务数据库:存储着二维结构的记录集。设I={i1,i,…,im}是一个全局项的集合,事务数据库D={t1,t2,…tn}是若干事务的集合,每个事务ti(1≤i≤n)都对应I上的一个子集,例如t1={Bread,Milk}。
在这里插入图片描述
(2)项集:包含0个或者多个项的集合称为项集。
(3)关联规则:表示项集之间的关系,是形如X->Y的蕴含表达式,其中X和Y是不相交的项集,X称为规则的前件,Y称为规则的后件。例如{Beer}->{Diaper}关联规则表示买啤酒的人也会购买尿布。项集和项集之间组合可以产生很多规则,但不是每个规则都是有用的,我们需要一些限定条件来帮助我们找到强度高的规则。
(4)支持度(support):表示关联数据在数据集中出现的次数或所占比例。
在这里插入图片描述
(5)置信度(confidence):表示X和Y同时出现的概率占Y出现概率的比值。
在这里插入图片描述
(6)频繁项集:在项集中频繁出现并满足最小支持度阈值的集合,例如{Milk,Bread}等。
(7)强关联规则:满足最小置信度的频繁项集。关联规则挖掘的目的就是找出强关联规则。
  目前关联规则的挖掘过程大致可以总结为两步:

  • 找出所有的频繁项集;
  • 由频繁项集产生规则,从中提取满足最小置信度的强关联规则。

二.Apriori关联规则算法

   apriori 英['eɪprɑɪ’ɔ:rɪ] 美['eɪprɪ’ɔ:rɪ] adj. 先验的; <拉>由原因推及结果的; 演绎的; 推测的;
   根据上面对于关联规则的定义,发现可以通过遍历所有组合能找到所有的频繁项集,但遍历所有组合花的时间太多、效率太低,假设有N个物品,那么一共需要计算2^(N-1)次。Apriori算法使用了基于***支持度的剪枝技术***来控制候选项集的指数级增长。原理是:

  • 如果某个项集是频繁的,那么它的所有子集也是频繁的。
  • 如果某个项集是非频繁的,那么它所有的超集也是非频繁的。

在这里插入图片描述

1.找出所有的频繁项集

  Apriori算法采用了逐层迭代的方法,先搜索出候选1项集及对应的支持度,剪枝去掉低于支持度的1项集,得到频繁1项集。然后对剩下的频繁1项集进行连接,得到候选2项集,筛选去掉低于支持度的候选2项集,得到频繁项集,以此类推,迭代下去,直到无法找到频繁k+1项集为止,对应的频繁k项集的集合即为算法的输出结果。
  可见这个算法还是很简洁的,第i次的迭代过程包括扫描计算候选i项集的支持度,剪枝得到频繁i项集和连接生成候选i+1项集三步。
在这里插入图片描述
代码如下:

def loadDataSet():
return [[1, 3, 4], [2, 3, 5], [1, 2, 3, 5], [2, 5]]
#输入数据集
#输出候选项集列表C1
def createC1(dataSet):
    C1 = []
    for transaction in dataSet:
        for item in transaction:
            if not [item] in C1:
                C1.append([item
  • 6
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值