package aprori;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @author
* 本程序用于频繁集的挖掘
* 首先用List<List<String>>类型的record将矩阵形式的数据读入内存;
*
*程序先求出k-1备选集,由备选集和数据库记录record求得满足支持度的k-1级集合,在满足支持度集合中求出满足自信度的集合,
*若满足置信度的集合为空,程序停止;
*否则输出满足自信度的集合,以及对应的支持度和自信度,并由满足支持度的k-1级集合求出k级备选集,进入下一轮循环;
*直至程序结束,输出全部频繁集
*/
public class Aprori {
static boolean endTag = false;
static Map<Integer, Integer> dCountMap = new HashMap<Integer, Integer>(); // k-1频繁集的记数表
static Map<Integer, Integer> dkCountMap = new HashMap<Integer, Integer>();// k频繁集的记数表
static List<List<String>> record = new ArrayList<List<String>>();// 数据记录表
//final static double MIN_SUPPORT = 0.02;// 最小支持度
//final static double MIN_CONF = 0.8;// 最小置信度
static int lable = 1;// 用于输出时的一个标记,记录当前在打印第几级关联集
static List<Double> confCount = new ArrayList<Double>();// 置信度记录表
static List<List<String>> confItemset = new ArrayList<List<String>>();// 满足支持度的集合
/**
* @param args
* @throws FileNotFoundException
* @throws UnsupportedEncodingException
*/
public static void main(String[] args) throws UnsupportedEncodingException, FileNotFoundException {
// TODO Auto-generated method stub
record = getRecord(args[1]);// 获取原始数据记录
PrintWriter pw = new PrintWriter(new OutputStreamWriter(
new FileOutputStream(args[1] + ".apriori"), "utf-8"), true);
List<List<String>> cItemset = findFirstCandidate();// 获取第一次的备选集
List<List<String>> lItemset = getSupportedItemset(cItemset, Double.parseDouble(args[2]));// 获取备选集cItemset满足支持的集合
while (endTag != true) {// 只要能继续挖掘
List<List<String>> ckItemset = getNextCandidate(lItemset);// 获取第下一次的备选集
List<List<String>> lkItemset = getSupportedItemset(ckItemset, Double.parseDouble(args[2]));// 获取备选集cItemset满足支持的集合
getConfidencedItemset(lkItemset, lItemset, dkCountMap, dCountMap, Double.parseDouble(args[3]));// 获取备选集cItemset满足置信度的集合
if (confItemset.size() != 0)// 满足置信度的集合不为空
printConfItemset(confItemset,pw);// 打印满足置信度的集合
confItemset.clear();// 清空置信度的集合
cItemset = ckItemset;// 保存数据,为下次循环迭代准备
lItemset = lkItemset;
dCountMap.clear();
dCountMap.putAll(dkCountMap);
;
}
pw.close();
}
/**
* @param confItemset2
* 输出满足条件的频繁集
* @param pw
* @throws FileNotFoundException
* @throws UnsupportedEncodingException
*/
private static void printConfItemset(List<List<S
关联规则Java实现
最新推荐文章于 2021-04-01 00:39:55 发布
这篇博客介绍了如何用Java实现关联规则挖掘,重点关注相对支持度和自信度这两个关键指标。文中提到了一些特定的项集,如'名片'与'设计'、'高端'与'店铺'等,并给出了它们的支持度和自信度。文章参考了相关文献和GitHub资源进行讲解。
摘要由CSDN通过智能技术生成