0 前言
本人计算机研二,专业带队数学建模,长期更新建模教学,有需要的同学欢迎讨论~
本篇文章,本系列学长讲解一部分数学建模常用算法,会陆续更新每个算法的详细实现和使用教程
1 啤酒和尿布
Apriori算法是一种用于挖掘数据集内部关联规则的算法,“apriori”在拉丁语中翻译为“来自以前”,听意思你应该就能猜到了,这个算法是用先验知识来预测数据的关联规则的。
说到关联规则,有一个很有名的案例——啤酒与尿布。说,美国一家连锁店发现很多男性会在周四购买尿布和啤酒,这两种看似不相干的商品之间显现出强相关性,于是商家可以将啤酒货架放在尿布货架旁边以增加收益。
那么,啤酒与尿布的关系是如何被发现的呢?当然是通过关联算法,我们从Apriori算法开始吧,利用Apriori进行关联分析。
2 Apriori原理
先介绍两个概念
- 支持度support:数据集中包含该项集的数据所占数据集的比例,度量一个集合在原始数据中出现的频率
- 置信度confidence:是针对一条关联规则来定义的,a->b的置信度=支持度{a|b}/支持度{a},a|b表示ab的并集
关联分析有两个目标:
- 发现频繁项集(频繁项集是满足最小支持度要求的项集,它给出经常在一起出现的元素项)
- 发现关联规则(关联规则意味着元素项之间“如果…那么…”的关系)
Apriori原理
如果某个项集是频繁的,那么它的所有子集也是频繁的
如果某个项集是非频繁的,那么它的所有超集也是非频繁的
基于此,Apriori算法从单元素项集开始,通过组合满足最小支持度的项集来形成更大的集合
其实Apriori就是通过排除法来选择频繁项集和关联规则,下面我们根据这样的原理用python实现算法。
3 Apriori代码实现
3.1 挖掘频繁项集
挖掘频繁项集的逻辑如下图
#加载数据集
def loadDataSet():
return [[1,3,4],[2,3,5],[1,2,3,5],[2,5]]
#选取数据集的非重复元素组成候选集的集合C1
def createC1(dataSet):
C1=[]
for transaction in dataSet: #对数据集中的每条购买记录
for item in transaction: #对购买记录中的每个元素
if [item] not in C1: #注意,item外要加上[],便于与C1中的[item]对比
C1.append([item])
C1.sort()
return list(map(frozenset,C1))