1.关联规则和频繁项集
(1)关联规则的一般形式
项集A、B同时发生的概率称为关联规则的支持度(也称相对支持度)。
项集A发生,则项集B发生的概率为关联规则的置信度。
(2)最小支持度和最小置信度
最小支持度是用户或专家定义的衡量支持度的一个阈值,表示项目集在统计意义上的最低重要性;最小置信度是用户或专家定义的衡量置信度的一个阈值,表示关联规则的最低可靠性。同时满足最小支持度阈值和最小置信度阈值的规则称作强规则。
(3)项集
项集是项的集合。包含k个项的项集称为k项集,如集合{牛奶,麦片,糖}是一个3项集。
项集的出现频率是所有包含项集的事务计数,又称作绝对支持度或支持度计数。如果项集I的相对支持度满足预定义的最小支持度阈值,则I是频繁项集。频繁k项集通常记作k。
(4)支持度计数
项集A的支持度计数是事务数据集中包含项集A的事务个数,简称为项集的频率或计数。
已知项集的支持度计数,则规则AB的支持度和置信度很容易从所有事务计数、项集A和项集A∪B的支持度计数推出。
也就是说,一旦得到所有事务个数,A,B和A∩B的支持度计数,就可以导出对应的关联规则AB和BA,并可以检查该规则是否是强规则。
在Python中实现上述Apriori算法的代码如代码清单5-6所示。其中,我们自行编写了Apriori算法的函数apriori.py,读者有需要的时候可以直接使用,此外可以参考代码读懂实现过程。
代码清单5-6 Apriori算法调用代码
#-*- coding: utf-8 -*- #使用Apriori算法挖掘菜品订单关联规则 from __future__ import print_function import pandas as pd from apriori import * #导入自行编写的apriori函数 inputfile = '../data/menu_orders.xls' outputfile = '../tmp/apriori_rules.xls' #结果文件 data = pd.read_excel(inputfile, header = None) print(u'\n转换原始数据至0-1矩阵...') ct = lambda x : pd.Series(1, index = x[pd.notnull(x)]) #转换0-1矩阵的过渡函数 b = map(ct, data.as_matrix()) #用map方式执行 data = pd.DataFrame(list(b)).fillna(0) #实现矩阵转换,空值用0填充 print(u'\n转换完毕。') del b #删除中间变量b,节省内存 support = 0.2 #最小支持度 confidence = 0.5 #最小置信度 ms = '---' #连接符,默认'--',用来区分不同元素,如A--B。需要保证原始表格中不含有该字符 find_rule(data, support, confidence, ms).to_excel(outputfile) #保存结果
代码详见:示例程序/code/cal_apriori.py
运行结果如下。
support confidence e---a 0.3 1.000000 e---c 0.3 1.000000 c---e---a 0.3 1.000000 a---e---c 0.3 1.000000 a---b 0.5 0.714286 c---a 0.5 0.714286 a---c 0.5 0.714286 c---b 0.5 0.714286 b---a 0.5 0.625000 b---c 0.5 0.625000 b---c---a 0.3 0.600000 a---c---b 0.3 0.600000 a---b---c 0.3 0.600000 a---c---e 0.3 0.600000
其中,e---a表示e发生能够推出a发生,置信度为100%,支持度为30%;b---c---a表示b、c同时发生时能够推出a发生,置信度为60%,支持度为30%等。搜索出来的关联规则不一定具有实际意义,需要根据问题背景筛选适当的有意义的规则,并赋予合理的解释。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论