资源简介
实验描述:
对指定数据集进行关联规则挖掘,选择适当的挖掘算法,编写程序实现,提交程序和结果报告。
数据集: retail.txt ,根据数据集中的数据利用合适的挖掘算法得到频繁项集,并计算置信度,求出满足置信度的所有的关联规则
retail.txt中每个数字表示一种商品的ID,一个{}内的表示一次交易
实验环境和编程语言:
本实验使用的编程语言为:Java
编程环境为:Intellij idea
实现频繁项集的挖掘算法为Apriori算法
用于挖掘的样本个数为:1000个(retail.txt的前1000条数据)
样本示例:
{ 38,39,47,48}
表示一个顾客购买了ID为38、39、47、48的四种商品。
代码片段和文件信息
/**
* Created by 李勇志 on 2016/12/6.
* 2014301500370
*
* 本工程包含两个数据文件
* fulldata为老师给的原始数据文件,由于数据量过大程序跑不出来结果,没有选用进行测试
* top1000data是从fulldata中摘取的前1000条数据,本程序运行的结果是基于这前1000条数据进行的频繁项集挖掘和关联度分析
*
*/
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.*;
/**
* Apriori算法实现 最大模式挖掘,涉及到支持度,但没有置信度计算
*
* AssociationRulesMining()函数实现置信度计算和关联规则挖掘
*/
public class AprioriMyself {
public static int times=0;//迭代次数
private static double MIN_SUPPROT = 0.02;//最小支持度百分比
private static double MIN_CONFIDENCE=0.6;//最小置信度
private static boolean endTag = false;//循环状态,迭代标识
static List> record = new ArrayList>();//数据集
static List> frequentItemset=new ArrayList<>();//存储所有的频繁项集
static List map = new ArrayList();//存放频繁项集和对应的支持度技术
public static void main(String args[]){
System.out.println(“请输入最小支持度(如0.05)和最小置信度(如0.6)“);
Scanner in=new Scanner(System.in);
MIN_SUPPROT=in.nextDouble();
MIN_CONFIDENCE=in.nextDouble();
/*************读取数据集**************/
record = getRecord(“top1000data“);
//控制台输出记录
System.out.println(“读取数据集record成功===================================“);
ShowData(record);
Apriori();//调用Apriori算法获得频繁项集
System.out.println(“频繁模式挖掘完毕。\n\n\n\n\n进行关联度挖掘,最小支持度百分比为:“+MIN_SUPPROT+“ 最小置信度为:“+MIN_CONFIDENCE);
AssociationRulesMining();//挖掘关联规则
}
/**********************************************
* ****************读取数据********************/
public static List> getRecord(String url) {
List> record = new ArrayList>();
try {
String encoding = “UTF-8“; // 字符编码(可解决中文乱码问题 )
File file = new File(url);
if (file.isFile() && file.exists()) {
InputStreamReader read = new InputStreamReader(
new FileInputStream(file) encoding);
BufferedReader bufferedReader = new BufferedReader(read);
String lineTXT = null;
while ((lineTXT = bufferedReader.readLine()) != null) {//读一行文件
String[] lineString = lineTXT.split(““);
List lineList = new ArrayList();
for (int i = 0; i < lineString.length; i++) {
lineList.add(lineString[i]);
}
record.add(lineList);
}
read.close();
} else {
System.out.println(“找不到指定的文件!“);
}
} catch (Exception e) {
System.out.println(“读取文件内容操作出错“);
e.printStackTrace();
}
return record;
}
public static void Apriori() /**实现apriori算法**/
{
//***
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2016-12-10 12:11 Apriori\
目录 0 2016-12-10 12:11 Apriori\.idea\
文件 686 2016-12-06 15:17 Apriori\.idea\compiler.xm
目录 0 2016-12-10 12:11 Apriori\.idea\copyright\
文件 76 2016-12-06 15:17 Apriori\.idea\copyright\profiles_settings.xm
文件 3410 2016-12-06 15:30 Apriori\.idea\misc.xm
文件 254 2016-12-06 15:17 Apriori\.idea\modules.xm
文件 42581 2016-12-07 13:22 Apriori\.idea\workspace.xm
文件 423 2016-12-06 15:17 Apriori\Apriori.iml
文件 4167490 2016-12-06 16:08 Apriori\fulldata
目录 0 2016-12-07 01:13 Apriori\out\
目录 0 2016-12-07 01:13 Apriori\out\production\
目录 0 2016-12-10 12:11 Apriori\out\production\Apriori\
文件 10692 2016-12-07 11:23 Apriori\out\production\Apriori\AprioriMyself.class
文件 1099 2016-12-07 11:23 Apriori\out\production\Apriori\Mymap.class
文件 246 2016-12-06 15:40 Apriori\out\production\Apriori\SetNode.class
文件 2220 2016-12-06 15:44 Apriori\out\production\Apriori\Test.class
目录 0 2016-12-10 12:11 Apriori\src\
文件 16289 2016-12-07 12:03 Apriori\src\AprioriMyself.java
文件 37166 2016-12-06 15:42 Apriori\top1000data
评论
共有 条评论