⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 apriori.java

📁 上传试试看 不知道 是不是一定成功的
💻 JAVA
字号:
package apriori;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

public class Apriori {
	public static double v = 0.4;

	public static void main(String args[]) throws Exception {
		System.out.println(System.currentTimeMillis());
		ItemSetDB itemSetDB = new ItemSetDB();
		DBConnect.getConnection();
		String sql = "select * from apriori;";
		try {
			// 获取原始数据
			ResultSet rs = DBConnect.statement.executeQuery(sql);
			while (rs.next()) {
				int tid = rs.getInt("tid");
				String content = rs.getString("item");
				Item item = new Item(tid, content);
				itemSetDB.insert(item);
			}
			// 发现 频繁项目集 集合算法
			// 1.获取L1
			ArrayList<ItemSet> itemSetList = itemSetDB.itemSetList;
			ArrayList<ItemSet> tempL = new ArrayList<ItemSet>();
			ArrayList<ItemSet> l = new ArrayList<ItemSet>();

			// 判断是否符合支持度
			for (int i = 0; i < itemSetList.size(); i++) {
				if (itemSetList.get(i).number >= itemSetList.size() * v) {
					tempL.add(itemSetList.get(i));
					l.add(itemSetList.get(i));
				}
			}

			// 循环判断当前的k-1_频繁项目集集合
			while (tempL.size() > 0) {
				ArrayList<ItemSet> tempC = aprioriGen(tempL);
				tempL = new ArrayList<ItemSet>();
				for (itemSetDB.setFirst(); itemSetDB.isInList(); itemSetDB
						.next()) {
					for (int i = 0; i < tempC.size(); i++) {
						ArrayList<Item> itemSet = (ArrayList<Item>) itemSetDB
								.currValue();
						ArrayList<Item> temp = tempC.get(i).getItemList();
						int j;
						for (j = 0; j < temp.size(); j++) {
							int k;
							for (k = 0; k < itemSet.size(); k++) {
								if (temp.get(j).getObj().equals(
										itemSet.get(k).getObj())) {
									break;
								}
							}
							if (k == itemSet.size())
								break;
						}
						if (j == temp.size()) {
							tempC.get(i).number++;
						}
					}
				}
				for (int i = 0; i < tempC.size(); i++) {
					if (tempC.get(i).number >= itemSetList.size() * v) {
						l.add(tempC.get(i));
						tempL.add(tempC.get(i));
					}
				}
			}

			for (int i = 0; i < l.size(); i++) {
				ArrayList<Item> itemList = l.get(i).getItemList();
				for (int j = 0; j < itemList.size(); j++) {
					System.out.print(itemList.get(j).getObj());
				}
				System.out.println("\t" + l.get(i).number);
			}
			System.out.println(System.currentTimeMillis());
			// 关联规则算法
			/*ArrayList<ItemSet> maxFrequentItemSet = new ArrayList<ItemSet>();
			ArrayList<ItemSet> maxFrequentItemSubset = new ArrayList<ItemSet>();
			ArrayList<Dependence> dependence = new ArrayList<Dependence>();

			for(int i=l.size()-1;i >= 0;i--){
				ItemSet itemSetTemp = l.get(i);
				if(isNotExist(itemSetTemp,maxFrequentItemSubset)){
					maxFrequentItemSet.add(itemSetTemp);
					int size =  itemSetTemp.getItemList().size();
					for(int j =1 ;j<Math.pow(2, size);j++){
						ItemSet itemSetTempSub = new ItemSet();
						ArrayList<Item> itemList = new ArrayList<Item>();
						while(j!=0){
							itemList.add(itemSetTemp.getItemList().get(j%2));
						}
						maxFrequentItemSubset.
					}
					
				}
			}
			*/
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

	// 生成候选项的方法
	public static ArrayList<ItemSet> aprioriGen(ArrayList<ItemSet> tempL) {
		ArrayList<ItemSet> tempC = new ArrayList<ItemSet>();
		for (int i = 0; i < tempL.size(); i++)
			for (int j = i + 1; j < tempL.size(); j++) {
				ItemSet tempI = new ItemSet();
				ArrayList<Item> itemListTemp = new ArrayList<Item>();
				ArrayList<Item> temp = ((ItemSet) tempL.get(i)).getItemList();
				for (int k = 0; k < temp.size(); k++) {
					itemListTemp.add(temp.get(k));
				}
				tempI.setItemList(itemListTemp);
				ItemSet tempJ = (ItemSet) tempL.get(j);
				int size = tempI.getItemList().size();
				int k;
				for (k = 0; k < size - 1; k++) {
					if (!tempI.getItemList().get(k).getObj().equals(
							tempJ.getItemList().get(k).getObj()))
						break;
				}
				if (k == size - 1) {
					ArrayList<Item> itemList = new ArrayList<Item>();
					itemList = tempI.getItemList();
					itemList.add(tempJ.getItemList().get(k));
					tempI.setItemList(itemList);
					if (!hasInfrequent(tempI, tempL))
						tempC.add(tempI);
				}
			}
		return tempC;
	}

	// 判断是否有 非频繁项目集 的子集,有返回true无返回false
	public static boolean hasInfrequent(ItemSet itemSet,
			ArrayList<ItemSet> tempL) {
		ArrayList<Item> itemList = itemSet.getItemList();
		for (int i = 0; i < itemList.size(); i++) {
			ArrayList<Item> temp = new ArrayList<Item>();
			for (int j = 0; j < itemList.size(); j++) {
				if (j != i)
					temp.add(itemList.get(j));
			}
			int j;
			for (j = 0; j < tempL.size(); j++) {
				ArrayList<Item> itemListTemp = tempL.get(j).getItemList();
				int k;
				for (k = 0; k < temp.size(); k++) {
					if (!(temp.get(k).getObj().equals(itemListTemp.get(k)
							.getObj()))) {
						break;
					}
				}
				if (k == temp.size())
					break;
			}
			if (j == tempL.size())
				return true;
		}
		return false;
	}
	
	public static boolean isNotExist(ItemSet itemSet,ArrayList<ItemSet> maxFrequentItemSubset){
		for(int i = 0;i<maxFrequentItemSubset.size();i++){
			if(itemSet.equal(maxFrequentItemSubset.get(i)))
				return false;
		}
		return true;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -