关联规则Java实现

这篇博客介绍了如何用Java实现关联规则挖掘,重点关注相对支持度和自信度这两个关键指标。文中提到了一些特定的项集,如'名片'与'设计'、'高端'与'店铺'等,并给出了它们的支持度和自信度。文章参考了相关文献和GitHub资源进行讲解。
摘要由CSDN通过智能技术生成

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值