Aproior

来源:互联网 发布:如何用telnet测试端口 编辑:程序博客网 时间:2024/06/05 03:23
import java.util.*;/** * Created by sdust on 2017/4/18. */public class Aproior {    private int min_support = 2; //最小支持度    private double confidence_level = 0.6; //最小置信度    //原始集合    private static final String[][] orignSet = new String[][]{            {"I1","I2","I5"},            {"I2","I4"},            {"I2","I3"},            {"I1","I2","I4"},            {"I1","I3"},            {"I2","I3"},            {"I1","I3"},            {"I1","I2","I3","I5"},            {"I1","I2","I3"}    };    private static final ArrayList<String> all = new ArrayList<String>();    public void init() {        all.add("I1");        all.add("I2");        all.add("I3");        all.add("I4");        all.add("I5");    }    //通过候选集得到频繁集    public Vector<ArrayList<String>> getFrequentItemset(Vector<ArrayList<String>> arrayListMap) {        Vector<ArrayList<String>> arrayListVector = new Vector<>();        for(int i = 0; i < arrayListMap.size(); ++i) {            String[] strings = null;            strings = arrayListMap.get(i).toArray(strings);            if(isSupport(strings)){                arrayListVector.add((ArrayList<String>) Arrays.asList(strings));            }        }        return arrayListVector;    }    //从当前的频繁集得到候选集    public Vector<ArrayList<String>> nextCandidateItemset(Vector<ArrayList<String>> nowFrequentItemset) {        Vector<ArrayList<String>> nextCandidateItemset = new Vector<>();        for(int i = 0; i < nowFrequentItemset.size(); ++i) {            ArrayList<String> arrayList = nowFrequentItemset.get(i);            ArrayList<String> remainItem = remain(arrayList);            for(int j = 0; j < remainItem.size(); ++j) {                String t = remainItem.get(j); //取出剩余集合中一个物品                ArrayList<String> arrayList1 = new ArrayList<>();                 arrayList1 = (ArrayList)arrayList.clone(); // 频繁集                arrayList1.add(t); // 频繁集 + t = 由该频繁集中的一项得到的新候选集中的一项                nextCandidateItemset.add(arrayList1); // 添加到候选集中            }        }        return nextCandidateItemset; // 返回候选集    }    //检测候选集中的一项是否满足最小置信度    public boolean isSupport(String[] strings) {        int count = 0;        for(int i = 0; i < orignSet.length; ++i) {            String[] t = orignSet[i]; //取原始集合中的一组            boolean o1 = true; //假设t是包含strings中的全部元素的            for(int j = 0; j < strings.length; ++j) {                boolean o2 = false;                //找t中是否包含strings中的strings[j]元素                for(int k = 0; k < t.length; ++k) {                    if(strings[i].equals(t[k])) {                        o2 = true;                        break;                    }                }                //如果t不包含strings[j]元素,则o1=false,不再继续查找                if(!o2) {                    o1 = false;                    break;                }            }            if(o1) ++count;        }        return count >= min_support;    }    //取出总的物品集合中没有在该集合中的物品    public ArrayList<String> remain(ArrayList<String> itemSet) {        ArrayList<String> remainSet = new ArrayList<>();        for(int i = 0; i < itemSet.size(); ++i) {            if(all.contains(itemSet.get(i))) continue;            remainSet.add(itemSet.get(i)) ;        }        return remainSet;    }}
0 0
原创粉丝点击