apriori算法_Apriori 算法简介及 python3实现

91f3d95c81292d86b826a72ff6ee42b0.png

【2018.12.14】代码部分已更新

【2020-10-12】本人不做 Python 语法方面的答疑,请各位读者认真打好相关基础再使用代码

1 关联规则简介

1.1 从集体智慧谈起

集体智慧(Collective Intelligence)通常含义为:为了创造新的想法而将一群人的行为、偏好或思想组合在一起,从独立的数据提供者(用户)中总结规律、经验从而得到新的结论。随着通信技术的发展,互联网重构了知识体系,让每一个用户在享受知识的同时,也在默默贡献着知识。信息的价值不由任何一个个体所决定,而是由群体的行为来确定的。“独立性”是激发群体智慧的首要条件。

当前的Internet上有大量站点正在不断从广大用户中搜集数据,越来越多的信息被制造出来,而数据科学家们则运用机器学习与统计学方法从中汲取集体智慧价值。尽管这些企业对于他们所使用的算法、模型守口如瓶,但大量成功的案例显示,其中的学习型算法功不可没。

1.2 什么是关联规则 ?

关联规则分析也称为购物篮分析,最早是为了发现超市销售数据库中不同的商品之间的关联关系。关联规则是反映一个事物与其他事物之间的关联性,若多个事物之间存在着某种关联关系,那么其中的一个事物就能通过其他事物预测到。

举个例子:菜品的合理搭配是有规律可循的。顾客的饮食习惯、菜品的荤素口味,有些菜品是相互关联的,而有些菜品之间是对立或竞争关系(负关联),这些规律都隐藏在大量的历史菜单数据中,如果能够通过数据挖掘发现客户点餐的规则,就可以快速识别客户的口味,当他下了某个菜品的订单时推荐相关联的菜品,引导客户消费,提高客户的就餐体验和餐饮企业的业绩水平。

还有个很常见的例子:啤酒与尿布

Apriori 算法是最经典也是最常用的挖掘频繁项集的算法,其核心思想是通过连接产生候选项及其支持度,然后通过剪枝生成频繁项集。

1.3 与朴素贝叶斯分类器的区别

朴素贝叶斯分类器和关联规则都是用到先验知识,但是贝叶斯是多个概率推断 True / False,关联规则是解决 A → Who 的问题。

2 相关概念

定义 1 两个不相交的非空集合

,如果有
,就说
是一条关联规则。如吃咸菜的人偏爱喝粥(
)就是一条关联规则。 关联规则的强度(可信度)用支持度(support)和自信度(confidence)来描述。

定义 2 项集

种同时发生的概率称为关联规则
的支持度(support):

最小支持度是用户或专家定义的用来衡量支持度的一个阈值,表示关联规则具有统计学意义的最低重要性。具有“统计学意义”的显著特征就是这个事件发生的概率/频率不能太低(否则就不具有推广到其他个体的价值)。

由于现实生活中,常用古典概型估计概率,因此,上式也可写为:

定义 3 项集
发生的前提下,项集
发生的概率称为关联规则
的自信度(confidence 条件概率):

最小置信度是用户或专家定义的用来衡量置信度的一个阈值,表示关联规则的最低可靠性。同理,在古典概型中,上式也可以写为:

要做的工作:

1. 生成频繁项集:

这一阶段找出所有满足最小支持度的项集(具有统计学意义的组合),找出的这些项集称为频繁项集。自信度与支持度的计算涉及到多个列表的循环,极大影响频繁项集的生成时间。

2. 生成关联规则:

在上一步产生的频繁项集的基础上生成满足最小自信度的规则,产生的规则称为强规则。

两个重要的定理:

  1. 如果一个集合是频繁项集,则它的所有子集都是频繁项集。假设一个集合{A,B}是频繁项集,则它的子集{A}, {B} 都是频繁项集。
  2. 如果一个集合不是频繁项集,则它的所有超集都不是频繁项集。假设集合{A}不是频繁项集,则它的任何超集如{A,B},{A,B,C}必定也不是频繁项集。

根据定理1和定理2易知:若

是强规则,则
都必须是频繁项集。

f2b9e9988450d46a20e547d80ab24b1e.png

3 Python3 实现

算法原理很“绕”,本文使用面向对象结构来实现,结合代码更容易理解算法的原理。

编程实现过程需要考虑元素排列顺序的问题:

在储存的时候怎么把
视为同一种候选集?本文使用如下转换方式:

'字符串'.split(',') :按 ',' 分割成列表,对列表元素可以使用 sorted 进行排序
','.join(列表或元组) :使用 ',' 作为分隔符,将列表或元组转为字符串
这样就实现了归并功能。

使用的编程语言:python3.6.4 (Anaconda3)

使用的编辑器:pycharm

使用的模块:pandas、itertools(标准库模块)

本人不做 Python 语法方面的答疑,请各位认真打好相关基础再使用代码。

# !/usr/bin/env python

参考数据文件:apriori算法实现.xlsx,该数据为某药店销售单数据,已做脱敏处理。

485d86b88ee2d607cd64679fb8ae2c1e.png
效果图——控制台

aebe93fe7abd28c95cca262226264616.png
效果图——excel表格

4 后记

参考资料 使用Apriori算法和FP-growth算法进行关联分析 - qwertWZ - 博客园

编程风格说明:最近开始学面向对象编程,笔者编程时习惯先构思好需要的函数,分为:初始化函数、工程函数,更新函数,方法函数。只有更新函数和方法函数提供对外接口。在编写的时候先写好名字、注释占位

2c80ad56e777617b8a1c3592b30bd1f8.png
刚开始写的时候

每完成一个功能,先执行一次,没有问题的话在初始化函数前面加上"__"私有化。

afd9bd898386f07dc509e4987730a9d0.png
执行部分代码

作者:张柳彬

如有疑问,请联系QQ:965579168

转载请声明出处

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值