关联规则挖掘算法之Apriori算法
Apriori算法是一种挖掘关联规则的频繁项集算法,其核心思想是通过候选集生成和情节的向下封闭检测两个阶段来挖掘频繁项集。
关于这个算法有一个非常有名的故事:"尿布和啤酒"。故事是这样的:美国的妇女们经常会嘱咐她们的丈夫下班后为孩子买尿布,而丈夫在买完尿布后又要顺 手买回自己爱喝的啤酒,因此啤酒和尿布在一起被购买的机会很多。这个举措使尿布和啤酒的销量双双增加,并一直为众商家所津津乐道。
关联规则应用:
1. Apriori算法应用广泛,可用于消费市场价格分析,猜测顾客的消费习惯,比如较有名的“尿布和啤酒”的故事;
2.网络安全领域中的入侵检测技术;
3.可用在用于高校管理中,根据挖掘规则可以有效地辅助学校管理部门有针对性的开展贫困助学工作;
4.也可用在移动通信领域中,指导运营商的业务运营和辅助业务提供商的决策制定。
关联规则算法的主要应用是购物篮分析,是为了从大量的订单中发现商品潜在的关联。其中常用的一个算法叫Apriori先验算法。
项集:在关联分析中,包含0个或多个项的集合被称为项集(itemset)。如果一个项集包含k个项,则称它为k-项集。例如:{啤酒,尿布,牛奶,花生} 是一个4-项集。空集是指不包含任何项的项集。
关联规则(association rule):是形如 X → Y 的蕴含表达式,其中X和Y是不相交的项集,即:X∩Y=∅。关联规则的强度可以用它的支持度(support)和置信度(confidence)来度量。
支持度:一个项集或者规则在所有事物中出现的频率,确定规则可以用于给定数据集的频繁程度。σ(X):表示项集X的支持度计数
项集X的支持度:s(X)=σ(X)/N;规则X → Y的支持度:s(X → Y) = σ(X∪Y) / N
通俗解释:简单地说,X==>Y的支持度就是指物品集X和物品集Y同时出现的概率。
概率描述:物品集X对物品集Y的支持度support(X==>Y)=P(X n Y)
实例说明:某天共有1000 个顾客到商场购买物品,其中有150个顾客同时购买了圆珠笔和笔记本,那么上述的关联规则的支持度就是15%。
置信度:确定Y在包含X的事务中出现的频繁程度。c(X → Y) = σ(X∪Y)/σ(X)
通俗解释:简单地说,可信度就是指在出现了物品集X 的事务T 中,物品集Y 也同时出现的概率有多大。
概率描述:物品集X对物品集Y的置信度confidence(X==>Y)=P(X|Y)
实例说明:上该关联规则的可信度就回答了这样一个问题:如果一个顾客购买了圆珠笔,那么他也购买笔记本的可能性有多大呢?在上述例子中,购买圆珠笔的顾客中有65%的人购买了笔记本, 所以可信度是65%。
定义:设W 中有e %的事务支持物品集B,e %称为关联规则A→B 的期望可信度度。
通俗解释:期望可信度描述了在没有任何条件影响时,物品集B 在所有事务中出现的概率有多大。
实例说明:如果某天共有1000 个顾客到商场购买物品,其中有250 个顾客购买了圆珠笔,则上述的关联规则的期望可信度就是25 %。
概率描述:物品集A对物品集B的期望置信度为support(B)=P(B)
定义:提升度是可信度与期望可信度的比值
通俗解释:提升度反映了“物品集A的出现”对物品集B的出现概率发生了多大的变化。
实例说明:上述的关联规则的提升度=65%/25%=2.6
概率描述:物品集A对物品集B的期望置信度为lift(A==>B)=confidence(A==>B)/support(B)=p(B|A)/p(B)
支持度是一种重要的度量,因为支持度很低的规则可能只是偶然出现,低支持度的规则多半也是无意义的。因此,
支持度通常用来删去那些无意义的规则;
置信度度量是通过规则进行推理具有可靠性。对于给定的规则X → Y,置信度越高,Y在包含X的事物中出现的可能性就越大。即Y在给定X下的条件概率P(Y|X)越大。
一句话关联规则:关联规则是展现项集(itemsets)间关联(association)与相关性(correlation)的规则!
如何来度量一个规则是否够好?
有两个量,置信度(Confidence)和支持度(Support)。
支持度:就是概率(一项就是其出现的概率,多项就是其同时出现的概率)
置信度:条件概率(A出现后,B也出现的概率)
总之,可信度是对关联规则的准确度的衡量,支持度是对关联规则重要性的衡量。支持度说明了这条规则在所有事务中有多大的代表性,显然支持度越大,关联规则越重要。有些关联规则可信度虽然很高,但支持度却很低,说明该关联规则实用的机会很小,因此也不重要。
在关联规则挖掘中,满足一定最小置信度以及支持度的集合成为频繁集(frequent itemset),或者强关联。关联规则挖掘则是一个寻找频繁集的过程。
几个重要公式:
P(A)是包含A项的case(这里的cases即为数据库中的transaction每笔交易记录)百分比或概率!
使用Aprior算法挖掘频繁项集,关联规则或者关联超边(hyperedge),Aprior算法运用逐层(level-wise)方法搜索频繁项集。
#####用法说明
apriori(data, parameter = NULL, appearance = NULL, control = NULL)
#####参数说明
Data:交易数据(transactions)类对象或任何能够被转化成transaction的数据结构
Parameter:APparameter类对象或命名列表。挖掘规则默认的行为是:支持度=0.1;置信度=0.8;输出的最大规则长度;
Appearance:APappearance类对象或命名列表。
Control:APcontrol类对象或命名列表。控制挖掘算法的性能!
####细节说明
APparameter中minlen(最小规则数)默认的值是1,这意味着将会产生只有一项(item:比如,先前项/LHS)的规则:{}=>{beer}—这项规则说明,no matter what other items are involved the item in the RHS will appear with the probability given by the rule's confidence (which equals the support)。如果想要避免这些规则,可以使用参数:parameter=list(minlen=2)!
####返回值说明:返回一个rules类对象或itemsets类对象。
实例:
library(arules) #载入arules包
library(grid)
library(arulesViz) # 加载可视化包
data("SunBai") #一个小例子数据库作为类的一个对象提供的加权关联规则挖掘
summary(SunBai) #summary的结果和具体含义如##中所示
#探索和准备数据:
#(1)事务型数据每一行指定一个单一的实例,每条记录包括用逗号隔开的任意数量的产品清单
# 通过inspect()函数可以看到超市的交易记录,每次交易的商品名称;
# 通过summary()函数可以查看该数据集的一些基本信息。
#总共有6条交易记录transaction,8个商品item。density=0.375表示在稀疏矩阵中1的百分比。最频繁出现的商品item,以及其出现的次数。可以计算出最大支持度。
# 每笔交易包含的商品数目,以及其对应的5个分位数和均值的统计信息。如:一条交易包含一件商品;一条包含两件;两条包含三件;一条包含四件;一条包含五件。其下统计信息表明:最低一次交易只含一件商品,第一分位数是2.25,意味着25%的交易包含不超过2.25个item。中位数是3表面50%的交易购买的商品不超过3件。
<注> lhs=left hand side;rhs=right hand side.
2)关联规则—调整参数
#如果只想检查其它变量和客户是否幸存的关系,那么需要提前设置变量rhs=c("Survived=No", "Survived=Yes")
inspect(SunBai[1:5]) #通过inspect函数查看SunBai数据集的前5次交易记录
itemFrequency(SunBai[,1:3]) #itemFrequency()函数可以查看商品的交易比例
itemFrequencyPlot(SunBai,support = 0.1) # support = 0.1 表示支持度至少为0.1
itemFrequencyPlot(SunBai,topN = 20) # topN = 20 表示支持度排在前20的商品
head(transactionInfo(SunBai)) 利用transactionInfo函数查看前六数据
# 训练模型
rules=apriori(SunBai,parameter = list(support=0.2,confidence=0.5))#设置支持度0.2,置信度0.5对数据进行关联规则处理
# rules=apriori(SunBai,parameter = list(support=0.2,confidence=0.5,minlen = 2)) #minlen = 2 表示规则中至少包含两种商品,这可以防止仅仅是由于某种商品被频繁购买而创建的无用规则
summary(rules)
#提高模型的性能
# 根据购物篮分析的目标,最有用的规则或许是那些具有高支持度、信度和提升度的规则。arules包中包含一个sort()函数,通过指定参数by为"support","confidence"或者"lift"对规则列表进行重新排序。 在默认的情况下,排序是降序排列,可以指定参数decreasing=FALSE反转排序方式。
inspect(head(sort(rules, by = "lift"), 3))#lift(提升度),表示用来度量一类商品相对于它的一般购买率,此时被购买的可能性有多大 (Lift)是避免了一些不平衡数据标签的偏差性,Lift越大,则数据质量较好;Lift越小,则数据越不平衡。在此处设置lift值为3.
library(arulesViz) # 加载可视化包
plot(rules, method = "grouped")
plot(rules, method='scatterplot') # 散点图判断大量规则的支持度与置信度分布情况
plot(rules,interactive=TRUE) #可以使用interactive=TRUE来实现散点图的互动功能,可以选中一些点查看其具体的规则
还有类似“气泡图”的展现形式:提升度lift是圈的颜色深浅,圈的大小表示支持度support的大小。LHS的个数和分组中最重要(频繁)项集显示在列的标签里。lift从左上角到右下角逐渐减少。
plot(rules, method='graph', shading = "lift", control = list(type='items')) # 关联图看相互关系
# measure 定义圆圈大小,shading 控制颜色深浅
通过箭头和圆圈来表示关联规则,利用顶点代表项集,边表示规则中关系。圆圈越大表示支持度support越大,颜色越深表示提升度lift越大。但是如果规则较多的话会显得很混乱,难以发现其中的规律,因此,通常只对较少的规则使用这样的图;
# 提取关联规则的子集:可以通过subset()函数提取我们感兴趣的规则
sub_rules<-subset(rules,items %in% "C");sub_rules
inspect(sub_rules[1:5])
插播—函数介绍:
Is.subset(x,y=NULL, proper=FALSE, sparse=FALSE,...) #is.subset和is.superset函数用于在关联和项集矩阵对象中发现子集或父集!
Lower.tri(x,diag=FALSE) #返回一个与给定矩阵(在上三角或下三角中TRUE)相同大小的逻辑矩阵
提升度(lift)
Lift(A->B) = Confidence(A->B)/Support(B) 即A出现后,B也出现的条件概率除以B出现的概率。
为什么需要提升度呢?
比如:100条购买记录中,有60条包含牛奶,75条包含面包,其中有40条两者都包含。关联规则(牛奶,面包)的支持度为0.4,看似很高,但其实这个关联规则是一个误导。在用户购买了牛奶的前提下,有(40/60 = ) 0.67的概率去购买面包,而在没有任何前提条件时,用户反而有(75/100 = ) 0.75的概率去购买面包。也就是说,设置了购买牛奶的前提会降低用户购买面包的概率,也就是说面包和牛奶是互斥的。
如果lift=1,说明两个事项没有任何关联;如果lift<1,说明A事件的发生与B事件是相斥的。一般在数据挖掘中当提升度大于3时,我们才承认挖掘出的关联规则是有价值的。
参考来源于:http://www.cnblogs.com/dm-cc/p/5737147.html
http://sanwen.net/a/kezpeoo.html
http://www.cdadata.com/14444
关联规则挖掘算法之Apriori算法的更多相关文章
- 关联规则—频繁项集Apriori算法
频繁模式和对应的关联或相关规则在一定程度上刻画了属性条件与类标号之间的有趣联系,因此将关联规则挖掘用于分类也会产生比较好的效果.关联规则就是在给定训练项集上频繁出现的项集与项集之间的一种紧密的联系.其 ...
- Apriori 算法-如何进行关联规则挖掘
公号:码农充电站pro 主页:https://codeshellme.github.io 在数据分析领域有一个经典的故事,叫做"尿布与啤酒". 据说,在美国西部的一家连锁超市发现, ...
- 关联规则算法(The Apriori algorithm)详解
一.前言 在学习The Apriori algorithm算法时,参考了多篇博客和一篇论文,尽管这些都是很优秀的文章,但是并没有一篇文章详解了算法的整个流程,故整理多篇文章,并加入自己的一些注解,有了 ...
- 频繁模式挖掘apriori算法介绍及Java实现
频繁模式是频繁地出如今数据集中的模式(如项集.子序列或者子结构).比如.频繁地同一时候出如今交易数据集中的商品(如牛奶和面包)的集合是频繁项集. 一些基本概念 支持度:support(A=>B) ...
- 海量数据挖掘MMDS week2: 频繁项集挖掘 Apriori算法的改进:基于hash的方法
http://blog.csdn.net/pipisorry/article/details/48901217 海量数据挖掘Mining Massive Datasets(MMDs) -Jure Le ...
- 一步步教你轻松学关联规则Apriori算法
一步步教你轻松学关联规则Apriori算法 (白宁超 2018年10月22日09:51:05) 摘要:先验算法(Apriori Algorithm)是关联规则学习的经典算法之一,常常应用在商业等诸多领 ...
- 数据挖掘算法之-关联规则挖掘(Association Rule)
在数据挖掘的知识模式中,关联规则模式是比较重要的一种.关联规则的概念由Agrawal.Imielinski.Swami 提出,是数据中一种简单但很实用的规则.关联规则模式属于描述型模式,发现关联规则的 ...
- HAWQ + MADlib 玩转数据挖掘之(七)——关联规则方法之Apriori算法
一.关联规则简介 关联规则挖掘的目标是发现数据项集之间的关联关系,是数据挖据中一个重要的课题.关联规则最初是针对购物篮分析(Market Basket Analysis)问题提出的.假设超市经理想更多 ...
- 数据挖掘算法之-关联规则挖掘(Association Rule)(购物篮分析)
在各种数据挖掘算法中,关联规则挖掘算是比較重要的一种,尤其是受购物篮分析的影响,关联规则被应用到非常多实际业务中,本文对关联规则挖掘做一个小的总结. 首先,和聚类算法一样,关联规则挖掘属于无监督学习方 ...
随机推荐
- 爬虫3 requests基础
import requests # get实例 # res = requests.get('http://httpbin.org/get') # # res.encoding='utf-8' # pr ...
- HDU 5672 String 【尺取】
<题目链接> 题目大意:给定一个只由26个小写字母组成的字符串,现在问你至少包含k个不同字母的连续子序列总数有多少. 解题分析:经仔细研究,我们发现,每次尺取到符合要求的最小区间,然后将区 ...
- lvs三种模式的配置
- React Native 打包 Apk
第一步:生成秘钥库 keytool -genkey -v -keystore opsmart-android-release-key.keystore -alias opsmart-android - ...
- Linux下 nfs部署
一. 挂载一个硬盘来分享 二. 更改配置文件 三. 在配置文件中设置属性 四. 另一台机器 配置的虚拟机,将nfs关闭 配置文件也删除内容 挂载 挂载到部署nfs的极其 之 ...
- SpringBoot拦截器
在实际开发中,总存在着这样的场景,比如拦截请求的ip地址,或者在所有的请求都返回相同的数据,如果每一个方法都写出相同数据固然可以实现,但是随着项目的变大,重复的代码会越来越多,所以在这种情况我们可以用 ...
- WPF DataGrid 每行ComboBox 内容不同的设置方法
<toolkit:DataGridComboBoxColumn x:Name="DgCbcSignal" Header="信号源" SelectedIte ...
- Book Sharing
到现在还不知道为什么我设置的背景图片为什么没有效果,明明是按照网上的教程来的,但...........好气哦,,,,,,,,,嗯哼嗯哼嗯哼 说实话:自己写的网页真丑 .....真丑 index.h ...
- 3466 ACM Proud Merchants 变形的01背包
题目:http://acm.hdu.edu.cn/showproblem.php?pid=3466 题意:假设你有M元,已经Pi,Qi,Vi(i为角标,1<i<N),当M>Qi,时才 ...
- 20172327 2018-2019-1 《第一行代码Android》第一章学习总结
学号 2018-2019-1 <第一行代码Android>第一章学习总结 教材学习内容总结 - Android系统架构: 1.Linux内核层 Android系统是基于Linux内核的,这 ...