机器学习算法(一)——关联规则Apriori算法及R语言实现方法
2015-04-20 21:19
190 查看
关联规则算法算是一种十分常用的机器学习算法,无论是面试还是日后工作中都会经常出现,那么本篇小博就记录一下自己学习关联规则经典算法Apriori的笔记。
1、概述
Apriori算法是用一种称为逐层搜索的迭代方法,从项集长度k=1开始,选出频繁的k=1项集,根据先验性质:频繁项集的子集一定是频繁的(逆否命题:非频繁项集的超集一定是非频繁的,通俗的说就是某件事发生的概率很低,比这件事发生条件更严苛的事情发生的概率会更低),筛选k=2项集中的频繁项集,以此迭代k=3...。每迭代一次都要完整的扫描一次数据库。
2、关联规则三度:
支持度:占比
置信度:条件概率
提升度:相关性
3、R语言示例代码如下:(小众语言的辛酸:选项里没有。。)
常用数据形式有data.frame格式和list格式,前者即A项集为一列B项集为另一列,后者为A和B放在同一个购物篮中。
去除冗余规则以及提取子规则代码如下:
关联规则可视化代码如下:
平时学东西不用急,你并不是用了它就好了,你得知道它是怎么实现的?为什么要用这个而不用另外一个?它优越在哪?可不可以优化?多想,想深一点,养成这个习惯。
恩,上面这句话是某面经里面的。。。
4、算法优化
韩家炜经典《数据挖掘概念与技术》中提出了若干基于Apriori的提升效率方法:
① 基于散列的技术:由k=1频繁项集生成所有k=2频繁项集并映射计数,过滤支持度低于阈值的k=2项集,压缩需要考虑的k=2项集
② 事物压缩
③ 划分:合并所有子集的频繁项集,从中寻找全局频繁项集,只需要扫描两次
④ 抽样:牺牲精度,效率优先
⑤ 动态项集计数
5、Apriori算法的缺点:
① 可能仍然需要产生大量候选项集
② 可能需要重复的扫描整个数据库
1、概述
Apriori算法是用一种称为逐层搜索的迭代方法,从项集长度k=1开始,选出频繁的k=1项集,根据先验性质:频繁项集的子集一定是频繁的(逆否命题:非频繁项集的超集一定是非频繁的,通俗的说就是某件事发生的概率很低,比这件事发生条件更严苛的事情发生的概率会更低),筛选k=2项集中的频繁项集,以此迭代k=3...。每迭代一次都要完整的扫描一次数据库。
2、关联规则三度:
支持度:占比
置信度:条件概率
提升度:相关性
3、R语言示例代码如下:(小众语言的辛酸:选项里没有。。)
library(arules) #从rattle包中读入数据 dvdtrans <- read.csv(system.file("csv", "dvdtrans.csv",package="rattle")) str(dvdtrans) #将数据转化为合适的格式 data <- as(split(dvdtrans$Item,dvdtrans$ID),"transactions") data #用 apriori命令生成频繁项集,设其支持度为0.5,置信度为0.8 rules <- apriori(data, parameter=list(support=0.5,confidence=0.8,minlen = 2)) #用inspect命令查看提取规则 inspect(rules)
常用数据形式有data.frame格式和list格式,前者即A项集为一列B项集为另一列,后者为A和B放在同一个购物篮中。
去除冗余规则以及提取子规则代码如下:
redundant.rm <- function(rule,by="lift") { #rule:需要进行简化的规则 #by:在清除的时候根据那个变量来选择, #可能取值为"support","lift","confidence" a <- sort(rule,by=by) m<- is.subset(a,a,proper=TRUE) m[lower.tri(m, diag=TRUE)] <- NA r <- colSums(m, na.rm=TRUE) >= 1 finall.rules <- a[!r] return(finall.rules) } rules <- redundant.rm(rules) rules.sub <- subset(rules, subset = lhs %in% "筛选项集名称" & lift > 1)
关联规则可视化代码如下:
require(arulesViz) plot(x = sort(finall.rule,by = "support")[1:20], method="graph", control=list(type="items"))
平时学东西不用急,你并不是用了它就好了,你得知道它是怎么实现的?为什么要用这个而不用另外一个?它优越在哪?可不可以优化?多想,想深一点,养成这个习惯。
恩,上面这句话是某面经里面的。。。
4、算法优化
韩家炜经典《数据挖掘概念与技术》中提出了若干基于Apriori的提升效率方法:
① 基于散列的技术:由k=1频繁项集生成所有k=2频繁项集并映射计数,过滤支持度低于阈值的k=2项集,压缩需要考虑的k=2项集
② 事物压缩
③ 划分:合并所有子集的频繁项集,从中寻找全局频繁项集,只需要扫描两次
④ 抽样:牺牲精度,效率优先
⑤ 动态项集计数
5、Apriori算法的缺点:
① 可能仍然需要产生大量候选项集
② 可能需要重复的扫描整个数据库
相关文章推荐
- 机器学习算法(二)——决策树分类算法及R语言实现方法
- 机器学习算法(三)——朴素贝叶斯算法及R语言实现方法
- 不同方法的正态性检验及R语言实现
- 机器学习算法的R语言实现(一):KNN
- 机器学习算法的R语言实现(二):决策树算法
- 机器学习算法的R语言实现(三):朴素贝叶斯分类器
- R语言OOP(2):S3 OOP 的实现方法
- R语言OOP(3):S4的实现方法
- 【机器学习算法-python实现】协同过滤(cf)的三种方法实现
- R语言中实现笛卡尔积的一个方法
- 机器学习算法基础(Python和R语言实现)
- 【机器学习算法-python实现】协同过滤(cf)的三种方法实现
- 『原创』机器学习算法的R语言实现(一):KNN
- 『原创』机器学习算法的R语言实现(二):决策树算法
- 『原创』机器学习算法的R语言实现(三):朴素贝叶斯分类器
- R语言实现固定分组汇总的方法
- 应用统计学与R语言实现学习笔记(四)——抽样方法与抽样分布
- 应用统计学与R语言实现学习笔记(四)——抽样方法与抽样分布
- 【机器学习算法-python实现】协同过滤(cf)的三种方法实现
- 机器学习算法实现解析——libFM之libFM的训练过程之SGD的方法