文章目录

  • 一、理论知识
    • 1.1、定义
    • 1.2、关联规则
    • 1.3、频繁项集的产生
  • 二、python实战

一、理论知识

许多商业企业在运营中积累了大量的数据。例如:普通超市的收银台每天都会收集到大量的用户购物数据。下表给出一个这样的例子,通常称为购物篮事务。每一行代表一个事务,包含唯一标识id和顾客购买的商品的集合。零售商对分析这些数据会感兴趣,因为这样可以了解到用户的购物行为,可以使用这种有价值的信息来支持各种商务应用,如市场促销,库存管理等。

TID 项集
1 {黄油 ,苹果,香蕉}
2 {面包,牛奶,苹果}
3 {面包,黄油,苹果}
4 {黄油,苹果,香蕉}
5 {牛奶,香蕉}

这篇博客主要讲解关联分析的方法。用于发现隐藏在大型数据集中的有意义的联系。发现的联系可以利用关联规则或频繁项集的形式表示。例如,从上表中可以提取出如下规则:{面包}->{苹果},这个规则表示买了面包的人同时也买了苹果,继而可以发现新的交叉销售商机。

1.1、定义

  • 二元表示:
    购物篮数据可以用下表的二元形式来表示,每行表示一个事务,每一列表示一个项集。项可以用二元值表示,若项在事务中出现,则表示为1,否则为0。
牛奶 苹果 面包 香蕉 黄油
1 0 1 0 1 1
2 1 1 1 0 0
3 0 1 1 0 1
4 0 1 0 1 1
5 1 0 0 1 0
  • 项集:关联分析中,包含0个或多个项的集合被称为项集。如果一个项集中包含k个项,则称其为k项集。例如:{苹果,面包,牛奶}是一个3项集。
  • 支持度计数:项集在事务中出现的次数即为支持度计数。例如:上面的二元表中,项集{面包,苹果}在5个事务中出现了2次,所以它的支持度计数就为2。

1.2、关联规则

  • 关联规则是形如X->Y的蕴含表达式,其中X和Y是不相交的项集,即它们的交集为空。关联规则的强度可以利用支持度和置信度度量。支持度确定给定数据集的频繁程度,而置信度确定Y在包含X的事务中出现的频繁程度。
  • 支持度(support)和置信度(confidence)的定义如下:N表示事务数量,N()表示项集在事务中出现的次数
    s(X→Y)=N(XUY)N,c(X→Y)=N(XUY)N(X)s(X→Y)=\frac{N(XUY)}{N},c(X→Y)=\frac{N(XUY)}{N(X)}s(X→Y)=NN(XUY)​,c(X→Y)=N(X)N(XUY)​
  • 提升度(lift):lift(X→Y)=c(X→Y)s(Y)=N(XUY)/N(X)N(Y)/Nlift(X→Y)=\frac{c(X→Y)}{s(Y)}=\frac{{N(XUY)}/{N(X)}}{N(Y)/N}lift(X→Y)=s(Y)c(X→Y)​=N(Y)/NN(XUY)/N(X)​,如果lift=1lift=1lift=1说明X和Y没有任何关联,如果lift<1lift<1lift<1,说明X和Y是排斥的,如果lift>1lift>1lift>1,我们认为X和Y是有关联的。
    例如:上面的例子中:牛奶出现在2个事务中,那么{牛奶}的支持度就是2/5=0.4;苹果出现在包含牛奶的事务中出现了1次,那么规则{牛奶}→{苹果}的置信度为1/2=0.5,规则{牛奶}→{苹果}的提升度为0.5/(4/5)=0.625。
  • 给定事务的集合T,关联规则发现是指找出支持度大于等于minsup且置信度大于等于minconf的所有规则,其中minsup和minconf是对应的支持度和置信度的阈值即设置的最小支持度和最小置信度。
  • 为什么使用支持度和置信度呢?
    • 支持度是一种重要度量值,因为支持度很低的规则可能知识偶尔出现,从商务角度看,低支持度的规则多半是无意义的,因为对顾客很少同时购买的商品进行促销活动并无益处。因此支持度,通常是删掉那些无意义的规则。
    • 置信度度量通过规则推理具有可靠性。对于给定的规则X→Y,置信度越高,说明Y在包含X的事务中出现的可能性就越大。置信度也可以估计Y在条件X下的条件概率。
  • 提升度存在的意义:
    置信度用于评估规则的可信程度,但是该度量有一个缺点,没有考虑规则后件的支持度问题,例如在下表中:

    规则{茶}→\rightarrow→{咖啡}的支持度为150/1000=15%,置信度为150/200=75%,先不考虑支持度,只看置信度会觉得比较高,因为可能会认为爱喝茶的人一般也爱喝咖啡。我们再来看一下喝咖啡的人的支持度,达到800/1000=80%,比规则{茶}→\rightarrow→{咖啡}的置信度75%高,这说明什么问题?并不是爱喝茶的人一般爱喝咖啡,从而使得规则置信度高,而是爱喝咖啡的人本身就很多,所以这条规则是一个误导。由于置信度存在的缺陷,人们又提出了称作提升度的度量。
  • 强关联规则:
    • 对于给定的规则X→Y,如果规则同时满足support(X→Y)>=minsupsupport(X→Y)>=minsupsupport(X→Y)>=minsup和confidence(X→Y)>=minconfconfidence(X→Y)>=minconfconfidence(X→Y)>=minconf,那么称规则X→Y为强关联规则,否则为弱关联规则。

1.3、频繁项集的产生

  • 先验原理:如果一个项集是频繁的,那么该项集的所有子集一定也是频繁的。
  • Apriori算法是第一个关联挖掘算法,使用基于支持度的剪枝技术。对于例子来说,假定支持度阈值为60%,相当于最小支持度计数为3。
  • 如图:初始将每个项作为一个候选1-项集,对他们的支持度计数之后,候选项集{牛奶}和{面包}被丢弃,因为它们的计数均小于3;第二次迭代,仅使用频繁集1-项集来产生2-项集,因为先验原理保证2-项集的所有子集均属于频繁集,因为只有3个频繁1-项集,所以从3个中选择两个产生2-项集,2项集数目为C32=3C^2_3=3C32​=3,计算它们在所有事务中的支持度,发现2-项集中频繁项集只有一个{苹果,黄油};最终的频繁项集就是{苹果,黄油}。

二、python实战

import numpy as np
import pandas as pd
from mlxtend.frequent_patterns import apriori
from mlxtend.frequent_patterns import association_rules  #关联规则data = pd.read_csv('GoodsOrder.csv',sep=',',index_col=0,encoding='gbk')
df = pd.crosstab(index=data.index,columns=data.goods)
df
goods   牛奶  苹果  面包  香蕉  黄油
row_0
1   0   1   0   1   1
2   1   1   1   0   0
3   0   1   1   0   1
4   0   1   0   1   1
5   1   0   0   1   0frequent=apriori(df,min_support=0.3,use_colnames=True) #设置最小支持度为0.3,求频繁项集,显示列标签名
rules=association_rules(frequent,metric='confidence',min_threshold=0) #置信度大于0.5,求关联规则
rules.sort_values(by='confidence',ascending=False)

  • 结果解释:三项集中置信度最高的是(黄油,香蕉)→(苹果)( 黄油,香蕉 )\rightarrow(苹果)(黄油,香蕉)→(苹果)和(苹果,香蕉)→(黄油)( 苹果,香蕉 )\rightarrow(黄油)(苹果,香蕉)→(黄油),项集(黄油,香蕉)→(苹果)( 黄油,香蕉 )\rightarrow(苹果)(黄油,香蕉)→(苹果)说明在购买了黄油和香蕉的前提下,一定会购买苹果;且它们的提升度>1,说明有着较强的相关性。
  • 列名含义:针对规则{A}->{B},总事务数为N
列名 解释 公式
antecedents 前件 A
consequents 后件 B
antecedent support 前件支持度 support(A)=N(A)/Nsupport(A)=N(A)/Nsupport(A)=N(A)/N
consequent support 后件支持度 support(B)=N(B)/Nsupport(B)=N(B)/Nsupport(B)=N(B)/N
support 规则支持度 support(A→B)=N(A,B)/Nsupport({A}\rightarrow{B})=N(A,B)/Nsupport(A→B)=N(A,B)/N
confidence 置信度 confidence(A→B)=N(A,B)/N(A)confidence({A}\rightarrow{B})=N(A,B)/N(A)confidence(A→B)=N(A,B)/N(A)
lift 提升度 lift(A→B)=confidence(A→B)/support(B)lift({A}\rightarrow{B})=confidence({A}\rightarrow{B})/support(B)lift(A→B)=confidence(A→B)/support(B)
leverage 杠杆率 leverage(A→B)=support(A→B−support(A)∗support(B))leverage({A}\rightarrow{B})=support({A}\rightarrow{B}-support(A)*support(B))leverage(A→B)=support(A→B−support(A)∗support(B))
conviction conviction(A→B)=1−support(B)1−confidence(A→B)conviction({A}\rightarrow{B})=\frac{1-support(B)}{1-confidence({A}\rightarrow{B})}conviction(A→B)=1−confidence(A→B)1−support(B)​

参考:
《数据挖掘导论》 范明 译

数据挖掘之关联分析Apriori算法相关推荐

  1. 关联分析——Apriori算法

    Apriori 算法详解 当我们在百度搜索里输入一个单词或单词一部分的时候,搜索引擎会自动补全查询词项,比如:输入"机器",百度下拉词项中就会出现"机器人编程" ...

  2. 关联分析(Apriori算法) 面包 牛奶 尿布 啤酒 ...

    关联分析时,需要处理两个关键问题 1 大量数据集中发现模式,计算代价高 2 某些模式可能是虚假的,因为他们是偶然发生的 关联分析例题:从这个商品记录得出顾客喜欢同时购买那几样东西 TID 面包 牛奶 ...

  3. 【机器学习】关联分析Apriori算法详解以及代码实现

    Apriori算法以及统计学基础 什么是关联分析 简单的统计学基础 Apriori输出频繁集 从频繁项集中挖掘关联规则 什么是关联分析 从大规模数据集中寻找物品间的隐含关系被称作关联分析.而寻找物品的 ...

  4. 44 R关联分析——Apriori算法

    install.packages("gridBase") install.packages("arules") install.packages("a ...

  5. 实验六、数据挖掘之关联分析

    实验六.数据挖掘之关联分析 一.实验目的 1. 理解Apriori算法的基本原理 2. 理解FP增长算法的基本原理 3. 学会用python实现Apriori算法 4. 学会用python实现FP增长 ...

  6. 数据挖掘之关联分析(实验展示以及源代码)

    数据挖掘之关联分析 算法实现:Apriori算法和FP-growth 算法 源代码 简单描述下,关联分析概念 关联分析概念主要参考下面的博文 原文:https://blog.csdn.net/qq_4 ...

  7. 挖掘频繁模式、关联和Apriori算法

    挖掘频繁模式.关联和Apriori算法 1. 引入 1.1 基本概念 频繁模式:频繁出现在数据集中的模式 频繁模式挖掘:获取到给定数据集中反复出现的联系 注:模式其实可以理解为,你在淘宝购物,你的购物 ...

  8. 河北工业大学数据挖掘实验三 应用 Apriori 算法挖掘频繁项集

    河北工业大学数据挖掘实验三 应用 Apriori 算法挖掘频繁项集 一.实验目的 二.实验原理 1.Apriori 算法 2.提高频繁项集逐层产生的效率 三.实验内容和步骤 1.实验内容 2.实验步骤 ...

  9. 【数据挖掘】关联规则挖掘 Apriori 算法 ( Apriori 算法过程 | Apriori 算法示例 )

    文章目录 一. Apriori 算法过程 二. Apriori 算法示例 参考博客 : [数据挖掘]关联规则挖掘 Apriori 算法 ( 关联规则简介 | 数据集 与 事物 Transaction ...

最新文章

  1. 神童、数学家、抑郁症患者,控制论之父诺伯特·维纳的一生
  2. 如何配置一台计算机预计3500元,玩游戏用的电脑主机应该怎么配置?3500元组装游戏电脑主机配置推荐...
  3. iis日志转到sql存储
  4. 小师妹学IO系列文章集合-附PDF下载
  5. Json、Gson、Jackson
  6. 【渝粤题库】陕西师范大学210002儿童文学 作业(高起专、高起本、专升本)
  7. 是人是谁_谁是白鹤滩最可爱的人
  8. 基于docker搭建zookeeper集群、kafka集群(多台真机之间的集群)
  9. python 生成器 generator
  10. axure 发布 主页_车队如何在黑鸟APP发布同城活动?教程来了!
  11. 数据科学包1---numpy
  12. 阿里云推出香港高防IP服务 为中国企业出海安全护航
  13. ajax 循环php数组,jQuery通过ajax请求php遍历json数组到table中的代码(推荐)
  14. 贝叶斯网络分析软件Netica
  15. 联想笔记本系统重装,联想电脑重装系统
  16. 阿帕奇apache-apollo-1.7.1-windows-distro
  17. python 线性插值处理_python线性插值解析
  18. phpnow安装教程
  19. 曲面积分(Surface Integral)
  20. linux批量筛选序列变异位点,找变异流程之snp_call –WES学习之路

热门文章

  1. OS WDM OPM OSW 知识总结
  2. 论文汇网站第三期改版完成
  3. 国标28181:接收设备注册
  4. springboot集成通用mapper与分页助手时报错,java.lang.NoSuchMethodException: com.github.abel533.provider.....
  5. 7个资源丰富到爆的搜索网站,没有你找不到的资源!
  6. 手把手教你用Python爬中国电影票房数据
  7. 设置服务器连接信息是什么情况,了解有关设置 IMAP 服务器连接的更多信息
  8. 厦门大学计算机专业周奕毅,厦门大学2020年博士后招收计划[010].PDF
  9. “1万起投,年化达8%”?天安金交中心卖力“吆喝”的产品,是“香”还是“坑”?
  10. 小梅哥FPGA学习笔记——状态机设计学习