数据挖掘--apriori算法实现

<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 I5
I2 I4
I2 I3
I1 I2 I4
I1 I3
I2 I3
I1 I3
I1 I2 I3 I5
I1 I2 I3
</pre><pre name="code" class="java">输出:
I1 6
I2 7
I3 6
I4 2
I5 2
I2 I5 2
I1 I3 4
I2 I4 2
I1 I2 4
I2 I3 4
I1 I5 2
I1 I2 I5 2
I1 I2 I3 2


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值