i BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC VINH NGUYỄN THỊ PHƯƠNG THANH LUẬN VĂN THẠC SỸ Chuyên ngành: Công nghệ thông tin Mã ngành: 60480201 NGHIÊN CỨU PHỤ THUỘC HÀM XẤP XỈ THEO CÁCH NHÌN CỦA LUẬT KẾT HỢP Người hướng dẫn: TS Phan Anh Phong Vinh, 6/ 2017 ii LỜI CẢM ƠN Để hoàn thành luận văn này, trước tiên tơi xin gửi lịng biết ơn sâu sắc đến thầy giáo, TS Phan Anh Phong, người trực tiếp hướng dẫn cho tôi, cung cấp tài liệu khoa học tạo điều kiện tốt cho tơi suốt q trình thực luận văn tốt nghiệp Tôi xin chân thành cảm ơn tập thể thầy cô tham gia giảng dạy suốt q trình học tập Khoa Cơng Nghệ Thơng Tin- Trường Đại Học Vinh Những kiến thức lĩnh hội thời gian học tập giảng đường không tảng cho trình nghiên cứu luận văn mà hành trang quý báu sống cơng việc tơi Trong q trình thực luận văn,tôi cố gắng khả năng, kinh nghiệm nghiên cứu thời gian có hạn nên luận văn tránh khỏi thiếu sót Vì tơi mong nhận ý kiến đóng góp thầy, để luận văn tơi hồn thiện Tơi xin chân thành cảm ơn! Người thực Nguyễn Thị Phương Thanh iii LỜI CAM ĐOAN Tôi xin cam đoan kết nghiên cứu có luận văn q trình tìm hiểu, nghiên cứu tơi hướng dẫn thầy giáo – TS Phan Anh Phong Nội dung luận văn có tham khảo, sử dụng thông tin, tài liệu từ nguồn liệt kê danh mục tài liệu tham khảo Các kết nghiên cứu đề tài trung thực chưa cơng bố đâu Học viên Nguyễn Thị Phương Thanh iv MỤC LỤC LỜI CẢM ƠN i LỜI CAM ĐOAN iii MỤC LỤC iv DANH MỤC CÁC TỪ VIẾT TẮT…………………………………… ….v DANH MỤC CÁC BẢNG vii DANH MỤC CÁC HÌNH viii MỞ ĐẦU 1 SỰ CẦN THIẾT CỦA VẤN ĐỀ NGHIÊN CỨU MỤC TIÊU NGHIÊN CỨU ĐỐI TƯỢNG VÀ PHẠM VI NGHIÊN CỨU NỘI DUNG NGHIÊN CỨU KẾT CẤU LUẬN VĂN CHƯƠNG 1:TỔNG QUAN VỀ CƠ SỞ DỮ LIỆU QUAN HỆ VÀ KHAI PHÁ TRI THỨC 1.1 TỔNG QUAN VỀ CƠ SỞ DỮ LIỆU 1.2 KHAI PHÁ TRI THỨC TỪ DỮ LIỆU 1.3 PHỤ THUỘC HÀM 1.4 KẾT LUẬN CHƯƠNG 12 CHƯƠNG 2:LUẬT KẾT HỢP VÀPHỤ THUỘC HÀM XẤP XỈ 13 2.1 LUẬT KẾT HỢP 13 2.2 PHỤ THUỘC HÀM XẤP XỈ 15 2.3.PHỤ THUỘC HÀM XẤP XỈ VÀ LUẬT KẾT HỢP 21 2.4 KẾT LUẬN CHƯƠNG 26 CHƯƠNG 3: KHAI PHÁ PHỤ THUỘC HÀM XẤP XỈ 27 3.1 BÀI TOÁN KHAI PHÁ PHỤ THUỘC HÀM XẤP XỈ 27 v 3.2 NHỮNG THÁCH THỨC KHI KHAI PHÁ PHỤ THUỘC HÀM XẤP XỈ 27 3.3.THUẬT TOÁN KHAI PHÁ PHỤ THUỘC HÀM XẤP XỈ 29 3.4 KẾT LUẬN CHƯƠNG 35 CHƯƠNG 4: THỬ NGHIỆM VÀ BÀN LUẬN 36 4.1 BỘ DỮ LIỆU 36 4.2 GIAO DIỆN CHƯƠNG TRÌNH 38 4.3 KẾT QUẢ THỬ NGHIỆM 39 4.4 KẾT LUẬN CHƯƠNG 42 KẾT LUẬN 43 TÀI LIỆU THAM KHẢO 44 PHỤ LỤC: MỘT SỐ ĐOẠN MÃ CHÍNH CỦA CHƯƠNG TRÌNH 46 vi DANH MỤC CÁC TỪ VIẾT TẮT STT Thuật ngữ Giải thích CSDL Cơ sở liệu LKH Luật kết hợp AFDMiner Khai phá phụ thuộc hàm xấp xỉ TANE Thuật toán khai phá phụ thuộc hàm vii DANH MỤC CÁC BẢNG Tên bảng STT Trang Bảng 1.1: Bảng sở liệu quan hệ 10 Bảng 2.1: Các giao dịch mua hàng 14 Bảng 2.2: Bảng giao dịch minh họa cho độ hỗ trợ 15 Bảng 2.3: Bảng sở liệu quan hệ 16 Bảng 2.4 Một thể quan hệ R (ID, A, B, C, D) 19 Bảng 2.5: Ví dụ đơn giản Car Databasee 22 Bảng 4.1: Dữ liệu trích chọn để khai phá phụ thuộc hàm xấp xỉ 36 Bảng 4.2: Tập phụ thuộc hàm 41 Bảng 4.3: Các phụ thuộc hàm xấp xỉ với độ tin cậy 41 viii DANH MỤC CÁC HÌNH STT Nội dung Trang Hình 1.1: Quy trình phát tri thức Hình 3.1: Cây khai phá tất phụ thuộc hàm xấp xỉ 28 Hình 4.1: Giao diện chương trình 39 Hình 4.2: Giao diện kết khai phá phụ thuộc hàm xấp xỉ 40 MỞ ĐẦU SỰ CẦN THIẾT CỦA VẤN ĐỀ NGHIÊN CỨU Khái niệm phụ thuộc hàm đưa Codd đóng vai trị quan trọng lý thuyết sở liệu quan hệ Các phụ thuộc hàm hữu ích việc phân tích thiết kế sở liệu quan hệ xác định khóa, xác định dạng chuẩn, vấn đề quán liệu… Tuy nhiên, 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 Sự phụ thuộc tuyệt đối dường nghiêm ngặt ta hình dung tới 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 mở rộng khái niệm phụ thuộc hàm thành phụ thuộc hàm xấp xỉ, phụ thuộc cho phép có số lượng lỗi định liệu phụ thuộc hàm Các phụ thuộc hàm xấp xỉ giúp thấy mối quan hệ tiềm ẩn thuộc tính mà cịn giúp ta thuận tiện việc phân tích liệu đánh giá thơng tin Phát phụ thuộc hàm xấp xỉ sở liệu vấn đề nghiên cứu hấp dẫn mục tiêu phát tri thức Tiếp cận phụ thuộc hàm xấp xỉ thông qua luật kết hợp khai phá liệu hướng thú vị, hứa hẹn nhiều kết lý thuyết ứng dụng hiệu thực tiễn Vì tơi chọn đề tài: “Nghiên cứu phụ thuộc hàm xấp xỉ theo cách nhìn luật kết hợp” làm đề tài luận văn tốt nghiệp MỤC TIÊU NGHIÊN CỨU Nghiên cứu tổng quan sở liệu, phụ thuộc hàm; Nghiên cứu khai phá tri thức từ liệu, tập trung khái niệm luật kết hợp độ đo liên quan; Nghiên cứu phụ thuộc hàm xấp xỉ, độ đo ý nghĩa chúng; Nghiên cứu thuật toán khai phá phụ thuộc hàm TANE, khai phá phụ thuộc hàm xấp xỉ AFDMiner; Thử nghiệm thuật toán AFDMiner ĐỐI TƯỢNG VÀ PHẠM VI NGHIÊN CỨU - Đối tượng Nghiên cứu tài liệu khai phá phụ thuộc hàm, phụ thuộc hàm xấp xỉ phủ tối thiểu, phân lớp tương đương luật kết hợp, thuật toán TANE, AFDMiner; Khảo sát kết đạt thực tế ứng dụng để đánh giá mức độ xử lý thuật toán; Các tài liệu lập trình liên quan - Phạm vi Tập trung giải toán khai phá phụ thuộc hàm, phụ thuộc hàm xấp xỉ phủ tối thiểu, phân lớp tương đương luật kết hợp; Thử nghiệm thuật toán vào ứng dụng cụ thể thực tế NỘI DUNG NGHIÊN CỨU - Phụ thuộc hàm, thuật toán khai phá phụ thuộc hàm TANE - Phụ thuộc hàm xấp xỉ, thuật toán khai phá phụ thuộc hàm xấp xỉ AFDMiner - Luật kết hợp - Phụ thuộc hàm xấp xỉ theo cách nhìn luật kết hợp khái niệm lẫn phương pháp khai phá 5.KẾT CẤU LUẬN VĂN Luận văn giới thiệu chương sau: 39 Hình 4.1 Giao diện chương trình 4.3 KẾT QUẢ THỬ NGHIỆM Nhấn nút “open” để chọn file liệu, chọn tệp data.txt Tiếp đến nhập minconf (độ tin cậy tối thiểu) maxspecificity (độ đặc trưng tối đa) từ bàn phím, nhấn nút “xử lý” để chạy chương trình Với minconf= maxspecificity=1 liệu khai phá bảng 4.1.AFDMiner tìm có 13 phụ thuộc hàm 28 phụ thuộc hàm xấp xỉ 40 Hình 4.2 Giao diện kết khai phá phụ thuộc hàm xấp xỉ Hình 4.2 cho kết khai phá phụ thuộc hàm phụ thuộc hàm xấp xỉ với độ tin cậy Khi có 13 phụ thuộc hàm (bảng 3.2) 28 phụ thuộc hàm xấp xỉ (bảng 3.2) sau đây: 41 Bảng 4.2 Tậpphụ thuộc hàm khai phá từ CSDL TT Phụ thuộc hàm E→A A→E BC → A AC → B BD → A AD → B AD → C BD → C CE → B 10 BC → E 11 DE → B 12 BD → E 13 DE → C Ghi Bảng 4.3.Các phụ thuộc hàm xấp xỉ với độ tin cậy khai phá từ CSDL TT Phụ thuộc hàm xấp xỉ Độ tin cậy B⤳A 0.75 A⤳B 0.625 C⤳A 0.50 A⤳C 0.50 D⤳A 0.75 A⤳D 0.375 C⤳B 0.50 B⤳C 0.625 Ghi 42 D⤳B 0.75 10 B⤳D 0.50 11 E⤳B 0.625 12 B⤳E 0.75 13 D⤳C 0.875 14 C⤳D 0.50 15 E⤳C 0.50 16 C⤳E 0.50 17 E⤳D 0.375 18 D⤳E 0.75 19 AB ⤳ C 0.875 20 AB ⤳ D 0.75 21 CD ⤳ A 0.875 22 AC ⤳ D 0.875 23 CD ⤳ B 0.875 24 BC ⤳ D 0.875 25 BE ⤳ C 0.875 26 BE ⤳ D 0.75 27 CE ⤳ D 0.875 28 CD ⤳ E 0.875 4.4 KẾT LUẬN CHƯƠNG Chương lập trình thử nghiệm thành cơng, kiểm chứng sở lý thuyết trình bày luận văn, xây dựng chương trình thực nghiệm khai phá phụ thuộc hàm xấp xỉ theo AFDMiner 43 KẾT LUẬN Sau thời gian tìm hiểu nghiên cứu với đề tài “Nghiên cứu phụ thuộc hàm xấp xỉ theo cách nhìn luật kết hợp”, luận văn đạt kết sau: - Trình bày vấn đề CSDL, phụ thuộc hàm, luật kết hợp như: Khái niệm, phụ thuộc hàm, khái niệm LKH, độ hỗ trợ, độ tin cậy LKH, tính chất mối quan hệ giữ phụ thuộc hàm xấp xỉ LKH; - Nghiên cứu vấn đề phụ thuộc hàm xấp xỉ, tập trung vào độ đo lỗi g1, g2, g3; - Trình bày cách nhìn khác phụ thuộc hàm xấp xỉ thông qua luật kết hợp độ tin cậy, độ đo đặc trưng phụ thuộc hàm xấp xỉ Phân tích mối liên hệ độ đo tin cậy độ đo đặc trưng phụ thuộc hàm xấp xỉ với độ đo luật kết hợp với độ đo g 1, g2, g3; - Nghiên cứu thuật toán khai phá phụ thuộc hàm xấp xỉ điển hình AFDMiner; - Để làm rõ kết trình tìm hiểu, nghiên cứu, tơi lập trình thử nghiệm thành cơng, kiểm chứng sở lý thuyết trình bày luận văn, xây dựng chương trình thực nghiệm khai phá phụ thuộc hàm xấp xỉ theo AFDMiner 44 TÀI LIỆU THAM KHẢO Tiếng Anh [1] Aravind Krishna Kalavagattu,Mining approximate functional dependencies as condensed representations of association rules, 2008 [2] Atoum J.( 2009), Mining approximate FDs from databases based on minimal cover and equivalent classes, European Journal of Scientific Research [3] Garrett Wolf, Hemal Khatri, Bhaumik Chokshi, Jianchun Fan, Yi Chen, and Subbarao Kambhampati Query processing over incomplete autonomous databases In VLDB ’07: Proceedings of the 33rd international conference on Very large data bases, pages 651–662 VLDB Endowment, [4] Garrett Wolf, Hemal Khatri, Yi Chen, and Subbarao Kambhampati Quic: A system for handling imprecision & incompleteness in autonomous databases (demo) In CIDR, pages 263–268, 2007 [5] Giannella C., Robertson E (2000), On an Information Theoretic Approximation Measure for Functional Dependencies Computer Science Department, Indiana University, Bloomington [6] Hong Yao, Howard J.Hamilton, and Cory Butz, FD_Mine: Discovering Functional Dependencies in a Database Using Equivalences, Department of Computer Science, University of Regina Regina, SK, Canada, S4S 0A2 [7] Jalal Atoum, Dojanah Bade, Arafat Awajan, Mining Functional Dependency from Relational Databases Using Equivalent Classes and Minimal Cover, Journal of Computer Science (6):, 421-426, 2008 ISSN 1549-3636 © 2008 Science Publications [8] Jalal Omer Atoum, Approximate Functional Dependencies Mining Using Association Rules Specificity Interestingness Measure, British Journal of 45 Mathtemiatics & Computer Science 15(5): 1-10, 2016, Article no.BJMCS.25206 ISSN: 2231-0851 [9] Yka Huhtala, Juha Karkkainen, Pasi Porkka and Hannu Toivonen, TANE: An Efficient Algorithm for Discovering Functional and Approximate Dependencies Received September 17, 1998; revised March 31, 1999 Tiếng Việt [10] 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 [11] Vũ Đức Thi (1997), Cơ sở liệu - Kiến thức thực hành, Nhà xuất Thống kê [12] 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 46 PHỤ LỤC: MỘT SỐ ĐOẠN MÃ CHÍNH CỦA CHƯƠNG TRÌNH Algorithm - AFDMiner public void InitializeStep() { string[] split = line[0].Split(','); listofcolumns = split.OfType().ToList(); totaltuples = line.Length - 1; int countAttrib = line[0].Split(',').Length; List dataTemp = new List(); for (int k = 0; k < countAttrib; k++) { for (int j = 1; j < line.Length; j++) { string[] split1 = line[j].Split(','); List splited = split1.OfType().ToList(); dataTemp.Add(splited[k]); } data2D.Add(listofcolumns.ToList()[k], dataTemp.ToList()); dataTemp.Clear(); } for (int i = 0; i < totaltuples; i++) { tableT.Add("NULL"); } 47 dictCplus.Add("NULL", listofcolumns); computeSingletonPartitions(listofcolumns); L1 = listofcolumns.ToList(); L.Add(L0); L.Add(L1); } Algorithm – Computing dependencies private void compute_dependencies(List level, List listofcolumnsCopy) { List thesets = new List(); List temp = new List(); #region Tính C+(X) foreach (var x in level) { thesets.Clear(); foreach (var a in x) { if (dictCplus.ContainsKey(x.Replace(a.ToString(), ""))) { temp = dictCplus[x.Replace(a.ToString(), "")]; } else 48 { temp = computeCplus(x.Replace(a.ToString(), "")); dictCplus[x.Replace(a.ToString(), "")] = temp; } thesets.Insert(0, temp.Distinct().ToList()); } if (thesets.Cast().Aggregate((t, y) => t.Intersect(y)).ToList().Count == 0) { dictCplus[x] = new List() { }; } else { dictCplus[x] = thesets.Cast().Aggregate((t, y) => t.Intersect(y)).ToList(); } } #endregion foreach (var x in level) { foreach (var a in x) { if (dictCplus[x].Contains(a.ToString())) { if (confidence(x.Replace(a.ToString(), ""), a.ToString()) >= minConf) { if (validfd(x.Replace(a.ToString(), ""), a.ToString())) { 49 finallistofFDs.Add(new List() { x.Replace(a.ToString(), ""), a.ToString() }); dictCplus[x].Remove(a.ToString()); listofcolumnsCopy = listofcolumns.ToList(); foreach (var j in x) { if (listofcolumnsCopy.Contains(j.ToString())) { listofcolumnsCopy.Remove(j.ToString()); } } foreach (var b in listofcolumnsCopy) { if (dictCplus[x].Contains(b.ToString())) { dictCplus[x].Remove(b.ToString()); } } } else { finallistofAFDs.Add(new List() { x.Replace(a.ToString(), ""), a.ToString(), Math.Round(confidence(x.Replace(a.ToString(), ""), a.ToString()), 3).ToString() }); } } } 50 } } } Algorithm –Pruning private void prune(List level) { foreach (var x in level.ToList()) { if (dictCplus[x].Count == 0) { level.Remove(x); } if (CalculateSpecificity(x) >= maxSpecificity) { level.Remove(x); } } } Algorithm - Generate_next_level private List generate_next_level(List level) { bool flag = false; string x; 51 List nextlevel = new List(); for (int i = 0; i < level.Count; i++) { for (int j = i + 1; j < level.Count; j++) { if ((!(level[i] == level[j])) && (level[i].Substring(0, level[i].Length - 1) == level[j].Substring(0, level[j].Length - 1))) { x = level[i] + level[j].Substring(level[j].Length - 1, 1); flag = true; foreach (var a in x) { if (!level.Contains(x.Replace(a.ToString(), ""))) { flag = false; } } if (flag) { nextlevel.Add(x); stripped_product(x, level[i], level[j]); } } } return nextlevel; } } 52 Algorithm – CalculateSpecificity private double CalculateSpecificity(string x) { double sumInfoX = 0; for (int i = 0; i < dictpartitions[x].Count; i++) { sumInfoX += ((dictpartitions[x][i].Count / (double)totaltuples) * Math.Log((dictpartitions[x][i].Count / (double)totaltuples), 2)); } int N = dictpartitions[x].Count; double InfoSuppX = sumInfoX / (Math.Log(N, 2)); return InfoSuppX; } Algorithm - Calculateconfidence private double confidence(string x, string a) { if (x == "" || a == "") { return -1; } int m = 0; 53 Dictionary T = new Dictionary(); double e = 0; char[] temXA = (x + a).Distinct().ToArray(); Array.Sort(temXA); string cache_XA = new string(temXA); foreach (var c in dictpartitions[cache_XA]) { T.Add(c[0], 0); T[c[0]] = c.Count; } char[] temX = x.Distinct().ToArray(); Array.Sort(temX); string cache_X = new string(temX); foreach (var c in dictpartitions[cache_X]) { m = 1; foreach (var t in c) { if (T.ContainsKey(t)) { m = max(m, T[t]); } } e += c.Count - m; } return (1 - (e / (double)(totaltuples))); } ... thuật toán khai phá phụ thuộc hàm TANE - Phụ thuộc hàm xấp xỉ, thuật toán khai phá phụ thuộc hàm xấp xỉ AFDMiner - Luật kết hợp - Phụ thuộc hàm xấp xỉ theo cách nhìn luật kết hợp khái niệm lẫn... liệu [3] 2.3.PHỤ THUỘC HÀM XẤP XỈ VÀ LUẬT KẾT HỢP Trong phần này, xem xét phụ thuộc hàm xấp xỉ theo cách nhìn luật kết hợp, sau nghiên cứu độ tin độ đo đặc tả phụ thuộc hàm xấp xỉ Sử dụng ký... phụ thuộc hàm 28 phụ thuộc hàm xấp xỉ 40 Hình 4.2 Giao diện kết khai phá phụ thuộc hàm xấp xỉ Hình 4.2 cho kết khai phá phụ thuộc hàm phụ thuộc hàm xấp xỉ với độ tin cậy Khi có 13 phụ thuộc hàm