![91f3d95c81292d86b826a72ff6ee42b0.png](https://i-blog.csdnimg.cn/blog_migrate/8a573d8a5eb980dea6c773d5d8b35a29.jpeg)
【2018.12.14】代码部分已更新
【2020-10-12】本人不做 Python 语法方面的答疑,请各位读者认真打好相关基础再使用代码
1 关联规则简介
1.1 从集体智慧谈起
集体智慧(Collective Intelligence)通常含义为:为了创造新的想法而将一群人的行为、偏好或思想组合在一起,从独立的数据提供者(用户)中总结规律、经验从而得到新的结论。随着通信技术的发展,互联网重构了知识体系,让每一个用户在享受知识的同时,也在默默贡献着知识。信息的价值不由任何一个个体所决定,而是由群体的行为来确定的。“独立性”是激发群体智慧的首要条件。
当前的Internet上有大量站点正在不断从广大用户中搜集数据,越来越多的信息被制造出来,而数据科学家们则运用机器学习与统计学方法从中汲取集体智慧价值。尽管这些企业对于他们所使用的算法、模型守口如瓶,但大量成功的案例显示,其中的学习型算法功不可没。
1.2 什么是关联规则 ?
关联规则分析也称为购物篮分析,最早是为了发现超市销售数据库中不同的商品之间的关联关系。关联规则是反映一个事物与其他事物之间的关联性,若多个事物之间存在着某种关联关系,那么其中的一个事物就能通过其他事物预测到。
举个例子:菜品的合理搭配是有规律可循的。顾客的饮食习惯、菜品的荤素口味,有些菜品是相互关联的,而有些菜品之间是对立或竞争关系(负关联),这些规律都隐藏在大量的历史菜单数据中,如果能够通过数据挖掘发现客户点餐的规则,就可以快速识别客户的口味,当他下了某个菜品的订单时推荐相关联的菜品,引导客户消费,提高客户的就餐体验和餐饮企业的业绩水平。
还有个很常见的例子:啤酒与尿布
Apriori 算法是最经典也是最常用的挖掘频繁项集的算法,其核心思想是通过连接产生候选项及其支持度,然后通过剪枝生成频繁项集。
1.3 与朴素贝叶斯分类器的区别
朴素贝叶斯分类器和关联规则都是用到先验知识,但是贝叶斯是多个概率推断 True / False,关联规则是解决 A → Who 的问题。
2 相关概念
定义 1 两个不相交的非空集合
定义 2 项集
由于现实生活中,常用古典概型估计概率,因此,上式也可写为:
要做的工作:
1. 生成频繁项集:
这一阶段找出所有满足最小支持度的项集(具有统计学意义的组合),找出的这些项集称为频繁项集。自信度与支持度的计算涉及到多个列表的循环,极大影响频繁项集的生成时间。
2. 生成关联规则:
在上一步产生的频繁项集的基础上生成满足最小自信度的规则,产生的规则称为强规则。
两个重要的定理:
- 如果一个集合是频繁项集,则它的所有子集都是频繁项集。假设一个集合{A,B}是频繁项集,则它的子集{A}, {B} 都是频繁项集。
- 如果一个集合不是频繁项集,则它的所有超集都不是频繁项集。假设集合{A}不是频繁项集,则它的任何超集如{A,B},{A,B,C}必定也不是频繁项集。
根据定理1和定理2易知:若
![f2b9e9988450d46a20e547d80ab24b1e.png](https://i-blog.csdnimg.cn/blog_migrate/ba42e0d0fa59623811d3c4064dd1f1c4.jpeg)
3 Python3 实现
算法原理很“绕”,本文使用面向对象结构来实现,结合代码更容易理解算法的原理。
编程实现过程需要考虑元素排列顺序的问题:![]()
在储存的时候怎么把视为同一种候选集?本文使用如下转换方式:
'字符串'.split(',') :按 ',' 分割成列表,对列表元素可以使用 sorted 进行排序
','.join(列表或元组) :使用 ',' 作为分隔符,将列表或元组转为字符串
这样就实现了归并功能。
使用的编程语言:python3.6.4 (Anaconda3)
使用的编辑器:pycharm
使用的模块:pandas、itertools(标准库模块)
本人不做 Python 语法方面的答疑,请各位认真打好相关基础再使用代码。
# !/usr/bin/env python
参考数据文件:apriori算法实现.xlsx,该数据为某药店销售单数据,已做脱敏处理。
![485d86b88ee2d607cd64679fb8ae2c1e.png](https://i-blog.csdnimg.cn/blog_migrate/5edd9b4f2a51383c8ba0634ea6b2c54f.jpeg)
![aebe93fe7abd28c95cca262226264616.png](https://i-blog.csdnimg.cn/blog_migrate/e20e36798cf0a1126284101c63a719fe.jpeg)
4 后记
参考资料 使用Apriori算法和FP-growth算法进行关联分析 - qwertWZ - 博客园
编程风格说明:最近开始学面向对象编程,笔者编程时习惯先构思好需要的函数,分为:初始化函数、工程函数,更新函数,方法函数。只有更新函数和方法函数提供对外接口。在编写的时候先写好名字、注释占位
![2c80ad56e777617b8a1c3592b30bd1f8.png](https://i-blog.csdnimg.cn/blog_migrate/f3b2ee106500d4f80bc39adef982f7eb.jpeg)
每完成一个功能,先执行一次,没有问题的话在初始化函数前面加上"__"私有化。
![afd9bd898386f07dc509e4987730a9d0.png](https://i-blog.csdnimg.cn/blog_migrate/7ad8eedbcad39fe3428d2f84d073591b.png)
作者:张柳彬
如有疑问,请联系QQ:965579168
转载请声明出处