小故事:20世纪90年代,沃尔玛超市在对顾客的购物记录进行购物篮分析时,发现了一个奇怪的现象: “啤酒”和“尿布”两件看上去毫无关系的商品,经常出现在同一个购物篮中。通过关联分析,确实能发现事物之间一些令人意外的“关系”。依据这些“关系”,可以引导卖家调整营销策略,把关联程度较高的商品打包在一起,提高销量。或者针对买家已购买的产品,推荐与之相关的其他产品或信息,精准营销。
数据挖掘方法——关联分析(Apriori算法)
一、Apriori 算法可以做什么工作?二、Apriori 算法三、Python调用apriori()函数四、Apriori生成器说明五、练习一、Apriori 算法可以做什么工作?
关联分析是一门分析技术,用于发现大量数据中,各组数据之间的联系。关联分析是探索数据之间联系的技术,而数据之间的联系,我们用关联规则来表示,表达式为:{X}→{Y}(X 和 Y 之间不存在相同项)。大多数的关联分析工作,主要任务就是生成频繁项集和关联规则,从而发现隐藏的关联关系。现实工作中的“项”(商品)成百上千,真实的“事务”(交易)数以万计,确认频繁项集合关联规则,提高计算效率可以使用Apriori算法。
二、Apriori 算法
Apriori是用于挖掘出数据背后的关联规则的一种算法,它的流程可分为两步:(1)确定最小支持度和置信度;(2)找出所有频繁项集和强关联规则。
Apriori 的算法主要依赖两个性质:
(1)一个项集如若是频繁的,那它的非空子集也一定是频繁的。假如购买{薯条,奶茶}的概率都很高,那购买{薯条}或{奶茶}的概率肯定也很高。
(2)一个项集如若是非频繁的,那包含该项集的项集也一定是非频繁的。假设购买{薯条}的次数少,那购买{薯条,奶茶}的次数肯定也少。
在 Apriori 算法出现之前,要找出所有的频繁项集,就得先枚举所有的项集,计算它们的支持度,然后和最小支持度(0.2)进行对比,筛选出频繁项集。
三、Python调用apriori()函数
Python 调用 apriori()函数
apriori(transactions, min_support, min_confidence, min_lift)
transactions:事务集合,值可以是嵌套列表或者Series对象
min_support:最小支持度,默认0.1
min_confidence:最小置信度,默认0
min_lift:最小提升度,默认为0
# 导入 apyori 模块下的 apriori() 函数from apyori import apriori# 创建4条快餐交易数据orders = [['薯条', '可乐'], ['薯条', '可乐', '奶茶'], ['汉堡', '薯条', '可乐'], ['汉堡', '可乐']]# 创建变量 results,调用 apriori() 函数,传入 orders ,设置最小支持度为 0.2,最小置信度为 0.7results = apriori(orders, min_support = 0.2, min_confidence = 0.7)# 查看变量 resultsprint(results) # <generator>是一个生成器对象,它是一种用于节省空间的运算机制,可以通过循环遍历的形式对它里面的数据进行访问for result in results:print(result)
四、Apriori生成器说明
1.结果都包含在一个 RelationRecord()中,括号里面有很多很长的内容;
2.RelationRecord(items=frozenset({‘可乐’, ‘薯条’}), support=0.75, ordered_statistics=[OrderedStatistic(items_base=frozenset(), items_add=frozenset({‘可乐’, ‘薯条’}), confidence=0.75, lift=1.0), OrderedStatistic(items_base=frozenset({‘可乐’}), items_add=frozenset({‘薯条’}), confidence=0.75, lift=1.0), OrderedStatistic(items_base=frozenset({‘薯条’}), items_add=frozenset({‘可乐’}), confidence=1.0, lift=1.0)])
RelationRecord:关系记录
items:频繁项集
support:频繁项集支持度
ordered_statistics:统计列表,指频繁项集可生成的强关联规则(描述关联规则)
items_base:前件
items_add:后件
confidence:置信度
lift:提升度
3.强关联规则:OrderedStatistics
前件:{‘可乐’}
后件:项集{‘薯条’}的规则
置信度:0.75
提升度:1.0
五、练习
# 创建4条早餐店交易数据breakfast = [['豆浆', '油条', '麻球'], ['豆浆', '热干面', '面包'], ['豆浆', '肠粉', '油条'], ['咖啡', '面包'], ['豆浆', '油条']]results_bre = apriori(breakfast, min_support = 0.5) # results_brefor result in results_bre:# print(result)support = round(result.support, 3)for rule in result.ordered_statistics:head_set = list(rule.items_base)tail_set = list(rule.items_add)if head_set == []:continuerelated_catogory = str(head_set) + '→' + str(tail_set)confidence = round(rule.confidence, 3)lift = round(rule.lift, 3)print(related_catogory, support, confidence, lift)
未完待续
5月15日青海·西宁
如果觉得《轻松入门机器学习数据挖掘算法——关联分析(Apriori算法)》对你有帮助,请点赞、收藏,并留下你的观点哦!