`
czhsuccess
  • 浏览: 41841 次
社区版块
存档分类
最新评论

java实现apriori算法

阅读更多

apriori算法是经典的求频繁项集的算法,基本原理是:找出频繁1项集(需事先规定好门限),然后利用频繁1项集产生频繁2项集,以此类推。代码如下:

public class AprioriAlgorithm {
	private static final int THRESHOLD = 2;
	
	/**
	 * 
	* @Title: appriGen 
	* @Description: 产生频繁1项集
	* @return ArrayList<ArrayList<String>>
	* @throws
	 */
	public ArrayList<ArrayList<String>> freq1Gen(ArrayList<ArrayList<String>> list) {
		Map<String, Integer> candItemMap = new HashMap<String, Integer>();
		for(int i = 0; i < list.size(); i++) {
			for(int j = 0; j < list.get(i).size(); j++) {
				if(null != candItemMap.get(list.get(i).get(j))) {
					candItemMap.put(list.get(i).get(j), candItemMap.get(list.get(i).get(j)) + 1);
				} else {
					candItemMap.put(list.get(i).get(j), 1);
				}
			}
		}
		Iterator<String> iter = candItemMap.keySet().iterator();
		ArrayList<ArrayList<String>> dataList = new ArrayList<ArrayList<String>>();
		while(iter.hasNext()) {
			String tmp = iter.next();
			if(candItemMap.get(tmp) >= THRESHOLD) {
				ArrayList<String> tmpList =  new ArrayList<String>();
				tmpList.add(tmp);
				dataList.add(tmpList);
			}
		}
		
		return dataList;
	}
	
	/**
	 * 
	* @Title: candidateGen 
	* @Description: 由频繁k项集产生频繁k+1项集,dataLength代表item个数
	* @return ArrayList<ArrayList<String>>
	* @throws
	 */
	public ArrayList<ArrayList<String>> freqKGen(ArrayList<ArrayList<String>>candiList, int k, ArrayList<ArrayList<String>> originalData) {
		ArrayList<ArrayList<String>> res = new ArrayList<ArrayList<String>>();
		for(int i = 0; i < candiList.size() - 1; i++) {
			for(int j = i + 1; j < candiList.size(); j++) {
				ArrayList<String> tmp = new ArrayList<String>();
				if(k == 1) {
					tmp.add(candiList.get(i).get(0));
					tmp.add(candiList.get(j).get(0));
				} else {
					for(int p = 0; p < k - 1; p++) {
						if(candiList.get(i).get(p) != candiList.get(j).get(p)) {
							break;
						}
						tmp.add(candiList.get(i).get(p));
						if(p == k - 2 && candiList.get(i).get(k-1) != candiList.get(j).get(k-1)) { // 表明前k-1项相等
							tmp.add(candiList.get(i).get(k-1));
							tmp.add(candiList.get(j).get(k-1));
						}
					}
				}
				res.add(tmp);
			}
		}
		
		Iterator<ArrayList<String>> iter = res.iterator();
		while(iter.hasNext()) {
			ArrayList<String> tmp = iter.next();
			if(AprioriUtil.getFreq(originalData, tmp) < THRESHOLD) {
				iter.remove();
			}
		}
	
		return res;
	}
	
	public static void main(String[] args) {
		ArrayList<ArrayList<String>> list = new ArrayList<ArrayList<String>>();
		
		ArrayList<String> tmp = new ArrayList<String>();
		tmp.add("m");
		tmp.add("s");
		tmp.add("e");
		list.add(tmp);
		
		ArrayList<String> tmp1 = new ArrayList<String>();
		tmp1.add("m");
		tmp1.add("t");
		tmp1.add("p");
		list.add(tmp1);
		
		ArrayList<String> tmp2 = new ArrayList<String>();
		tmp2.add("m");
		tmp2.add("t");
		tmp2.add("p");
		tmp2.add("s");
		list.add(tmp2);
		
		ArrayList<String> tmp3 = new ArrayList<String>();
		tmp3.add("t");
		tmp3.add("p");
		list.add(tmp3);
		
		AprioriAlgorithm dd = new AprioriAlgorithm();
		ArrayList<ArrayList<String>> res = dd.freq1Gen(list);
		ArrayList<ArrayList<String>> res1 = dd.freqKGen(res, 1, list);
		ArrayList<ArrayList<String>> res2 = dd.freqKGen(res1, 2, list);
		ArrayList<ArrayList<String>> res3 = dd.freqKGen(res2, 3, list);
		ArrayList<ArrayList<String>> res4 = dd.freqKGen(res3, 4, list);

		System.out.println(res1);
		
    }
}

 

分享到:
评论
1 楼 u012410225 2015-12-03  
博主,问一下,这里有个AprioriUtil,这个class类你没有传上来,没法用啊

相关推荐

    java实现apriori算法进行关联规则挖掘

    在Java中实现Apriori算法可以帮助我们对大量数据进行有效的分析,从而揭示隐藏的关联规律。 首先,我们需要理解Apriori算法的基本思想。该算法基于两个核心原则:频繁项集的闭包性质和向下封闭性。频繁项集是指在...

    java实现Apriori算法

    在Java中实现Apriori算法,我们需要理解并掌握以下几个关键知识点: 1. **关联规则**:关联规则是数据挖掘中的一种重要概念,通常表示为“如果A发生,那么B发生的概率会增加”。这里的A和B称为项集,它们是数据集中...

    Java 实现 Apriori 算法

    **Java实现Apriori算法详解** Apriori算法是一种经典的关联规则学习算法,主要用于发现大量数据集中的频繁项集和强关联规则。在电子商务、市场篮子分析、医学诊断等领域有着广泛的应用。Java作为一种跨平台的编程...

    Apriori算法 java实现

    `apriori.java`是Apriori算法的Java实现文件。这个文件可能包含了以下关键部分: 1. 数据预处理:从Excel文件中读取数据,转换成项集(如商品列表)。 2. 支持度计算:定义一个函数来计算项集的支持度,这是评估项集...

    Apriori算法java实现

    Apriori算法java实现,本人自己毕业设计用的不解释! 上次传的有人说用不了,表示很惊讶! !本人亲测能用的

    用java实现apriori

    java实现apriori算法

    Apriori算法完整Java代码

    在Java编程语言中实现Apriori算法,需要设计数据结构来存储项集和它们的支持度,以及高效地处理候选集生成和支持度计算。通常,可以使用Map来存储项集及其支持度,用集合来表示候选集,用迭代器来遍历数据库中的交易...

    Apriori 算法Java实现

    具体算法实现类是该算法的核心部分,用于实现 Apriori 算法的逻辑。该类使用了 Hibernate 作为 ORM 框架,用于与数据库交互。该类的主要方法是 `generateItemSets`,用于生成所有可能的项集,和 `calculateSupport`...

    Apriori算法(Java)实现

    在Java环境下实现Apriori算法,可以方便地处理各种实际问题。 首先,我们来理解Apriori算法的基本思想。Apriori算法基于两个核心原则: 1. 频繁项集:如果一个项集是频繁的,那么它的所有子集也必须是频繁的。 2. ...

    Java实现的Apriori算法(附测试数据)

    在本案例中,我们关注的是Java实现的Apriori算法。 Apriori算法的核心思想是基于两个原则: 1. 支持度:一个项集的支持度是指该项集在所有交易中出现的频率。例如,如果“牛奶”和“面包”一起出现在100次购物篮中...

    Apriori算法(java)

    3. **运行主程序**: 找到包含Apriori算法实现的主类,运行该类,程序会自动读取test.txt数据文件并执行算法。 4. **查看结果**: 输出将包括频繁项集和发现的关联规则,可以通过控制台输出或者自定义的报告文件查看...

    java实现Apriori算法——频繁项集的计算.zip

    Java是一种高性能、跨平台的面向对象编程语言。它由Sun Microsystems(现在是Oracle Corporation)的James Gosling等人在1995年推出,被设计为一种简单、健壮、可移植、多线程、动态的语言。Java的主要特点和优势...

    Apriori算法及其改进算法

    在Java代码中,Apriori算法的实现主要包括以下几个部分: 1. 数据读取:使用BufferedReader读取文件中的数据,并将其转换为项set的形式。 2. 项set生成:使用HashMap和ArrayList来生成所有可能的项set。 3. 支持度...

    apriori算法java实现

    本篇文章将深入探讨Apriori算法,并结合Java语言详细介绍其实现。 首先,我们来理解Apriori算法的基本原理。Apriori算法是由R. Agrawal和R. Srikant于1994年提出的一种基于频繁项集的挖掘算法。它的核心思想是...

    apriori算法,java实现

    总的来说,虽然这个Java实现可能不是最优化的,但它为理解和实践Apriori算法提供了一个基础。通过深入研究代码,我们可以学习如何处理交易数据、如何生成和测试候选项集,以及如何有效地存储和更新频繁项集。这对于...

Global site tag (gtag.js) - Google Analytics