Apriori算法实例----Weka,R, Using Weka in my javacode
学习数据挖掘工具中,下面使用4种工具来对同一个数据集进行研究。
数据描述:下面这些数据是15个同学选修课程情况,在课程大纲中共有10门课程供学生选择,下面给出具体的选课情况,以ARFF数据文件保存,名称为TestStudenti.arff。我使用Apriori算法期望挖掘出学生选课的关联规则。
@relation test_studenti
@attribute Arbori_binari_de_cautare {TRUE, FALSE}
@attribute Arbori_optimali {TRUE, FALSE}
@attribute Arbori_echilibrati_in_inaltime {TRUE, FALSE}
@attribute Arbori_Splay {TRUE, FALSE}
@attribute Arbori_rosu_negru {TRUE, FALSE}
@attribute Arbori_2_3 {TRUE, FALSE}
@attribute Arbori_B {TRUE, FALSE}
@attribute Arbori_TRIE {TRUE, FALSE}
@attribute Sortare_topologica {TRUE, FALSE}
@attribute Algoritmul_Dijkstra {TRUE, FALSE}
@data
TRUE,TRUE,TRUE,TRUE,FALSE,FALSE,TRUE,TRUE,FALSE,FALSE
TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,FALSE,TRUE,FALSE,FALSE
FALSE,TRUE,TRUE,TRUE,FALSE,FALSE,FALSE,TRUE,FALSE,TRUE
FALSE,TRUE,FALSE,FALSE,TRUE,FALSE,TRUE,TRUE,FALSE,TRUE
TRUE,TRUE,FALSE,TRUE,TRUE,FALSE,TRUE,TRUE,FALSE,TRUE
TRUE,FALSE,TRUE,FALSE,FALSE,TRUE,TRUE,TRUE,FALSE,FALSE
FALSE,TRUE,FALSE,TRUE,TRUE,FALSE,TRUE,TRUE,FALSE,TRUE
TRUE,FALSE,TRUE,TRUE,TRUE,FALSE,TRUE,TRUE,TRUE,FALSE
FALSE,TRUE,TRUE,TRUE,TRUE,FALSE,FALSE,TRUE,FALSE,FALSE
TRUE,FALSE,TRUE,FALSE,TRUE,TRUE,FALSE,TRUE,FALSE,TRUE
FALSE,FALSE,TRUE,FALSE,TRUE,FALSE,FALSE,TRUE,TRUE,TRUE
TRUE,FALSE,FALSE,TRUE,TRUE,TRUE,FALSE,TRUE,FALSE,TRUE
FALSE,TRUE,TRUE,FALSE,TRUE,TRUE,FALSE,TRUE,FALSE,TRUE
TRUE,TRUE,TRUE,FALSE,FALSE,TRUE,FALSE,TRUE,FALSE,FALSE
TRUE,TRUE,FALSE,FALSE,TRUE,TRUE,FALSE,TRUE,FALSE,FALSE
(一) Weka 使用实例
在Apriori算法中,设置minSupprot=50%, 最小置信度 minimum confidence 也设置为50%。Weka配置路径为 Explore-》Openfile(TestStudenti.arff)->Associate 点击配置参数信息

在算法完成之后,我们得到以下结果:
Best rules found:
1. Sortare_topologica=FALSE 13 ==> Arbori_TRIE=TRUE 13 <conf:(1)> lift:(1) lev:(0) [0] conv:(0)
2. Arbori_rosu_negru=TRUE 11 ==> Arbori_TRIE=TRUE 11 <conf:(1)> lift:(1) lev:(0) [0] conv:(0)
3. Arbori_optimali=TRUE 10 ==> Arbori_TRIE=TRUE 10 <conf:(1)> lift:(1) lev:(0) [0] conv:(0)
4. Arbori_optimali=TRUE 10 ==> Sortare_topologica=FALSE 10 <conf:(1)> lift:(1.15) lev:(0.09) [1] conv:(1.33)
5. Arbori_echilibrati_in_inaltime=TRUE 10 ==> Arbori_TRIE=TRUE 10 <conf:(1)> lift:(1) lev:(0) [0] conv:(0)
6. Arbori_optimali=TRUE Sortare_topologica=FALSE 10 ==> Arbori_TRIE=TRUE 10 <conf:(1)> lift:(1) lev:(0) [0] conv:(0)
7. Arbori_optimali=TRUE Arbori_TRIE=TRUE 10 ==> Sortare_topologica=FALSE 10 <conf:(1)> lift:(1.15) lev:(0.09) [1] conv:(1.33)
8. Arbori_optimali=TRUE 10 ==> Arbori_TRIE=TRUE Sortare_topologica=FALSE 10 <conf:(1)> lift:(1.15) lev:(0.09) [1] conv:(1.33)
9. Arbori_binari_de_cautare=TRUE 9 ==> Arbori_TRIE=TRUE 9 <conf:(1)> lift:(1) lev:(0) [0] conv:(0)
10. Arbori_B=FALSE 9 ==> Arbori_TRIE=TRUE 9 <conf:(1)> lift:(1) lev:(0) [0] conv:(0)
11. Arbori_rosu_negru=TRUE Sortare_topologica=FALSE 9 ==> Arbori_TRIE=TRUE 9 <conf:(1)> lift:(1) lev:(0) [0] conv:(0)
12. Arbori_TRIE=TRUE 15 ==> Sortare_topologica=FALSE 13 <conf:(0.87)> lift:(1) lev:(0) [0] conv:(0.67)
13. Arbori_rosu_negru=TRUE 11 ==> Sortare_topologica=FALSE 9 <conf:(0.82)> lift:(0.94) lev:(-0.04) [0] conv:(0.49)
14. Arbori_rosu_negru=TRUE Arbori_TRIE=TRUE 11 ==> Sortare_topologica=FALSE 9 <conf:(0.82)> lift:(0.94) lev:(-0.04) [0] conv:(0.49)
15. Arbori_rosu_negru=TRUE 11 ==> Arbori_TRIE=TRUE Sortare_topologica=FALSE 9 <conf:(0.82)> lift:(0.94) lev:(-0.04) [0] conv:(0.49)
16. Sortare_topologica=FALSE 13 ==> Arbori_optimali=TRUE 10 <conf:(0.77)> lift:(1.15) lev:(0.09) [1] conv:(1.08)
17. Arbori_TRIE=TRUE Sortare_topologica=FALSE 13 ==> Arbori_optimali=TRUE 10 <conf:(0.77)> lift:(1.15) lev:(0.09) [1] conv:(1.08)
18. Sortare_topologica=FALSE 13 ==> Arbori_optimali=TRUE Arbori_TRIE=TRUE 10 <conf:(0.77)> lift:(1.15) lev:(0.09) [1] conv:(1.08)
19. Arbori_TRIE=TRUE 15 ==> Arbori_rosu_negru=TRUE 11 <conf:(0.73)> lift:(1) lev:(0) [0] conv:(0.8)
20. Sortare_topologica=FALSE 13 ==> Arbori_rosu_negru=TRUE 9 <conf:(0.69)> lift:(0.94) lev:(-0.04) [0] conv:(0.69)
分析第一条结果,我们可以得出关联规则: 如果一个学生不参加Sortare topologica 课程,那么他的一个趋向是肯定不会参加 Arbori TRIE课程。这条关联规则的置信度是100%,是非常可信的。
(二) Using Weka in my Javacode
展示Java代码,运行程序可以得到和上面一样的结果
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import weka.associations.Apriori;
import weka.core.Instances;
public class Main{
public static void main(String[] args) {
Instances data = null;
try {
BufferedReader reader = new BufferedReader( new FileReader( "TestStudenti.arff" ) );
data = new Instances(reader);
reader.close();
data.setClassIndex(data.numAttributes() - 1);
}
catch ( IOException e ) {
e.printStackTrace();
}
double deltaValue = 0.05;
double lowerBoundMinSupportValue = 0.1;
double minMetricValue = 0.5;
int numRulesValue = 20;
double upperBoundMinSupportValue = 1.0;
String resultapriori;
Apriori apriori = new Apriori();
apriori.setDelta(deltaValue);
apriori.setLowerBoundMinSupport(lowerBoundMinSupportValue);
apriori.setNumRules(numRulesValue);
apriori.setUpperBoundMinSupport(upperBoundMinSupportValue);
apriori.setMinMetric(minMetricValue);
try{
apriori.buildAssociations( data );
}
catch ( Exception e ) {
e.printStackTrace();
}
resultapriori = apriori.toString();
System.out.println(resultapriori);
}
}
(三) Using Weka in R
程序很简单,仅仅三行代码搞定。
library(RWeka);
data <- read.arff("D:/test.studenti.arff");
Apriori(data,control=Weka_control(N=20,T =0,C =0.5,D =0.05, U= 1.0,M =0.5, S =-1.0, c =-1))
运行结果:
Apriori
=======
Minimum support: 0.6 (9 instances)
Minimum metric <confidence>: 0.5
Number of cycles performed: 8
Generated sets of large itemsets:
Size of set of large itemsets L(1): 7
Size of set of large itemsets L(2): 8
Size of set of large itemsets L(3): 2
Best rules found:
1. Sortare_topologica=FALSE 13 ==> Arbori_TRIE=TRUE 13 <conf:(1)> lift:(1) lev:(0) [0] conv:(0)
2. Arbori_rosu_negru=TRUE 11 ==> Arbori_TRIE=TRUE 11 <conf:(1)> lift:(1) lev:(0) [0] conv:(0)
3. Arbori_optimali=TRUE 10 ==> Arbori_TRIE=TRUE 10 <conf:(1)> lift:(1) lev:(0) [0] conv:(0)
4. Arbori_optimali=TRUE 10 ==> Sortare_topologica=FALSE 10 <conf:(1)> lift:(1.15) lev:(0.09) [1] conv:(1.33)
5. Arbori_echilibrati_in_inaltime=TRUE 10 ==> Arbori_TRIE=TRUE 10 <conf:(1)> lift:(1) lev:(0) [0] conv:(0)
6. Arbori_optimali=TRUE Sortare_topologica=FALSE 10 ==> Arbori_TRIE=TRUE 10 <conf:(1)> lift:(1) lev:(0) [0] conv:(0)
7. Arbori_optimali=TRUE Arbori_TRIE=TRUE 10 ==> Sortare_topologica=FALSE 10 <conf:(1)> lift:(1.15) lev:(0.09) [1] conv:(1.33)
8. Arbori_optimali=TRUE 10 ==> Arbori_TRIE=TRUE Sortare_topologica=FALSE 10 <conf:(1)> lift:(1.15) lev:(0.09) [1] conv:(1.33)
9. Arbori_binari_de_cautare=TRUE 9 ==> Arbori_TRIE=TRUE 9 <conf:(1)> lift:(1) lev:(0) [0] conv:(0)
10. Arbori_B=FALSE 9 ==> Arbori_TRIE=TRUE 9 <conf:(1)> lift:(1) lev:(0) [0] conv:(0)
11. Arbori_rosu_negru=TRUE Sortare_topologica=FALSE 9 ==> Arbori_TRIE=TRUE 9 <conf:(1)> lift:(1) lev:(0) [0] conv:(0)
12. Arbori_TRIE=TRUE 15 ==> Sortare_topologica=FALSE 13 <conf:(0.87)> lift:(1) lev:(0) [0] conv:(0.67)
13. Arbori_rosu_negru=TRUE 11 ==> Sortare_topologica=FALSE 9 <conf:(0.82)> lift:(0.94) lev:(-0.04) [0] conv:(0.49)
14. Arbori_rosu_negru=TRUE Arbori_TRIE=TRUE 11 ==> Sortare_topologica=FALSE 9 <conf:(0.82)> lift:(0.94) lev:(-0.04) [0] conv:(0.49)
15. Arbori_rosu_negru=TRUE 11 ==> Arbori_TRIE=TRUE Sortare_topologica=FALSE 9 <conf:(0.82)> lift:(0.94) lev:(-0.04) [0] conv:(0.49)
16. Sortare_topologica=FALSE 13 ==> Arbori_optimali=TRUE 10 <conf:(0.77)> lift:(1.15) lev:(0.09) [1] conv:(1.08)
17. Arbori_TRIE=TRUE Sortare_topologica=FALSE 13 ==> Arbori_optimali=TRUE 10 <conf:(0.77)> lift:(1.15) lev:(0.09) [1] conv:(1.08)
18. Sortare_topologica=FALSE 13 ==> Arbori_optimali=TRUE Arbori_TRIE=TRUE 10 <conf:(0.77)> lift:(1.15) lev:(0.09) [1] conv:(1.08)
19. Arbori_TRIE=TRUE 15 ==> Arbori_rosu_negru=TRUE 11 <conf:(0.73)> lift:(1) lev:(0) [0] conv:(0.8)
20. Sortare_topologica=FALSE 13 ==> Arbori_rosu_negru=TRUE 9 <conf:(0.69)> lift:(0.94) lev:(-0.04) [0] conv:(0.69)
Apriori算法实例----Weka,R, Using Weka in my javacode的更多相关文章
- Apriori算法实例
Apriori算法与实例 R. Agrawal 和 R. Srikant于1994年在文献[2]中提出了Apriori算法,该算法的描述如下: 下面是一个具体的例子,最开始数据库里有4条交易,{A.C ...
- Apriori算法例子
1 Apriori介绍 Apriori算法使用频繁项集的先验知识,使用一种称作逐层搜索的迭代方法,k项集用于探索(k+1)项集.首先,通过扫描事务(交易)记录,找出所有的频繁1项集,该集合记做L1,然 ...
- Apriori算法第二篇----详细分析和代码实现
1 Apriori介绍 Apriori算法使用频繁项集的先验知识,使用一种称作逐层搜索的迭代方法,k项集用于探索(k+1)项集.首先,通过扫描事务(交易)记录,找出所有的频繁1项集,该集合记做L1,然 ...
- HAWQ + MADlib 玩转数据挖掘之(七)——关联规则方法之Apriori算法
一.关联规则简介 关联规则挖掘的目标是发现数据项集之间的关联关系,是数据挖据中一个重要的课题.关联规则最初是针对购物篮分析(Market Basket Analysis)问题提出的.假设超市经理想更多 ...
- 数据挖掘:关联规则的apriori算法在weka的源码分析
相对于机器学习,关联规则的apriori算法更偏向于数据挖掘. 1) 测试文档中调用weka的关联规则apriori算法,如下 try { File file = new File("F:\ ...
- 玩转大数据:深入浅出大数据挖掘技术(Apriori算法、Tanagra工具、决策树)
一.本课程是怎么样的一门课程(全面介绍) 1.1.课程的背景 “大数据”作为时下最火热的IT行业的词汇,随之而来的数据仓库.数据分析.数据挖掘等等围绕大数据的商业价值的利用逐渐成为 ...
- #研发解决方案#基于Apriori算法的Nginx+Lua+ELK异常流量拦截方案
郑昀 基于杨海波的设计文档 创建于2015/8/13 最后更新于2015/8/25 关键词:异常流量.rate limiting.Nginx.Apriori.频繁项集.先验算法.Lua.ELK 本文档 ...
- 频繁模式挖掘apriori算法介绍及Java实现
频繁模式是频繁地出如今数据集中的模式(如项集.子序列或者子结构).比如.频繁地同一时候出如今交易数据集中的商品(如牛奶和面包)的集合是频繁项集. 一些基本概念 支持度:support(A=>B) ...
- Apriori算法实现
Apriori算法原理:http://blog.csdn.net/kingzone_2008/article/details/8183768 import java.util.HashMap; imp ...
随机推荐
- php验证身份证号码正确性
发布:JB01 来源:脚本学堂 [大 中 小] 分享一例php代码,用于验证身份证号码的正确性,用到了preg_match.preg_replace函数,有需要的朋友可以参考学习下.本文转 ...
- Python的进程间通信
进程间通讯有多种方式,包括信号,管道,消息队列,信号量,共享内存,socket等 1.共享内存 Python可以通过mmap模块实现进程之间的共享内存 mmap文件对象既像一个字符串也像一个普通文件对 ...
- AngularJs项目
AngularJs项目实践总结 今年3月接触AngularJs,并且在6月的项目中开始应用,从踩坑到填坑花了不少时间,根据项目中的实际应用情况总结了一些经验,如下: 一.UI控件选择 Angularj ...
- 使用WiX Toolset创建.NET程序发布Bootstrapper(安装策略管理)(一)-----初识WiX (转)
原文地址:http://blog.csdn.net/rryqsh/article/details/8274832 Visual Studio 打包安装七宗罪 开发.NET的人,肯定会使用Visual ...
- secondarynamenode异常
secondarynamenode异常 -- ::, ERROR org.apache.hadoop.hdfs.server.namenode.SecondaryNameNode: Exception ...
- 下拉框点链接js
$("#input_text").click(function(){ $("#input_fonts").show(); }); $("#input_ ...
- 批处理:遍历输出指定后缀格式的文件名.bat
批处理:遍历输出指定后缀格式的文件名.bat @echo off type nul >C:\result.txt for /r "d:\我的文档\桌面\交接\webservice\We ...
- CSS使块半透明方法,兼容IE6
前言 今天LOL玩机器人玩得真心不爽,实在崩溃,还是逛博客园比较爽些,记录自己的成长!说句实话我在编程方面确实是个菜鸟,菜到一种超神的地步,没一样自己特擅长的,悲催...... 废话少说,进入正题,H ...
- C#语法中一个问号(?)和两个问号(??)的运算符是什么意思?
(1).C#语法中一个个问号(?)的运算符是指:可以为 null 的类型. MSDN上面的解释: 在处理数据库和其他包含不可赋值的元素的数据类型时,将 null 赋值给数值类型或布尔型以及日期类型的功 ...
- C语言中随机数的生成
刚好在找这方面的资料,看到了一片不错的,就全文转过来了,省的我以后再找找不到. 在C语言中,可以通过rand函数得到一个“伪随机数”.这个数是一个整数,其值大于等于0且小于等于RAND_MAX.ran ...