Apriori算法实现(四)

2014-11-24 08:14:21 · 作者: · 浏览: 2
4, set4); } /** * 构造数据集 * @param fileName 存储事务数据的文件名 * @param totalcount 获取的事务数 */ public void buildData(int totalCount, String...fileName) { txDatabase = new HashMap >(); if(fileName.length !=0){ File file = new File(fileName[0]); int count = 0; try { BufferedReader reader = new BufferedReader(new FileReader(file)); String line; while( (line = reader.readLine()) != null){ String []arr = line.split( ); Set set = new HashSet (); for(String s : arr) set.add(s); count++; this.txDatabase.put(count, set); if(count >= totalCount) return; } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }else{ } } /** * 测试挖掘频繁1-项集 */ public void testFreq1ItemSet() { System.out.println(挖掘频繁1-项集 : + apriori.getFreq1ItemSet()); } /** * 测试aprioriGen方法,生成候选频繁项集 */ public void testAprioriGen() { System.out.println( 候选频繁2-项集 : + this.apriori.aprioriGen(1, this.apriori.getFreq1ItemSet().keySet()) ); } /** * 测试挖掘频繁2-项集 */ public void testGetFreq2ItemSet() { System.out.println( 挖掘频繁2-项集 : + this.apriori.getFreqKItemSet(2, this.apriori.getFreq1ItemSet().keySet()) ); } /** * 测试挖掘频繁3-项集 */ public void testGetFreq3ItemSet() { System.out.println( 挖掘频繁3-项集 : + this.apriori.getFreqKItemSet( 3, this.apriori.getFreqKItemSet(2, this.apriori.getFreq1ItemSet().keySet()).keySet() ) ); } /** * 测试挖掘全部频繁项集 */ public void testGetFreqItemSet() { this.apriori.mineFreqItemSet(); // 挖掘频繁项集 System.out.println(挖掘频繁项集 : + this.apriori.getFreqItemSet()); } /** * 测试挖掘全部频繁关联规则 */ public void testMineAssociationRules() { this.apriori.mineFreqItemSet(); // 挖掘频繁项集 this.apriori.mineAssociationRules(); System.out.println(挖掘频繁关联规则 : + this.apriori.getAssiciationRules()); } }


在此基础上添加了has_infrequent_subset方法,此方法使用先验知识进行剪枝,是典型Apriori算法必备的。