1. Trang chủ
  2. » Luận Văn - Báo Cáo

Khai phá phụ thuộc hàm xấp xỉ sử dụng luật kết hợp và ứng dụng

76 12 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 76
Dung lượng 8,38 MB

Nội dung

TRƯỜNG Đ H ĐẠI HỌC THÁI NGUYÊN Ệ THÔNG TIN & TRUYỀN THÔNG Thái Nguyên - 2015 Số hóa Trung tâm Học liệu - ĐHTN http://www.lrc-tnu.edu.vn/ TRƯỜ ĐẠI HỌC THÁI NGUYÊN Ệ THÔNG TIN & TRUYỀN THÔNG Chuyên ngành: Khoa học máy tính Mã số: 60.48.01.01 Người hướng dẫn khoa học TS Nguyễn Huy Đức Thái Nguyên - 2015 Số hóa Trung tâm Học liệu - ĐHTN http://www.lrc-tnu.edu.vn/ i LỜI CAM ĐOAN Tôi xin cam đoan luận văn tự thân tơi tìm hiểu, nghiên cứu hướng dẫn TS Nguyễn Huy Đức Các chương trình thực nghiệm thân tơi lập trình, kết hồn tồn trung thực Các tài liệu tham khảo trích dẫn thích đầy đủ TÁC GIẢ LUẬN VĂN Phạm Thị Thanh Nga Số hóa Trung tâm Học liệu - ĐHTN http://www.lrc-tnu.edu.vn/ ii em em tr ập thể nhà khoa học, – – Nguyên Với vốn kiến thức tiếp thu quãng thời gian học tập giảng đường không tảng cho q trình nghiên cứu luận văn mà cịn hành trang quý báu để em bướ ột cách vững tự tin Trong trình viết luận văn, thân em cố gắng khả năng, vốn kinh nghiệm nghiên cứu thời gian có hạn nên luận văn khơng tránh khỏi thiếu sót Vì vậy, em mong nhận bảo, góp ý nhà khoa học, thầy, để ! , Số hóa Trung tâm Học liệu - ĐHTN 08 năm 2015 http://www.lrc-tnu.edu.vn/ iii MỤC LỤC LỜI CAM ĐOAN i ii MỤC LỤC iii N VĂN v DANH MỤC VIẾT TẮ DANH MỤ ẢNG BIỂU vi DANH MỤ Ẽ vii MỞ ĐẦU Chương TỔNG QUAN VỀ PHỤ THUỘC HÀM, PHỤ THUỘC HÀM XẤP XỈ VÀ LUẬT KẾT HỢP 1.1 Quan hệ phụ thuộc hàm 1.2 Phụ thuộc hàm xấp xỉ 1.2.1 Định nghĩa 1.2.2 Một số độ đo 1.3 Luật kết hợp 13 1.3.3 Khai phá luật kết hợ Kế 13 24 Chương BIỂU DIỄN PHỤ THUỘC HÀM XẤP XỈ QUA LUẬT KẾT HỢP 25 2.1 Định nghĩa PTH xấp xỉ qua LKH 25 28 2.1.2 Về độ đo độ xác 29 31 33 34 35 Số hóa Trung tâm Học liệu - ĐHTN http://www.lrc-tnu.edu.vn/ iv 36 40 42 Chương T 43 43 44 46 48 Kết luận chương 54 55 57 PHỤ LỤC 59 Số hóa Trung tâm Học liệu - ĐHTN http://www.lrc-tnu.edu.vn/ v DANH MỤC VIẾT TẮT Ký hiệu Diễn giải RU U U A1, , Am U S = (U, F) s X Y c X Y s X Y c X Y cf I X ,F U X X Y Y X Y X IY IX Y IY LĐQH CSDL Cơ sở liệu PTH LKH Số hóa Trung tâm Học liệu - ĐHTN http://www.lrc-tnu.edu.vn/ vi DANH MỤC BẢNG BIỂU Bảng 1.2 Bảng quan hệ ví dụ PTH xấp xỉ 10 11 Bảng 1.5 Cơ sở liệ D 14 Bảng 1.6 Độ hỗ trợ mục 15 Bảng 1.7 Độ hỗ trợ tập mục 15 Bảng 1.8 Độ tin cậy luật 16 Bả D cho thuật toán Apriori 20 ực hiệ 21 24 R 27 TD R 27 2.3 Một số LKH TD tương ứng với PTH xấp xỉ R 28 45 Số hóa Trung tâm Học liệu - ĐHTN http://www.lrc-tnu.edu.vn/ vii DANH MỤ HÌNH VẼ Hình 1.1 Phân loại thuật toán khai phá tập mục phổ biến 17 44 46 47 48 49 49 Hình 3.7 Giao diện kết khai phá PHT xấp xỉ 51 Hình 3.8 Giao diện kết khai phá PTH xấp xỉ 52 Số hóa Trung tâm Học liệu - ĐHTN http://www.lrc-tnu.edu.vn/ MỞ ĐẦU Tính cấp thiết đề tài Sự phát triển nhanh chóng cơng nghệ thơng tin (CNTT) tác động đến mặt xã hộ ững thành tựu công nghệ lưu trữ cho phép tạo nguồn liệu khổng lồ Việc khai thác nguồn liệu này, ngày cấp thiết đặt thử thách lớn cho ngành CNTT đặc biệt lĩnh vực khai phá liệu Như biết, phụ thuộc hàm đóng vai trò quan trọng lý thuyết thiết kế sở liệu Nó đảm bảo tính xác tính quán sở liệu Nhờ có phụ thuộc hàm, hệ quản trị sở liệu quản lý tốt chất lượng liệu Tuy vậy, thực tế có số giá trị liệu khơng xác, số ngoại lệ làm cho phụ thuộc hàm không thỏa mãn Sự phụ thuộc hàm “tuyệt đối” q nghiêm ngặt hình dung quan hệ có hàng nghìn bộ, có khoảng vài vi phạm phụ thuộc hàm Điều làm tính chất “phụ thuộc” vốn có thuộc tính Vì vậy, nhà nghiên cứu sở liệu mở rộng phụ thuộc hàm thành khái niệm phụ thuộc hàm xấp xỉ Các phụ thuộc hàm cho phép có số lượng lỗi định liệu phụ thuộc hàm Suy diễn phụ thuộc hàm xấp xỉ ấn đề thời sự, nhà ợ khoa học tập trung nghiên ệ thông tin Khai phá phụ thuộc hàm xấp xỉ sử dụng luật kết hợp hướng nghiên cứu đề xuất thời gian gầ , chọn đề tài: “Khai phá phụ thuộc hàm xấp xỉ sử dụng luật kết hợp ứng dụng” làm đề tài luận văn tốt nghiệp Đối tượng phạm vi nghiên cứu Tìm hiểu phụ thuộc hàm, phụ thuộc hàm xấp xỉ tính chất, độ đo lỗi nó, khái niệm luật kết hợp, tính chất thuật tốn điển hình khai phá luật kết hợp 53 (Do uong, Luong thuc) → (Hoa qua) PTH có giá trị sau: : s = 0.12 : c = 1.00 : cf = 1.00 g1 = 0.00 lỗi g = 0.00 Ở dòng thứ PTH xấp xỉ là: (1, 3) → (2, 4) ánh xạ ngược lại nhóm mặt hàng hình 3.1 ta PTH: (Do uong, Luong thuc) → (Hoa qua, Thuc pham) PTH có giá trị sau: : s = 0.12 : c = 1.00 : cf = 1.00 g1 = 0.00 lỗi g = 0.00 Ở dòng thứ PTH xấp xỉ là: (1, 4) → (2, 3) ánh xạ ngược lại nhóm mặt hàng hình 3.1 ta PTH: (Do uong, Thuc pham) → (Hoa qua, Luong thuc) PTH có giá trị sau: : s = 0.12 : c = 0.89 : cf = 0.87 g1 = 0.02 lỗi g = 0.11 54 Ở dòng thứ 11 PTH xấp xỉ là: (1, 2, 3, 4) → ánh xạ ngược lại nhóm mặt hàng hình 3.1 ta PTH: (Do uong, Hoa qua, Luong thuc, Thuc pham) → (Sua) PTH có giá trị sau: : s = 0.12 : c = 1.00 : cf = 1.00 g1 = 0.00 lỗi g = 0.00 MinCF MinCF sinh Kết luận chương 55 đem đến thành công cho tổ chức, cá nhân giới, sau: - Trình bày vấn đề PTH, PTH xấp xỉ, luật kết hợp như: Khái niệm phụ thuộc hàm xấp xỉ; khái niệm luật kết hợp, độ hỗ trợ độ tin cậy luật kết hợp, tính chất -T cách độ hỗ trợ, , , Đồng thời, trình bày , dựa tìm Phân tích độ đo xác, độ đo lỗi g1, g2, g3, g4 định nghĩa PTH xấp xỉ qua luật kết hợp 56 văn , xây dựng chương trình thực nghiệm : : - Cải tiến tính hiệu thuật tốn tìm PTH xấp xỉ dựa luật kết hợp cách sử dụng thuật toán khai phá luật kết hợp khác hiệu thuật toán Apriori - Nghiên cứu độ đo để đánh giá PTH xấp xỉ nhận 57 Tiếng Việt [1] Trần Duy Anh (2014), “Biểu diễn phụ thuộc hàm xấp xỉ theo phân hoạch, ma trận phân biệt luật kết hợp”, Tạp chí Tin học Điều khiển học, 30(2) [2] Hồ Thuần, Hồ Cẩm Hà (2005), “Các hệ sở liệu: Lý thuyết tập”, Nhà xuất Giáo dục [3] Vũ Đức Thi (1997), “Cơ sở liệu - Kiến thức thực hành”, Nhà xuất Thống kê [4] Nguyễn Thanh Thủy (2003), “Phát tri thức khai phá liệu: Công cụ, phương pháp ứng dụng”, Bài giảng Trường Thu, Hà Nội Tiếng Anh [5] Berzal F, Blanco I, Sánchez D, Vila M (2002), “Measuring the accuracy and interest of association rules: A new framework” Intell Data Anal [6] Bra P.D, Paredaens J (1983), “Horizontal decompositions for handling exceptions to functional dependencies” Adv Database Theor [7] Bramer M A (2007), “Principles of Data Mining”, SpringerVerlagLondon [8] Cubero J., Cuenca F., Blanco I., Vila M (1998), “Incomplete functional dependencies versus knowledge discovery in databases” Proceedings of the EUFIT’98, Aachen, Germany [9] Giannella C., Robertson E (2000), “On an Information Theoretic Approximation Measure for Functional Dependencies” Computer Science Department, Indiana University, Bloomington 58 [10] Kalavagattue A K (2008), “Mining approximate functional dependencies as condensed representations of association rules” Master’s thesis, Arizona State University [11] Kivinen J., Mannila H (1995), “Approximate dependency inference from relations” Theor Comput Sci [12] Sánchez D., Serrano J.M., Blanco I (2008), “Using association ruler to mine for strong approximate dependencies”, Data Min knowl Disc, pp 313 – 348 59 PHỤ LỤC CODE NGUỒN MỘT SỐ HÀM CHÍNH AlgoApriori.java (Thuật toán Apriori) import import import import import import import import import import import import java.io.BufferedReader; java.io.BufferedWriter; java.io.FileReader; java.io.FileWriter; java.io.IOException; java.util.ArrayList; java.util.Collections; java.util.Comparator; java.util.HashMap; java.util.List; java.util.Map; java.util.Map.Entry; import import import import ca.pfv.spmf.algorithms.ArraysAlgos; ca.pfv.spmf.patterns.itemset_array_integers_with_count.Itemset; ca.pfv.spmf.patterns.itemset_array_integers_with_count.Itemsets; ca.pfv.spmf.tools.MemoryLogger; public class AlgoApriori { protected int k; protected int totalCandidateCount = protected long startTimestamp; protected long endTimestamp; private int itemsetCount; private int databaseSize; private int minsupRelative; private List database = null; protected Itemsets patterns = null; BufferedWriter writer = null; public AlgoApriori() { } public Itemsets runAlgorithm(double minsup, String input, String output) throws IOException { if(output == null){ writer = null; patterns = new Itemsets("FREQUENT ITEMSETS"); }else{ patterns = null; writer = new BufferedWriter(new FileWriter(output)); } 60 startTimestamp = System.currentTimeMillis(); itemsetCount = 0; totalCandidateCount = 0; MemoryLogger.getInstance().reset(); databaseSize = 0; Map mapItemCount = new HashMap(); database = new ArrayList(); BufferedReader reader = new BufferedReader(new FileReader(input)); String line; while (((line = reader.readLine()) != null)) { if (line.isEmpty() == true || line.charAt(0) == '#' || line.charAt(0) == '%' || line.charAt(0) == '@') { continue; } String[] lineSplited = line.split(" "); int transaction[] = new int[lineSplited.length]; for (int i=0; i< lineSplited.length; i++) { Integer item = Integer.parseInt(lineSplited[i]); transaction[i] = item; Integer count = mapItemCount.get(item); if (count == null) { mapItemCount.put(item, 1); } else { mapItemCount.put(item, ++count); } } database.add(transaction); databaseSize++; } reader.close(); this.minsupRelative = (int) Math.ceil(minsup * databaseSize); k = 1; List frequent1 = new ArrayList(); for(Entry entry : mapItemCount.entrySet()){ if(entry.getValue() >= minsupRelative){ frequent1.add(entry.getKey()); saveItemsetToFile(entry.getKey(), entry.getValue()); } } mapItemCount = null; Collections.sort(frequent1, new Comparator() { public int compare(Integer o1, Integer o2) { return o1 - o2; } }); if(frequent1.size() == 0){ if(writer != null){ writer.close(); } return patterns; 61 } totalCandidateCount += frequent1.size(); List level = null; k = 2; do{ MemoryLogger.getInstance().checkMemory(); List candidatesK; if(k ==2){ candidatesK = generateCandidate2(frequent1); }else{ candidatesK = generateCandidateSizeK(level); } totalCandidateCount += candidatesK.size(); for(int[] transaction: database){ if(transaction.length < k) { continue; } loopCand: for(Itemset candidate : candidatesK){ int pos = 0; for(int item: transaction){ if(item == candidate.itemset[pos]){ pos++; if(pos == candidate.itemset.length){ candidate.support++; continue loopCand; } }else if(item > candidate.itemset[pos]){ continue loopCand; } } } } level = new ArrayList(); for (Itemset candidate : candidatesK) { if (candidate.getAbsoluteSupport() >= minsupRelative) { level.add(candidate); saveItemset(candidate); } } k++; }while(level.isEmpty() == false); endTimestamp = System.currentTimeMillis(); MemoryLogger.getInstance().checkMemory(); if(writer != null){ writer.close(); } return patterns; } 62 public int getDatabaseSize() { return databaseSize; } private List generateCandidate2(List frequent1) { List candidates = new ArrayList(); for (int i = 0; i < frequent1.size(); i++) { Integer item1 = frequent1.get(i); for (int j = i + 1; j < frequent1.size(); j++) { Integer item2 = frequent1.get(j); candidates.add(new Itemset(new int []{item1, item2})); } } return candidates; } protected List generateCandidateSizeK(List levelK_1) { List candidates = new ArrayList(); loop1: for (int i = 0; i < levelK_1.size(); i++) { int[] itemset1 = levelK_1.get(i).itemset; loop2: for (int j = i + 1; j < levelK_1.size(); j++) { int[] itemset2 = levelK_1.get(j).itemset; for (int k = 0; k < itemset1.length; k++) { // if they are the last items if (k == itemset1.length - 1) { if (itemset1[k] >= itemset2[k]) { continue loop1; } } // if they are not the last items, and else if (itemset1[k] < itemset2[k]) { continue loop2; } else if (itemset1[k] > itemset2[k]) { continue loop1; } } int newItemset[] = new int[itemset1.length+1]; System.arraycopy(itemset1, 0, newItemset, 0, itemset1.length); newItemset[itemset1.length] = itemset2[itemset2.length -1]; if (allSubsetsOfSizeK_1AreFrequent(newItemset, levelK_1)) { candidates.add(new Itemset(newItemset)); } } } return candidates; } 63 protected boolean allSubsetsOfSizeK_1AreFrequent(int[] candidate, List levelK_1) { candidate, one by one for(int posRemoved=0; posRemoved< candidate.length; posRemoved++){ int last = levelK_1.size() - 1; boolean found = false; while( first >1 ; int comparison = ArraysAlgos.sameAs(levelK_1.get(middle).getItems(), candidate, posRemoved); if(comparison < ){ first = middle + 1; } else if(comparison > ){ last = middle - 1; } else{ found = true; break; } } if(found == false){ return false; } } return true; } void saveItemset(Itemset itemset) throws IOException { itemsetCount++; if(writer != null){ writer.write(itemset.toString() + " #SUP: " + itemset.getAbsoluteSupport()); writer.newLine(); } else{ patterns.addItemset(itemset, itemset.size()); } } void saveItemsetToFile(Integer item, Integer support) throws IOException { itemsetCount++; if(writer != null){ writer.write(item + " #SUP: " + support); writer.newLine(); } else{ Itemset itemset = new Itemset(item); itemset.setAbsoluteSupport(support); patterns.addItemset(itemset, 1); 64 } } public void printStats() { System.out.println("============= APRIORI - STATS ============="); System.out.println(" Candidates count : " + totalCandidateCount); System.out.println(" The algorithm stopped at size " + (k 1) + ", because there is no candidate"); System.out.println(" Frequent itemsets count : " + itemsetCount); System.out.println(" Maximum memory usage : " + MemoryLogger.getInstance().getMaxMemory() + " mb"); System.out.println(" Total time ~ " + (endTimestamp startTimestamp) + " ms"); System.out.println("=============================================== ===="); } } AssocRules.java (Thuật toán sinh luật kết hợp) import import import import java.util.ArrayList; java.util.Collections; java.util.Comparator; java.util.List; public class AssocRules { public final List rules = new ArrayList(); //rules private final String name; public void sortByConfidence(){ Collections.sort(rules, new Comparator() { public int compare(AssocRule r1, AssocRule r2) { return (int)((r2.getConfidence() r1.getConfidence() ) * Integer.MAX_VALUE); } }); } public AssocRules(String name){ this.name = name; } public void printRules(int databaseSize){ System.out.println(" - " + name + " -"); int i=0; for(AssocRule rule : rules){ System.out.print(" rule " + i + ": " + rule.toString()); System.out.print("support : " + rule.getRelativeSupport(databaseSize) + 65 " (" + rule.getAbsoluteSupport() + "/" + databaseSize + ") "); System.out.print("confidence : " + rule.getConfidence()); System.out.println(""); i++; } System.out.println(" "); } public void printRulesWithLift(int databaseSize){ System.out.println(" - " + name + " -"); int i=0; for(AssocRule rule : rules){ System.out.print(" rule " + i + ": " + rule.toString()); System.out.print("support : " + rule.getRelativeSupport(databaseSize) + " (" + rule.getAbsoluteSupport() + "/" + databaseSize + ") "); System.out.print("confidence : " + rule.getConfidence()); System.out.print(" lift : " + rule.getLift()); System.out.println(""); i++; } System.out.println(" "); } public String toString(int databaseSize){ StringBuilder buffer = new StringBuilder(" - "); buffer.append(name); buffer.append(" -\n"); int i=0; for(AssocRule rule : rules){ buffer.append(" rule "); buffer.append(i); buffer.append(": "); buffer.append(rule.toString()); buffer.append("support : "); buffer.append(rule.getRelativeSupport(databaseSize)); buffer.append(" ("); buffer.append(rule.getAbsoluteSupport()); buffer.append("/"); buffer.append(databaseSize); buffer.append(") "); buffer.append("confidence : " ); buffer.append(rule.getConfidence()); buffer.append("\n"); i++; } return buffer.toString(); // return the string } public void addRule(AssocRule rule){ rules.add(rule); } 66 public int getRulesCount(){ return rules.size(); } public List getRules() { return rules; } } Suy PTH xấp xỉ từ kết khai phá LKH (ngôn ngữ Pascal) uses crt; type bg=record x: string[15]; dem: string[6]; end; var f,g:text; a: array[1 1000] of bg; k,i,n: longint; xau: string; sx,sy, sxy, cxy:string; g1, g4, s, c, cf, bsx, bsy, mincf: double; procedure taomang; begin assign(f,'c:\pth\apriori_out.txt'); reset(f); k:=0; while not eof(f) begin k:=k+1; readln(f, xau); while xau[1]=#32 delete(xau,1,1); a[k].x:=copy(xau,1,pos('(',xau)-1); while xau[length(a[k].x)]=#32 delete(a[k].x, length(a[k].x),1); a[k].dem:=copy(xau,pos('(',xau)+1,pos(')',xau)pos('(',xau)-1); end; close(f); end; { -} function sodem(v:string): string; var j:longint; begin for j:=1 to k if a[j].x=v then begin break; writeln(j); readln; end; sodem:=a[j].dem; end; { -} function chenthem(ss:string; dai:byte):string; var sstam:string; 67 begin sstam:=ss; while length(sstam)bsy then cf:=(c-bsy)/(1-bsy) else cf:=(c-bsy)/bsy; g1:=bsx-s; g4:=1-c; if cf>=mincf then writeln(g,'| '+chenthem(sx+' -> '+sy,18),' | ',s:4:2,' | ',c:4:2,' | ',cf:4:2,' | ',g1:4:2,' | ',g4:4:2,' |'); end; close(f); close(g); end http://www2.cs.uregina.ca/~dbd/cs831/notes/itemsets/itemset_apriori.html ... mở đầu, , kết chương Chương 1: Giới thiệu phụ thuộc hàm, phụ thuộc hàm xấp xỉ luật kết hợp Chương 2: Chương 3: Chương TỔNG QUAN VỀ PHỤ THUỘC HÀM, PHỤ THUỘC HÀM XẤP XỈ VÀ LUẬT KẾT HỢP Chương... nó, khái niệm luật kết hợp, tính chất thuật tốn điển hình khai phá luật kết hợp 2 Luận văn sâu vào khai phá phụ thuộc hàm xấp xỉ sử dụng luật kết hợp vấn đề liên quan thuộc lĩnh vực phát tri thức... chọn đề tài: ? ?Khai phá phụ thuộc hàm xấp xỉ sử dụng luật kết hợp ứng dụng? ?? làm đề tài luận văn tốt nghiệp Đối tượng phạm vi nghiên cứu Tìm hiểu phụ thuộc hàm, phụ thuộc hàm xấp xỉ tính chất,

Ngày đăng: 24/02/2021, 21:41

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN