机器学习(十):Apriori算法

Apriori算法是经典的关联规则挖掘算法,通过支持度和置信度度量发现频繁项集和关联规则。文章介绍了算法原理,通过迭代找到频繁项集,并给出Python代码实现。
摘要由CSDN通过智能技术生成

更多内容关注公众号:数学的旋律
在这里插入图片描述


tb店铺搜:FUN STORE玩物社,专业买手挑选送礼好物

引言

    Apriori算法是第一个关联规则挖掘算法。它基于Apriori原理,用支持度做度量,迭代产生频繁项集;对频繁项集,使用置信度做度量,最后发现关联规则。
    本文用到的部分术语已在简介中介绍(具体看‘基本概念-关联分析’),这里不再重述。

一、Apriori原理

    如果一个项集是频繁的,则它的所有子集一定也是频繁的;相反,如果项集是非频繁的,则它的所有超集也一定是非频繁的。



二、发现频繁项集

    假定事务总数为N,支持度阈值是minsup,发现频繁项集的过程如下(理论上,存在许多产生候选项集的方法,本例使用支持度阈值来产生):
    ①初始时每个项都被看作候选1-项集。计数对它们的支持度之后,将支持度少于阈值的候选项集丢弃,生成频繁1-项集。
    ②在第二次迭代,依据Apriori原理(即所有非频繁的1-项集的超集都是非频繁的),仅使用频繁1-项集来产生候选2-项集。此时生成的候选2-项集有多个,将支持度少于阈值的候选项集丢弃,生成频繁2-项集。
    ③经过多次迭代,每次用上一次生成的频繁n-项集产生新的候选(n+1)-项集,直至没有发现频繁(n+1)-项集,则得到的频繁n-项集就是最终结果。
例1
下图是一个购物篮事务的例子。

TID 项集
1 {面包,牛奶}
2 {面包,尿布,啤酒,鸡蛋}
3 {牛奶,尿布,啤酒,可乐}
4 {面包,牛奶,尿布,啤酒}
5 {面包,牛奶,尿布,可乐}
假定支持度阈值是60%,相当于支持度计数为5*60%=3。
    ①初始时每个项都被看作候选1-项集,即候选1-项集={面包,牛奶,尿布,啤酒,鸡蛋,可乐},其中{可乐}和{鸡蛋}出现的事务少于3,即支持度少于支持度阈值,丢弃得频繁1-项集={面包,牛奶,尿布,啤酒}。
    ②由于只有4个频繁1项集,因此算法产生的候选2-项集的数目为 C 4 2 = 6 C_4^2=6 C42=6。计算它们的支持度后,发现这6个候选项集中的2个{啤酒,面包}和{啤酒,牛奶}是非频繁的,丢弃得频繁2-项集={面包,牛奶},{面包,尿布},{牛奶,尿布},{啤酒,尿布}。
    ③用频繁2-项集生成候选3-项集(将含有1个相同项的集合合并),得到候选3-项集={面包,牛奶,尿布},{面包,啤酒,尿布},{牛奶,啤酒,尿布};丢弃支持度少于支持度阈值的项,最后得频繁3-项集为空集,则可得频繁2-项集={面包,牛奶},{面包,尿布},{牛奶,尿布},{啤酒,尿布}为最终结果。


三、发现关联规则

    发现关联规则是指找出支持度大于等于minsup并且置信度大于等于minconf的所有规则,其中minsup和minconf是对应的支持度阈值和置信度阈值。
    设Y是频繁项集,关联规则可以这样提取:将项集Y划分成两个非空的子集X和Y-X,使得X->Y-X满足置信度阈值(注意:这里的规则必然已经满足支持度阈值,因为它们是由频繁项集产生的)。
例2
设Y={1,2,3}是频繁项集,可以由Y产生6个候选关联规则:{1,2}->{3},{1,3}->{2},{2,3}->{1},{1}->{1,2},{2}->{1,3},{3}->{1,2}。6个候选关联规则中满足置信度阈值的关联规则,就是我们最终需要的结果。




四、代码实现(python)

以下代码来自Peter Harrington《Machine Learing in Action》。
代码如下(保存为apriori.py)

# -- coding: utf-8 --<
  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值