数据挖掘--apriori算法实现
来源:互联网 发布:2017数据库系统工程师 编辑:程序博客网 时间:2024/05/02 02:48
<pre name="code" class="java">import java.io.BufferedReader;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;import java.util.ArrayList;import java.util.Arrays;import java.util.HashSet;import java.util.Iterator;import java.util.List;import java.util.Set;public class Apriori {public int find(List<String> list,String str){ //函数作用:查找str,在list出现的次数,其中str中的所有元素均出现在list.get(i)字符串中,才记作一次String[] str_content=str.split(" ");int count=0;String tmp=""; Iterator<String> It = list.iterator(); while(It.hasNext()){ tmp=It.next(); String[] tmp_content=tmp.split(" "); for(int i=0;i<str_content.length;i++){ int find_str_content_i=0; for(int j=0;j<tmp_content.length;j++){ if(tmp_content[j].equals(str_content[i])){ find_str_content_i=1; break; } } if(find_str_content_i!=1){ break; } if(i==(str_content.length-1)) {count +=1;} } }return count;}public Set<String> Connect(Set<String> set){ //函数作用:连接步,把输入的集合set中两两元素,如果具有 size-1项相同就才连接,生成一个size+1长度的新元素,加入输出的集合中Set<String> set0=new HashSet<String>();String[] set_content=new String[set.size()]; Iterator<String> It = set.iterator(); int i=0; while(It.hasNext()) {set_content[i]=It.next(); //System.out.println(set_content[i]); i=i+1;} for(int j=0;j<(set.size()-1);j++){ for(int k=j+1;k<set.size();k++){ if(Cmp_str(set_content[j],set_content[k])!=null){ set0.add(Cmp_str(set_content[j],set_content[k])); } } } return set0; } private String Cmp_str(String str1, String str2) {//函数作用:判断str1与str2中是否有size-1项相同,是则连接为size+1的字符串,否则输出空值null String return_str=null;String[] str1_content=str1.split(" ");String[] str2_content=str2.split(" ");Set<String> set=new HashSet<String>();for(int i=0;i<str1_content.length;i++){set.add(str1_content[i]);set.add(str2_content[i]);}if(set.size()==(str2_content.length+1)){ return_str=""; Iterator<String> It = set.iterator(); while(It.hasNext()) { return_str=return_str+" "+It.next(); } return_str=return_str.trim();}return return_str;}public Set<String> Prune(Set<String> set,int min_sup,List<String> list){ //函数作用:扫描list,将set中的元素,计数大于min_sup的元素,才添加到输出集合set0中 Set<String> set0=new HashSet<String>(); Iterator<String> It = set.iterator(); while(It.hasNext()) { String tmp=It.next(); if(find(list,tmp)>=min_sup){ set0.add(tmp); } } return set0; }public static void main(String[] args) throws IOException {int min_sup=2;BufferedReader br=new BufferedReader(new FileReader("F:/数据挖掘--算法实现/apriori算法/input.txt")); String line=""; List<String> list=new ArrayList<String>(); Set<String> set=new HashSet<String>(); while((line=br.readLine())!=null){ list.add(line); String[] content=line.split(" "); for(int i=0;i<content.length;i++){ set.add(content[i]); } } FileWriter fw=new FileWriter("F:/数据挖掘--算法实现/apriori算法/output.txt",true); Apriori a=new Apriori(); while(!set.isEmpty()) { set=a.Prune(set,min_sup,list); Iterator<String> It = set.iterator(); while(It.hasNext()) { String tmp=It.next(); fw.write(tmp+" "+String.valueOf(a.find(list,tmp))+"\r\n"); } set=a.Connect(set); //Iterator<String> It0 = set.iterator();while(It0.hasNext()){System.out.println(It0.next());} } fw.close();}}
输入:
I1 I2 I5I2 I4I2 I3I1 I2 I4I1 I3I2 I3I1 I3I1 I2 I3 I5I1 I2 I3
</pre><pre name="code" class="java">输出:
I1 6I2 7I3 6I4 2I5 2I2 I5 2I1 I3 4I2 I4 2I1 I2 4I2 I3 4I1 I5 2I1 I2 I5 2I1 I2 I3 2
0 0
- 数据挖掘--Apriori算法实现
- 数据挖掘--apriori算法实现
- 数据挖掘 apriori算法的 php实现
- 数据挖掘apriori算法Java代码实现
- 数据挖掘apriori算法Java代码实现
- 数据挖掘Apriori算法python实现
- 数据挖掘实验:Apriori算法实现C++
- 数据挖掘之Apriori算法c++实现
- 数据挖掘 Apriori算法
- 数据挖掘: Apriori算法
- 数据挖掘-Apriori算法
- 数据挖掘:Apriori算法
- 数据挖掘 apriori算法
- 数据挖掘Apriori算法
- 数据挖掘Apriori算法
- 【数据挖掘】Apriori算法
- 数据挖掘之关联规则挖掘之Apriori算法实现
- 数据挖掘算法 apriori算法
- 移动前端开发之viewport的深入理解
- Apache负载均衡+Tomcat集群
- 最小表示法 字符串循环同构问题
- 关于EditText使用的若干参考方法
- An Analysis of Facebook Photo Caching
- 数据挖掘--apriori算法实现
- Mac和Linux下使用锐捷
- Hibernate 缓存问题
- 【HTML】怎样使用a标签以post方式提交
- 创建对象中构造函数和析构函数
- curl命令详解
- Android Stdio初步使用介绍
- linux,mac 从源代码中安装git
- 开源中国iOS客户端涉及的知识点(上)