关联规则及Apriori算法Python实例

关联规则学习概述

在大型数据库中发现变量之间有趣关系的方法,目的是利用一些有趣的度量识别数据库中的强规则。基于强规则的概念,Rakesh Agrawal等人引入了关联规则以发现由超市的POS系统记录的大批交易数据中产品之间的规律性。例如,从销售数据中发现的规则{薄饼,鸡蛋}->{火腿肠},表明如果顾客一起买薄饼和鸡蛋,他们也有可能买火腿肠(这些顾客是想早饭吃手抓饼吧,哈哈),此类信息可以为大卖场商品组合促销电商网站产品推荐等相关商业决策提供依据。除了上述的购物篮分析外,关联规则还被应用在许多领域中,包括网络用法挖掘(web usage mining)、入侵检测、连续生产(continuous production)及生物信息学中,与序列挖掘(sequence mining)相比,关联规则学习通常不考虑在事务(transaction)中或事务间项目(item)的顺序。

基本概念

I = { I 1 , I 2 , . . . , I m } I =\{I_1, I_2, ..., I_m\} I={I1,I2,...,Im}项目(item)的集合。给定一个交易数据库 D = { t 1 , t 2 , . . . , t n } D = \{t_1, t_2, ..., t_n\} D={t1,t2,...,tn},其中每个事务(transaction) t t t I I I的非空子集,即, t ⊆ I t \subseteq I tI,每一个事务都与一个唯一的标识符TID(transaction ID)对应。

关联规则是形如 X ⇒ Y X \Rightarrow Y XY的蕴含式,其中 X , Y ⊆ I X, Y \subseteq I X,YI X ∩ Y = ∅ X \cap Y=\emptyset XY= X X X Y Y Y分别称为关联规则的先导(antecedent或left-hand-side,LHS)和后继(consequent或right-hand-side,RHS)。

关联规则 X ⇒ Y X \Rightarrow Y XY D D D中的支持度(support)是 D D D中包含 X ∪ Y X \cup Y XY的事务所占的比例,即概率 P ( X ∪ Y ) P(X\cup Y) P(XY)置信度(confidence)是包含 X X X的事务中同时包含 Y Y Y的比例,即条件概率 P ( Y ∣ X ) P(Y|X) P(YX)。如果同时满足最小支持度阈值(minimum support)和最小置信度阈值(minimum confidence),则认为关联规则是有用的,上述两个阈值由用户或专家根据经验或者需要设定

举例说明概念

表1:关联规则的简单例子
TID网球拍网球运动鞋羽毛球
11110
21100
31000
41010
50111
61100

上表是顾客购买记录的数据库 D D D,包含6个事务,项集 I = { 网 球 拍 , 网 球 , 运 动 鞋 , 羽 毛 球 } I = \{网球拍,网球,运动鞋,羽毛球\} I={},考虑关联规则 { 网 球 拍 ⇒ 网 球 } \{网球拍 \Rightarrow 网球\} {},事务 1 , 2 , 3 , 4 , 6 1,2,3,4,6 1,2,3,4,6包含网球拍,事务 1 , 2 , 6 1,2,6 1,2,6同时包含网球拍和网球,
支 持 度 ( s u p p o r t ) = 同 时 包 含 网 球 和 网 球 拍 的 事 务 数 事 务 总 数 = 3 6 = 0.5 支持度(support) = \frac{同时包含网球和网球拍的事务数}{事务总数}=\frac{3}{6}=0.5 support==63=0.5
置 信 度 ( c o n f i d e n c e ) = 同 时 包 含 网 球 和 网 球 拍 的 事 务 数 包 含 网 球 拍 的 事 务 数 = 3 5 = 0.6 置信度(confidence) = \frac{同时包含网球和网球拍的事务数}{包含网球拍的事务数}=\frac{3}{5}=0.6 confidence==53=0.6
如果给定的最小支持度(minimum support) α = 0.5 \alpha = 0.5 α=0.5和最小置信度(minimum confidence) β = 0.5 \beta = 0.5 β=0.5,则关联规则 { 网 球 拍 ⇒ 网 球 } \{网球拍 \Rightarrow 网球\} {}是有趣的,认为购买网球拍和购买网球之间存在强关联。

求解算法

常用的自动从事务集中挖掘关联规则的算法有Apriori 算法和FP-Growth算法。两个求解算法的原理请自行查找相关资料了解。

Python实例

1. Apriori

pip install efficient-apriori

from efficient_apriori import apriori
transactions = [('eggs', 'bacon', 'soup'),
                ('eggs', 'bacon', 'apple'),
                ('soup', 'bacon', 'banana')]
itemsets, rules = apriori(transactions, min_support=0.5, min_confidence=0.5)

print(rules) 
# output: [{eggs} -> {bacon}, {bacon} -> {eggs}, {soup} -> {bacon}, {bacon} -> {soup}]
print(itemsets)
# output: {1: {('soup',): 2, ('bacon',): 3, ('eggs',): 2}, 2: {('bacon', 'eggs'): 2, ('bacon', 'soup'): 2}}

2. FP-Growth(该包目前有bug,不建议使用)

pip install fpgrowth_py

from fpgrowth_py import fpgrowth
itemSetList = [['eggs', 'bacon', 'soup'],
                ['eggs', 'bacon', 'apple'],
                ['soup', 'bacon', 'banana']]
freqItemSet, rules = fpgrowth(itemSetList, minSupRatio=0.5, minConf=0.5)
print(rules)
# output: [[{'eggs'}, {'bacon'}, 1.0], [{'bacon'}, {'eggs'}, 0.6666666666666666], [{'soup'}, {'bacon'}, 1.0], [{'bacon'}, {'soup'}, 0.6666666666666666]]
print(freqItemSet)
# output: [{'eggs'}, {'eggs', 'bacon'}, {'soup'}, {'soup', 'bacon'}, {'bacon'}]

参考资料

  1. 关联规则学习
  2. FP Growth: Frequent Pattern Generation in Data Mining with Python Implementation
  3. Efficient-Apriori
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值