亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? apriori.java

?? 數據挖掘關聯規則Apiori算法的java實現,關于算法可參考韓家偉的數據挖掘教程
?? JAVA
字號:
/**
 * Copyright (c) 2003 HCYCOM, Inc. All Rights Reserved.
 *
 * A Java application of Apriori algorithm.
 *
 * Make sure that your DBMS Service is running before the OS loads the program.
 * Either SQLServer2000 or MySQL4.0 is your good start.
 *
 * @author Zengli, China Agricultural University.
 * @version 0.01 03/07/09
 * 
 * mailto:zengli@hcycom.com
 */
 
import java.sql.*;
import java.util.*;
import java.math.*;

public class Apriori
{
	Connection conn;
	int rowCount;
	private String url,user,passwd;
	String[] itemList = null;
	int[] itemCount = null;
	final double MIN_SUP = 0.4;//最小支持度s
	final double MIN_CONF = 0.5;//最小置信度c
	
	PreparedStatement pstmt = null;
	ResultSet rs = null;			//定義結果集	
	
	PreparedStatement ckPstmt = null;
	ResultSet ckRs = null;	
	PreparedStatement lkPstmt = null;
	
	//構造函數
	Apriori()
	{		
		url = "jdbc:odbc:AprioriMySQL";//定義JDBC-ODBC橋的URL
		user = "root";	
		passwd = "";	
		
		conn = null;					
		rowCount = 0;
		
		//預設項列表(商品集)={啤酒,尿布,擦身粉,面包,雨傘,牛奶,洗衣粉,可樂}
		itemList = new String[]{"beer","diaper","toiletpowder","bread","umbrella","milk","washingpowder","coke"};
		itemCount = new int[itemList.length];
	}
		
	public static void main(String[] args)
	{				
		Apriori a = new Apriori();
		a.execute();
	}
	
	//加載指定的數據庫驅動程序
	void loadJdbcOdbcDriver(String driverName)
	{
		try{
			System.out.println("加載數據庫驅動程序 ...OK!");
			Class.forName(driverName);
		}
		catch(java.lang.ClassNotFoundException e){
			System.err.print("ClassNotFoundException:");
			System.err.println(e.getMessage());
		}	
	}
	
	//Apriori算法實現
	void execute()
	{	
		
		//加載數據庫驅動程序				
		loadJdbcOdbcDriver("sun.jdbc.odbc.JdbcOdbcDriver");
		
		System.out.println("初次掃描數據庫commodity ...OK!\n");
		try{
			//建立連接ODBC數據源
			conn = DriverManager.getConnection(url,user,passwd);
			
			//提交連接請求
			conn.setAutoCommit(false);	
			
			//------- 初次掃描數據庫commodity的transaction表,對每個候選(即商品項)以及事務(即交易)計數 ------
			
			pstmt = conn.prepareStatement("SELECT * FROM transaction",ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);				
			rs = pstmt.executeQuery();
			
			int id;
			String commodity_list;			
			Statement stmt5 = null;
			Statement stmt8 = null;
			Statement stmt9 = null;
			stmt5 = conn.createStatement();
			stmt5.execute("DELETE FROM lk");			
			
			for (int i = 0; i < itemList.length; i++){
				rowCount = 0;
				while (rs.next()){
					id = rs.getInt(1);	
					commodity_list = rs.getString("commodity_list");					
					if (commodity_list.indexOf(itemList[i]) != -1) itemCount[i]++;//對每個候選計數
					rowCount++;	
				}
				System.out.println(itemList[i] + "\t\t\t(" + itemCount[i] + ")");
				
				//比較候選支持度計數與最小支持度計數,得出L1表				
				if (itemCount[i] >= (int)(MIN_SUP * rowCount)){
					pstmt = conn.prepareStatement("INSERT INTO Lk(itemsets,sup_count) VALUES(?,?)",ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);						
					pstmt.setString(1,itemList[i]);
					pstmt.setInt(2,itemCount[i]);
					pstmt.executeUpdate();	
				}  
				rs.beforeFirst();
			}
			
			//------- 算法核心 : 使用候選項集Ck找頻繁項集Lk ------- 

			for (int k = 2; ; k++){

				if (!aproiri_gen(k - 1, MIN_SUP)) break;//連接-剪枝生成候選集Ck(即Ck表)
				
				//讀取Ck表的每一個候選項集
				pstmt = conn.prepareStatement("SELECT * FROM ck",ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
				rs = pstmt.executeQuery();	
				
				stmt8 = conn.createStatement();
				stmt8.execute("DELETE FROM lk");//清空舊的Lk表(即Lk-1表)			
				while (rs.next()){
					String ck = rs.getString("itemsets");//讀出Ck中每個候選項集(即Ck表的第一個字段)
					
					//將Ck當前候選項集中各元素分離并復制到Vector向量的各分量中
					Vector ckItemList = new Vector(k);
					ckItemList = splitItemList(k, ck);
					
					int ckSupCnt = 0;//Ck項集支持度
					
					//掃描數據庫commodity的transaction表,為Ck中的每個候選項集計數
					ckPstmt = conn.prepareStatement("SELECT * FROM transaction",ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
					ckRs = ckPstmt.executeQuery();				
					while (ckRs.next()){//循環讀入transaction表的記錄
						String s = ckRs.getString("commodity_list");//得到commodity_list字段內容
						System.out.println("commodity_field = "+s);
						int j = 0;
						for (; j < k; j++){
							if (s.indexOf(ckItemList.elementAt(j).toString()) == -1) break;//掃描當前記錄,判斷是否同時存在Ck當前候選項集中的所有元素							
						}
						
						if (j >= k) ckSupCnt++;//Ck候選項集支持度計數
					}					
					
					//比較候選支持度計數與最小支持度計數,生成新的Lk表
					System.out.println("ckSupCnt = " + ckSupCnt +" (int)(MIN_SUP * rowCount)=" +(int)(MIN_SUP * rowCount));
					if (ckSupCnt >= (int)(MIN_SUP * rowCount)){
						stmt9 = conn.createStatement();
						stmt9.execute("INSERT INTO lk(itemsets,sup_count) VALUES('" + ck + "'," + ckSupCnt + ")");
					}					
				}				
			}
				
			//操作語句提交
			conn.commit();
			conn.setAutoCommit(true);
			
			if (ckPstmt != null) ckPstmt.close();			
			if (lkPstmt != null) lkPstmt.close();
			if (pstmt != null) pstmt.close();			
			if (conn != null) conn.close();
			
			System.out.println("-- END --");
		}
		catch(BatchUpdateException b){
			System.err.println("--BatchUpdateException--");	
			System.err.println("SQLState: " + b.getSQLState());
			System.err.println("Message: " + b.getMessage());
			System.err.println("Vendor: " + b.getErrorCode());
			System.err.print("Update counts: ");
			int [] updateCounts = b.getUpdateCounts();
			for(int i = 0; i<updateCounts.length;i++){
				System.err.print(updateCounts[i] + " ");
			}
			System.err.println("");			
		}
		catch(SQLException ex){
			System.err.println("--SQLException--");
			System.err.println("SQLState: " + ex.getSQLState());
			System.err.println("Message: " + ex.getMessage());
			System.err.println("Vendor: " + ex.getErrorCode());
		}

	}
	
	
	//連接-剪枝動作,產生候選k-項集(即得到Ck表)
	boolean aproiri_gen(int k, double min_sup)
	{
		ResultSet lkRs1 = null;
		ResultSet lkRs2 = null;
		
		int ckCnt = 0;
		
		Statement stmt = null;
		Statement stmt2 = null;
		Statement stmt7 = null;
		try{
			//讀取舊Lk表(即Lk-1表)中的所有項集			
			stmt = conn.createStatement();
			lkRs1 = stmt.executeQuery("SELECT * FROM lk");			
			stmt7 = conn.createStatement();
			stmt7.execute("DELETE FROM ck");
		
			ResultSet tRs1 = lkRs1;							
			while (lkRs1.next()){
				String lkItemsets1 = lkRs1.getString("itemsets");//讀取當前lkRs1結果集記錄的第一個字段
				stmt2 = conn.createStatement();
				lkRs2 = stmt2.executeQuery("SELECT * FROM lk");
				while (lkRs2.next()){
					String lkItemsets2 = lkRs2.getString("itemsets");//讀取當前lkRs2結果集記錄的第一個字段
					if (isLinkable(k, lkItemsets1, lkItemsets2)){//判斷當前lkRs1項集與當前lkRs2項集是否存在可連接性	
						System.out.println("k="+ k +" lkItemsets1 = "+ lkItemsets1 + "  lkItemsets2= "+ lkItemsets2);				
						if (!pruneAction(joinAction(k, lkItemsets1, lkItemsets2), tRs1)) ckCnt++;//連接-剪枝;統計剪枝后剩余的Ck項集數										
					}
					else break;//不存在可連接性則中斷本次lkRs2結果集循環
				}
			}
		}
		catch(Exception e){
			e.printStackTrace();	
		}		
		System.out.println("ckCnt=" + ckCnt);
		if (ckCnt == 0)	return false;//如剪枝后Ck項集的計數值為0則算法終止
		else return true;			
	}
	
	//分離字符串并返回到向量中
	Vector splitItemList(int k, String cl)
	{
		String[] strArray = cl.split(",");
		Vector v = new Vector(Arrays.asList(strArray));//將字符串數組轉換為向量
		
		System.out.println("splitItem = "+v);		
		return v;	
	}
	
	//判斷是否具有可連接性
	boolean isLinkable(int k, String s1,String s2)
	{		
		Vector v1 = splitItemList(k, s1);
		Vector v2 = splitItemList(k, s2);
		
		int i = 0;
		int cnt = 0;
		for (; i < v1.size(); i++){
				if (v1.elementAt(i) == v2.elementAt(i)) cnt++;//break;//未滿足可連接條件			
		}
		
		if ((cnt == v1.size() -1) && !v1.equals(v2)){
			return true;//可連接
		}
		else return false;
	}
	
	//連接動作
	Vector joinAction(int k, String s1,String s2)
	{
		Vector v1 = splitItemList(k, s1);
		Vector v2 = splitItemList(k, s2);
		
		v1.add(v2.elementAt(v2.size() -1));//取v2最后一個分量插入到v1的尾部
		
		return v1;
	}
	
	//判斷當前頻繁項集Ck中的所有(k-1)子集是否頻繁,否則進行剪枝
	boolean pruneAction(Vector v, ResultSet rs)
	{	
		//----------- 該處對原Apriori算法中描述的剪枝動作有所改動 ------------
				
		//用頻繁項集L(k-1)與剪枝前的候選項集Ck相匹配,然后由 ?(計數值 > k) 判斷是否應當剪去該候選項集		
		Statement stmt3 = null;
		Statement stmt4 = null;
		ResultSet rs2 = null;
		ResultSet rs3 = null;
		
		int containCnt = 0;
		
		try{
			stmt3 = conn.createStatement();
			rs2 = stmt3.executeQuery("SELECT * FROM lk");
			while (rs2.next()){
				String lkItemsets = rs2.getString("itemsets");//讀入L(k-1)的各項集		
				Vector lkItemList = splitItemList(v.size() - 1, lkItemsets);//(v.size - 1)即 k - 1				
				System.out.println("v_list = " +v +"  lkItemList = "+lkItemList);
				if (v.containsAll(lkItemList)) containCnt++;		
			}			
		
		System.out.println("v.size = " +v.size() +"  containCnt = "+containCnt);
			if (containCnt >= v.size()){//匹配數 >= k說明該候選項集需保留(非剪枝)
			
				//------ 得到候選集(Ck表) --------
				String s = new String(v.elementAt(0).toString());			
				for (int i = 1; i < v.size(); i++){
					s = s + "," + v.elementAt(i);	
				}			
				System.out.println("s = " +s);
				
				stmt4 = conn.createStatement();
				stmt4.execute("INSERT INTO ck(itemsets,sup_count) VALUES('" + s + "',0)");				
				stmt4.close();
				return	false;//非剪枝,保留			
			}
		}
		catch(Exception e){
			e.printStackTrace();
		}		
		return true;//剪枝,返回true	
	}		
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产日韩欧美精品一区| 在线电影欧美成精品| 国模少妇一区二区三区| 日韩精品一级二级| 天天av天天翘天天综合网色鬼国产 | 欧美色涩在线第一页| 在线精品视频小说1| 欧美日韩和欧美的一区二区| 欧美亚洲一区二区在线观看| 欧美午夜宅男影院| 欧美一区二区成人| 国产亚洲精品bt天堂精选| 久久久久国产精品麻豆| 中文字幕在线一区二区三区| 中文字幕日本不卡| 亚洲成人资源在线| 国内精品不卡在线| 一本大道av一区二区在线播放| 在线观看视频一区二区欧美日韩| 欧美日本国产视频| 久久久www免费人成精品| 国产精品成人免费在线| 亚洲超碰精品一区二区| 精品午夜一区二区三区在线观看| 国产suv一区二区三区88区| av一区二区久久| 欧美一区二区三区四区久久| 中文字幕av不卡| 亚洲超碰精品一区二区| 国产精品一级在线| 欧美日韩中文精品| 国产欧美1区2区3区| 亚洲午夜精品在线| 国产成人精品免费网站| 56国语精品自产拍在线观看| 亚洲国产高清aⅴ视频| 日本中文字幕一区二区视频| 国产成人免费视频一区| 欧美三级午夜理伦三级中视频| 精品va天堂亚洲国产| 亚洲天堂福利av| 国产一区二区在线免费观看| 在线观看成人小视频| 久久精品日韩一区二区三区| 亚洲一二三四区| 99久久婷婷国产综合精品| 日韩免费高清av| 亚洲综合在线视频| 成人高清在线视频| 久久在线观看免费| 日本麻豆一区二区三区视频| 91香蕉视频黄| 国产午夜精品理论片a级大结局| 午夜精品久久久久久久99水蜜桃 | 亚洲国产精品v| 七七婷婷婷婷精品国产| 欧美视频一区二区| 亚洲日本va在线观看| 国产成人午夜精品5599| 日韩一级欧美一级| 日日摸夜夜添夜夜添精品视频| 91麻豆产精品久久久久久 | 成年人午夜久久久| 久久精品欧美日韩| 国产一本一道久久香蕉| 日韩精品一区在线观看| 日本免费在线视频不卡一不卡二| 在线观看亚洲a| 亚洲永久免费av| 欧美伊人久久大香线蕉综合69| 亚洲日本在线天堂| 色哟哟精品一区| 亚洲精品国产一区二区三区四区在线 | 欧美色图12p| 亚洲综合丝袜美腿| 欧美男男青年gay1069videost| 亚洲一区二区美女| 欧美视频一区二区三区| 日本欧美久久久久免费播放网| 欧美老女人在线| 久久99久久久久| 久久奇米777| 本田岬高潮一区二区三区| 国产精品国产自产拍高清av| 成人动漫av在线| 一区二区三区四区在线播放| 欧美日韩亚洲综合一区二区三区| 午夜久久久久久| 精品国产一区二区三区av性色| 精品一区免费av| 国产精品久久久久久户外露出| 91猫先生在线| 强制捆绑调教一区二区| 国产亚洲美州欧州综合国| 国产69精品久久久久毛片 | 欧美日韩一区小说| 久久超级碰视频| 国产精品天干天干在观线| 91成人国产精品| 毛片不卡一区二区| 国产精品伦一区| 欧美午夜电影一区| 国产美女av一区二区三区| 亚洲人成人一区二区在线观看 | 午夜精品福利在线| 精品少妇一区二区三区在线播放| 国产成人无遮挡在线视频| 亚洲人吸女人奶水| 日韩你懂的在线播放| 97久久超碰国产精品电影| 免费高清在线一区| 亚洲欧洲制服丝袜| 久久亚洲一级片| 欧美日韩精品三区| 91麻豆123| 蜜桃久久久久久久| 亚洲一区在线视频| 欧美高清在线一区| 日韩欧美一区二区视频| 色综合色狠狠天天综合色| 国产一区久久久| 日韩不卡一二三区| 亚洲精品免费电影| 欧美激情在线免费观看| 欧美一卡二卡三卡| 在线视频亚洲一区| 成人精品小蝌蚪| 韩国精品久久久| 日韩在线一二三区| 亚洲精品一二三四区| 中文在线资源观看网站视频免费不卡| 欧美精品久久一区二区三区| 色综合一个色综合亚洲| 国产suv精品一区二区三区| 精品夜夜嗨av一区二区三区| 亚洲va天堂va国产va久| 伊人色综合久久天天人手人婷| 国产日韩精品一区二区三区| 日韩免费看网站| 精品国产一区二区三区久久影院 | 久久久久国产精品麻豆ai换脸| 欧美精品精品一区| 欧美性三三影院| jlzzjlzz欧美大全| 成人毛片视频在线观看| 国产 日韩 欧美大片| 国产伦精品一区二区三区在线观看| 偷拍一区二区三区| 日本系列欧美系列| 蜜臀av性久久久久蜜臀aⅴ四虎 | 国产一区二区三区免费| 免费成人美女在线观看| 日韩高清不卡一区| 免费欧美日韩国产三级电影| 日韩av中文在线观看| 日本伊人午夜精品| 日韩av一二三| 国产一区二区精品久久91| 国产成人综合亚洲网站| 菠萝蜜视频在线观看一区| 91视视频在线直接观看在线看网页在线看| 成人性生交大片免费看中文| 99久久婷婷国产综合精品| 91美女视频网站| 欧美美女一区二区三区| 欧美大片在线观看一区| 久久久久久久久一| 中文字幕在线一区免费| 香蕉久久夜色精品国产使用方法 | 日韩一区二区三区免费看| 91精品婷婷国产综合久久竹菊| 日韩一级视频免费观看在线| 2024国产精品视频| 亚洲欧洲精品一区二区精品久久久| 亚洲色图欧美激情| 午夜激情一区二区| 国产精品一区二区三区乱码 | 老鸭窝一区二区久久精品| 国产麻豆午夜三级精品| 日本道在线观看一区二区| 91精品国产一区二区三区| 国产亚洲精品中文字幕| 亚洲综合图片区| 国产不卡高清在线观看视频| 亚洲精品在线网站| 亚洲人一二三区| 免费成人在线播放| 色呦呦网站一区| 精品久久人人做人人爽| 亚洲女子a中天字幕| 狠狠色丁香久久婷婷综合丁香| 欧洲精品中文字幕| 久久久国际精品| 性久久久久久久| 91在线porny国产在线看| 欧美成人vr18sexvr| 亚洲精品视频一区| 国产精品资源站在线| 欧美电影在哪看比较好| 亚洲视频 欧洲视频|