Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 80 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
80
Dung lượng
2,14 MB
Nội dung
i LỜI CẢM ƠN Trước hết em xin gửi lời cảm ơn đến TS Nguyễn Huy Đức, người thầy hướng dẫn em nhiều suốt trình tìm hiểu, nghiên cứu hoàn thành luận văn tốt nghiệp từ lý thuyết đến ứng dụng Sự hướng dẫn thầy giúp em có thêm hiểu biết khai phá liệu ứng dụng Đồng thời em xin chân thành cảm ơn thầy cô trường thầy cô Viện Khoa học công nghệ Việt Nam tận tình giảng dạy, trang bị cho em kiến thức cần thiết để em hoàn thành tốt luận văn Em xin gửi lời cảm ơn đến gia đình, bạn bè tạo điều kiện thuận lợi để em xây dựng thành công luận văn Thái Nguyên, tháng 06 năm 2013 Học viên Lê Thị Tuyết Nhung ii LỜI CAM ĐOAN Tôi xin cam đoan đề tài “Khai phá tập mục thường xuyên đóng sở liệu ứng dụng ” công trình nghiên cứu thân Các số liệu kết nghiên cứu nêu luận văn trung thực, tác giả cho phép sử dụng tài liệu tham khảo trình bày luận văn Tôi xin chịu trách nhiệm luận văn iii MỤC LỤC Lời cảm ơn i Lời cam đoan MỤC LỤC DANH MỤC CÁC KÝ HIỆU VÀ CÁC CHỮ VIẾT TẮT DANH MỤC CÁC BẢNG DANH MỤC HÌNH VẼ MỞ ĐẦU Chương 1: Tổng quan khai phá liệu khai phá tập mục thường ii iii v vi vii xuyên 1.1 Khái niệm khai phá tri thức khai phá liệu 1.2 Kiến trúc hệ thống khai phá liệu 1.3 Quá trình khai phá liệu 1.4 Một số kỹ thuật khai phá liệu 1.4.1 Phân lớp dự đoán (Classification & Prediction) 1.4.2 Luật kết hợp (Association Rules) 11 1.4.3 Khai thác mẫu (Sequential/ Temporal patterns) 11 1.4.4 Phân nhóm - đoạn (Clustering/ Segmentation) 11 1.4.5 Hồi quy (Regression) 12 1.4.6 Tổng hợp hóa (Summarization) 12 1.4.7 Mô hình hóa phụ thuộc (dependency modeling) 12 1.4.8 Phát biến đổi độ lệch (Change and deviation detection) 13 1.5 Các sở liệu phục vụ cho khai phá liệu 13 1.6 Một số ứng dụng khai phá liệu 14 1.7 Khai phá luật kết hợp 14 1.7.1 Bài toán phát luật kết hợp 14 1.7.2 Các khái niệm 15 1.7.3 Các cách tiếp cận khai phá tập mục thường xuyên 18 1.7.4 Một số thuật toán điển hình tìm tập mục thường xuyên 19 1.7.4.1 Thuật toán Apriori (Phương pháp sinh ứng viên) 19 1.7.4.2 Thuật toán FP-Growth 23 iv 1.8 Kết luận chương Chương 2: Khai phá tập mục thường xuyên đóng sở liệu 31 32 2.1 Cơ sở toán học tập mục thường xuyên đóng 32 2.1.1 Ánh xạ đóng 32 2.1.2 Tập đóng 32 2.1.3 Kết nối Galois 32 2.1.4 Bao đóng tập mục liệu 33 2.2 Khái niệm, tính chất tập mục thường xuyên đóng 34 2.3 Một số thuật toán điển hình khai phá tập mục thường xuyên đóng 35 2.3.1 Thuật toán CHARM (Phương pháp dựa IT-Tree) 35 2.3.1.1 Giới thiệu thuật toán CHARM 35 2.3.1.2 Cây tìm kiếm lớp tương đương 35 2.3.1.3 Các tính chất cặp tập mục – tập định danh 36 2.3.1.4 Thiết kế thuật toán 37 2.3.2 Thuật toán Closet + 41 2.4 Kết luận chương Chương 3: Chương trình thực nghiệm ứng dụng lĩnh vực y tế 45 46 3.1 Bài toán phát luật kết hợp liệu y tế 46 3.2 Xây dựng chương trình 50 3.3 Kết thực nghiệm 57 3.4 Nhận xét 58 KẾT LUẬN 59 TÀI LIỆU THAM KHẢO 60 PHỤ LỤC 62 v DANH MỤC CÁC KÝ HIỆU VÀ CÁC CHỮ VIẾT TẮT Ký hiệu Diễn giải Ck Tập k tập mục ứng viên BFS Breadth First Search CSDL Cơ sở liệu CHARM Closed Asociation RuleMning DB Cơ sở liệu giao tác DFS Depth First Search FP -growth Frequent -Pattern Growth FP -tree Frequent pattern tree IT-tree Itemset-Tidset tree I Tập mục liệu k-itemset Tập mục gồm k mục KPDL Khai phá liệu Minsup Ngưỡng hỗ trợ tối thiểu Lk Tập k-tập mục thường xuyên Supp Độ hỗ trợ (support) TID Định danh giao tác T Giao tác (transaction) DL Dữ liệu TX Thường xuyên TTHN Tình trạng hôn nhân vi DANH MỤC CÁC BẢNG Bảng 1.1 Cơ sở liệu giao tác minh họa thực thuật toán Apriori Bảng 1.2: CSDL giao tác minh họa cho thuật toán FP-Growth Bảng 2.1: a) CSDL giao tác biểu diễn ngang b) CSDL giao tác biểu diễn dọc Bảng 3.1 : Dữ liệu bệnh hen suyễn Bảng 3.2: Lựa chọn thuộc tính Bảng 3.3: Thuộc tính “Tuổi” sau phân hoạch Bảng 3.4: Dữ liệu tìm kiếm sau thực phân loại liệu Bảng 3.5: Chuyển đổi liệu Bảng 3.6: Dữ liệu cho khai phá vii DANH MỤC HÌNH VẼ Hình 1.1: Kiến trúc hệ thống khai phá liệu Hình 1.2: Quá trình khám phá tri thức Hình 1.3: Quá trình khai phá liệu Hình 1.4: Cây FP-tree xây dựng dần thêm giao tác t1 ÷ t6 Hình 1.5: Cây FP-tree CSDL DB bảng 1.5 Hình 2.1: Kết nối Galois Hình 2.2: Cây IT-tree dùng Tidset với minSup =3 Hình 2.3: Cây IT-tree tìm tập mục thường xuyên đóng thỏa mãn ngưỡng minsup = 50% Hình 2.4: Áp dụng tính chất tập thường xuyên đóng Hình 2.5: Minh họa xây dựng kết Hình 3.1: Mô hình khai phá cho liệu y tế Hình 3.2: Giao diện chứa liệu gốc Hình 3.3: Hiển thị liệu chuyển đổi Hình 3.4: Giao diện thêm ghi MỞ ĐẦU Khai phá liệu (Data Mining), nhiều người ý Nó thực đem lại lợi ích đáng kể việc cung cấp thông tin tiềm ẩn sở liệu lớn, giúp người sử dụng thu tri thức hữu ích từ sở liệu kho liệu khổng lồ khác Những “tri thức” chiết xuất từ nguồn sở liệu phục vụ yêu cầu trợ giúp định ngày có ý nghĩa quan trọng nhu cầu to lớn lĩnh vực hoạt động kinh doanh, quản lý Tiến hành công việc thực trình phát triển tri thức sở liệu (Knowledge Discovery in Database) mà kỹ thuật khai phá liệu (Data Mining) cho phép phát tri thức tiềm ẩn Một nội dung khai phá liệu khai phá luật kết hợp Khai phá luật kết hợp gồm hai bước: Bước thứ nhất, tìm tất tập mục thường xuyên, đòi hỏi tính toán lớn Bước thứ hai, dựa vào tập mục thường xuyên tìm luật kết hợp, đòi hỏi tính toán hơn, song gặp phải vấn đề sinh nhiều luật, vượt khỏi kiểm soát người khai phá người dùng, có nhiều luật không cần thiết Để giải vấn đề đó, bước thứ nhất, không cần thiết khai phá tất tập mục thường xuyên mà cần khai phá tập mục thường xuyên đóng Khai phá luật kết hợp dựa tập mục thường xuyên đóng cho hiệu cao hơn, đảm bảo không tìm tập mục thường xuyên không cần thiết, không sinh luật dư thừa Với ý nghĩa mục đích tìm hiểu toán tìm tập mục thường xuyên sở liệu lớn, em định lựa chọn đề tài “Khai phá tập mục thường xuyên đóng sở liệu ứng dụng” Nội dung luận văn gồm chương: Chương 1: Tổng quan khai phá liệu khai phá tập mục thường xuyên Chương 2: Khai phá tập mục thường xuyên đóng sở liệu Chương 3: Chương trình thực nghiệm ứng dụng lĩnh vực y tế CHƯƠNG 1: TỔNG QUAN VỀ KHAI PHÁ DỮ LIỆU VÀ KHAI PHÁ TẬP MỤC THƯỜNG XUYÊN 1.1 Khái niệm khai phá tri thức khai phá liệu "Khám phá tri thức trình tìm tri thức, mẫu tìm ẩn, trước chưa biết thông tin hữu ích đáng tin cậy" Còn khai phá liệu (KPDL) bước quan trọng trình khám phá tri thức, sử dụng thuật toán KPDL chuyên dùng với số qui định hiệu tính toán chấp nhận để chiết xuất mẫu mô hình có ích liệu Nói cách khác, mục đích khám phá tri thức KPDL tìm mẫu mô hình tồn sở liệu (CSDL) bị che khuất hàng núi liệu Khám phá tri thức từ CSDL trình sử dụng phương pháp công cụ tin học, người trung tâm trình Do đó, người cần phải có kiến thức lĩnh vực cần khám phá để chọn tập liệu tốt, từ phát mẫu phù hợp với mục tiêu đề Đó tri thức, rút từ CSDL, thường để phục vụ cho việc giải loạt nhiệm vụ định lĩnh vực định Tuy vậy, trình khám phá tri thức mang tính chất hướng nhiệm vụ tri thức tìm áp dụng vào thực tế Để có thông tin quý báu phải tìm mẫu có tập CSDL trước Việc đánh giá mẫu tìm thấy điều thú yếu có tính chất định đến sử dụng hay không sử dụng chúng Đầu chương trình khám phá mẫu có ích gọi tri thức Tri thức khám phá có đặc điểm chính: - Kiến thức cao cấp: Ngày có nhiều câu hỏi mang tính chất định tính cần phải trả lời dựa khối lượng liệu khổng lồ có Quá trình để tìm kiến thức từ phương pháp thống kê cổ điển mà mà được đúc kết từ kinh nghiệm có, thể liệu, kết lĩnh hội - Độ xác: Dù cho mẫu khai phá thật có CSDL hay không việc đo lường trị giá chúng bắt buộc phải có Chúng ta sử dụng mẫu có độ xác cao hiệu công việc đạt lớn, mẫu có độ xác chưa xác định rõ ràng không cao không nên sử dụng chúng - Tính hấp dẫn: Khám phá tri thức coi lý thú vạch xu hướng cách hoàn thiện Đó điều lạ hay quy trình tìm năng, hữu ích ẩn chứa từ liệu trước - Tính hiệu quả: thời gian chạy thuật toán khám phá tri thức CSDL lớn dự tính chấp nhận Dữ liệu tập hợp thông tin xác trình khám phá tri thức xem lọc bỏ dư thừa, rút gọn tới mức tối thiểu để lại đặc trưng cho liệu Tri thức tìm thấy thông tin tích hợp, bao gồm kiện mối quan hệ chúng Các mối quan hệ hiểu ra, phát hiện, học Nếu khám phá tri thức toàn trình chiết xuất tri thức từ CSDL KPDL giai đoạn chủ yếu trình KPDL trình phát mẫu mới, thường bao gồm việc thử tìm mô hình phù hợp với tập liệu tìm kiếm mẫu từ tập liệu theo mô hình Sử dụng kỹ thuật khái niệm lĩnh vực nghiên cứu từ trước như: học máy, nhận dạng, thống kê, hồi quy, xếp loại, phân nhóm, mô hình đồ thị, mạng Bayes,… Hầu hết CSDL chứa nhiều mẫu có ích, nhiên mẫu có giá trị với mục tiêu đặt phải mẫu không tầm thường Để mẫu trở nên không tầm thường, hệ thống phải làm nhiều mò mẫm thống kê kết việc tính toán trực tiếp qua công tác thống kê có người dùng Một hệ thống tìm kiếm cần phải có khả định cần thực tính toán kết có đáng quan tâm để tạo nên tri thức ngữ cảnh hay không KPDL sử dụng để tạo giả thuyết Ví dụ để xác định yếu tố rủi ro cho vay tín dụng, kỹ thuật KPDL phải phát người có thu 59 • ITSearchTree: Lớp sử dụng thiết lập ITNode IT-Tree • TransactionDatabase: Chứa phương thức đọc liệu đầu vào từ tập tin dạng text, chuyển đổi liệu thành dạng dọc (cấu trúc có dạng Itemset x Danh_sach_transaction) 60 • HashTable: Kiểm tra lưu trữ tập mục thường xuyên đóng tìm tránh trường hợp lưu trùng • AlgoCharm: Lớp chương trình, gọi đến lớp để xử lý Lớp chứa toàn cấu trúc thuật toán Hướng dẫn chạy chương trình Dữ liệu đầu vào có dạng bảng sở liệu có cấu trúc bao gồm: bảng - Bảng 1: Lưu trữ liệu bệnh nhân, cột đại diện cho thuộc tính số dòng đại diện cho bệnh nhân - Bảng 2: Chứa liệu dạng số 0, mã hóa từ bảng Tên thuộc tính tách từ phân hoạch thuộc tính bảng Chạy tệp chương trình CharmAlgorithm.exe, giao diện chương trình sau: 61 Hình 3.2: Giao diện chứa liệu gốc Giao diện chia làm phần: Phần - Thực thuật toán: Đây phần chương trình Phần - Chỉnh sửa liệu Phần - Giới thiệu khái quát thuật toán CHARM Để sinh tập mục thường xuyên đóng danh sách luật kết hợp, chọn ngưỡng hỗ trợ minsup, ngưỡng tin cậy minconf sau nhấn nút “THỰC HIỆN” Chúng ta xem bảng liệu đầu vào dạng bảng gốc bảng liệu chuyển đổi mục “TÙY CHỌN HIỂN THỊ BẢNG DỮ LIỆU” 62 Hình 3.3: Hiển thị liệu chuyển đổi Để chỉnh sửa liệu lựa chọn mục “CHỈNH SỬA DỮ LIỆU” Giao diện sau: 63 Hình 3.4: Giao diện thêm ghi Nhấn nút “THỰC HIỆN” để nạp sở liệu vào GridView Để thêm ghi ấn vào nút “THÊM MỚI”, cửa sổ nhập liệu cho phép ta nhập thêm ghi Để chỉnh sửa ghi ta chọn vào dòng GridView ấn nút “SỬA ĐỔI” Để xóa ghi, ta chọn ghi muốn xóa ấn vào nút “XÓA” 3.3 Kết thực nghiệm Thực khai phá sở liệu bệnh hen suyễn Bệnh viện C – Thái Nguyên với minsup = 0.6 minconf = 0.3 cho kết quả: - Danh sách tập mục thường xuyên đóng: {BHS2,Test1}, {S1,TN1,Test1}, {KT1, BMbbh1, Test1}, {T2, TN1, Test1}, {H1, TN1, Test1}, {H1, Test1},… - Danh sách luật kết hợp: TN1, Test1 S1 Test1 S1, TN1 64 BMbbh1, Test1 KT1 Test1 KT1, BMbbh1 TN1, Test1 T2 … Giải thích kết khai phá: Để hiểu ý nghĩa tập mục thường xuyên luật kết hợp tìm được, ta cần tra mã thuộc tính quay lại tên thuộc tính, ý nghĩa thuộc tính Ví dụ: - Tập mục thường xuyên đóng: {S1,TN1,Test1} với minsup = 0.6 có nghĩa là: triệu chứng bệnh Sốt, Tức ngực Test da dương tính xuất 60% trường hợp bệnh - Luật kết hợp: TN1, Test1 S1 với minsup = 0.6 minconf = 0.3 có nghĩa là: triệu chứng bệnh Sốt, Tức ngực, Test da dương tính xuất 60% trường hợp bệnh, 30% bệnh nhân có triệu chứng Tức ngực Test da dương tính có triệu chứng Sốt Các kết khai phá hữu ích cho nhà quản lý bác sĩ tham khảo trình chẩn đoán điều trị bệnh 3.4 Nhận xét Qua kết thực nghiệm thuật toán cho thấy: Khi khai phá tệp liệu với ngưỡng độ hỗ trợ ngưỡng độ tin cậy xác định số lượng tập mục thường xuyên đóng nhỏ nhiều so với số tập mục thường xuyên, từ dẫn đến luật kết hợp sinh dư thừa Khi thay đổi ngưỡng độ hỗ trợ, ngưỡng độ tin cậy số lượng tập mục thường xuyên đóng luật thay đổi (tỉ lệ nghịch) Khai phá tập liệu lớn với ngưỡng độ hỗ trợ nhỏ thuật toán CHARM thể rõ tính hiệu 65 KẾT LUẬN Kết đạt luận văn Luận văn nghiên cứu toán quan trọng khai phá liệu toán tìm tập mục thường xuyên đóng Từ toán giới thiệu có nhiều thuật toán nhiều nhóm nghiên cứu giới đề xuất Vì cần phải lựa chọn nghiên cứu thuật toán hiệu cách sâu sắc để góp phần hệ thống lại kiến thức lĩnh vực khám phá tri thức khai phá liệu Mục tiêu luận văn muốn giúp cho người nghiên cứu tiếp cận nhanh kiến thức cập nhật giới lĩnh vực Luận văn khái quát vấn đề khai phá liệu tập mục thường xuyên đóng, trình bày khái niệm cách tiếp cận để khai phá tập mục thường xuyên đóng Đồng thời trình bày chi tiết hai thuật toán điển hình tìm tập mục thường xuyên đóng: Thuật toán CHARM CLOSET+ Khái niệm ánh xạ đóng, tập đóng bao đóng tập mục liệu trình bày chi tiết để làm sở cho khai phá tập mục thường xuyên đóng Luận văn trình bày rõ cấu trúc tìm kiếm IT-tree, FP-tree cấu trúc liệu sử dụng thuật toán CHARM CLOSET+ bước thực thuật toán Đề tài làm sáng tỏ qua thực nghiệm cài đặt thuật toán CHARM ứng dụng cho khai phá liệu y tế, kết khai phá cho thấy số lượng tập mục thường xuyên đóng nhỏ nhiều so với số tập mục thường xuyên số luật kết hợp sinh dư thừa Hướng nghiên cứu Trên sở nghiên cứu trình bày luận văn, tiếp tục nghiên cứu sâu thuật toán khai phá tập mục thường xuyên, tìm cách cải tiến nhằm nâng cao hiệu thuật toán để áp dụng vào số toán khai phá liệu đặt như: Quy luật thị trường, chứng khoán bất động sản, Dự đoán rủi ro tín dụng, Định hướng kinh doanh,… 66 TÀI LIỆU THAM KHẢO Tiếng Việt [1] Hoàng Kiếm, Lương Hán Cơ (2004), “Các vấn đề liên quan toán tìm tập phổ biến đóng”, Hội Thảo Quôc gia lần thứ VII: Một số vấn đề chọn lọc Công nghệ thông tin truyền thông, Đà Nẵng [2] Hoàng Kiếm, Lương Hán Cơ (2004), “Sử dụng tập phổ biến đóng toán tìm luật kết hợp”, Hội nghị Khoa học Trường Đại học Khoa học tự nhiên TP Hồ Chí Minh lần thứ [3] Hoàng Kiếm, Đỗ Phúc (2001), “Phát triển thuật toán tìm tập phổ biến sở liệu”, Hội thảo Quốc gia lần thứ IV: Một số vấn đề chọn lọc Công nghệ thông tin, Hải Phòng Tiếng Anh [4] R Agrawal, T Imielinski, and A Swami (1993), "Mining association rules between sets of items in large databases", In FroG 1993 ACM-SIGMOD Int Con! Management of Data, pages 207-216, Washington, D.C [5] J Pei, J Han, R Mao (2000), "CLOSET: An Efficient Algorithm for Mining Frequent Closed Itemsets", In DMKD '00 [6] J.Wang, J Han, Pei (2003), "CLOSET+: Searching for the Best Strategies for Mining Frequent Closed Itemsets", In ACM SIGKDD Int'l Conf On Knowledge Discovery and Data Mining [7] M.J Zaki ,C Hsiao (2002), "CHARM: An Efficient Algorithm, for Closed Itemset Mining", In SDM '02 [8] Han J and Kamber M (2002), Data Mining: Concepts and Techniques, University of Illinois, Morgan Kaufmann Publishers, [9] B Goethals, MJ Zaki (2003), "FIMI'03: Workshop on Frequent Itemset Mining Implementations", ICDM'03 67 [10] J Han, J Pei, Y Yin (2000), "Mining frequent patterns without candidate generation", In Proc 2000 ACM-SIGMOD Int Conf Management of Data (SIGMOD' 00), pages 1-12, Dallas [11] S Kotsiantis, D Kanellopoulos (2006), “Association Rules Mining: A Recent Overview”, GESTS International Transactions on Computer Science and Engineering, Vol 32, No 1, pp 71-82 [12] A.Tiwari, R.K Gupta and D.P Agrawal (2010) " A Survey on Frequent Pattern Mining: Current Status and Challenging Issues", Information Technology Journal 9(7), 1278-1293 Asian Network for Scientific Infomation [13] Apte C., Liu B.&Smyth P., (2004), “Business Applications of Data Mining” [14] Abdullah Saad Almalaise Alghamdi, (2011), “Efficient Implementation of FP Growth Algorithm-Data Mining on Medical Data”, IJCSNS International Journal of Computer Science and Network Security, VOL.11 No.12, December 2011 [15] http://www.reaserch.ibm.com/dar/papers/pdf/Business_application_of_dm.pdf 68 PHỤ LỤC using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace CharmAlgorithm { public class Charm { private long startTimestamp; private long endTimestamp; private int minsupRelative; Dictionary mapItemTIDS = new Dictionary(); int tidcount; BufferedWriter writer = null; private int itemsetCount; private Hashtable hash; public void runAlgorithm(String input, String output, double minsup, int hashTableSize) throws IOException { this.hash = new Hashtable(hashTableSize); this.itemsetCount = 0; this.startTimestamp = System.currentTimeMillis(); this.writer = new BufferedWriter(new FileWriter(output)); this.mapItemTIDS = new HashMap(); BufferedReader reader = new BufferedReader(new FileReader(input)); this.tidcount = 0; String line; while ((line = reader.readLine()) != null) { String line; if ((!line.isEmpty()) && (line.charAt(0) != '#') && (line.charAt(0) != '%') && (line.charAt(0) != '@')) { String[] lineSplited = line.split(" "); for (String stringItem : lineSplited) 69 { int item = Integer.parseInt(stringItem); BitSet tids = (BitSet)this.mapItemTIDS.get(Integer.valueOf(item)); if (tids == null) { tids = new BitSet(); this.mapItemTIDS.put(Integer.valueOf(item), tids); } tids.set(this.tidcount); } this.tidcount += 1; } } reader.close(); this.minsupRelative = ((int)Math.ceil(minsup * this.tidcount)); ITSearchTree tree = new ITSearchTree(); ITNode root = new ITNode(new HashSet()); tree.setRoot(root); root.setTidset(null, this.tidcount); for (Map.Entry entry : this.mapItemTIDS.entrySet()) { int entryCardinality = ((BitSet)entry.getValue()).cardinality(); if (entryCardinality >= this.minsupRelative) { Set itemset = new HashSet(); itemset.add((Integer)entry.getKey()); ITNode newNode = new ITNode(itemset); newNode.setTidset((BitSet)entry.getValue(), entryCardinality); newNode.setParent(root); root.getChildNodes().add(newNode); } } sortChildren(root); while (root.getChildNodes().size() > 0) { 70 ITNode child = (ITNode)root.getChildNodes().get(0); extend(child); save(child); delete(child); } saveAllClosedItemsets(); this.endTimestamp = System.currentTimeMillis(); this.writer.close(); } private void saveAllClosedItemsets() throws IOException { for (List hashE : this.hash.table) { if (hashE != null) { for (Itemset itemsetObject : hashE) { this.writer.write(itemsetObject.toString() + " #SUP: " + itemsetObject.cardinality); this.writer.newLine(); this.itemsetCount += 1; } } } } private void extend(ITNode currNode) throws IOException { int i = 0; while (i < currNode.getParent().getChildNodes().size()) { ITNode brother = (ITNode)currNode.getParent().getChildNodes().get(i); if (brother != currNode) { if (currNode.getTidset().equals(brother.getTidset())) { replaceInSubtree(currNode, brother.getItemset()); 71 delete(brother); } else if (containsAll(brother, currNode)) { replaceInSubtree(currNode, brother.getItemset()); i++; } else if (containsAll(currNode, brother)) { ITNode candidate = getCandidate(currNode, brother); delete(brother); if (candidate != null) { currNode.getChildNodes().add(candidate); candidate.setParent(currNode); } } else if (!currNode.getTidset().equals(brother.getTidset())) { ITNode candidate = getCandidate(currNode, brother); if (candidate != null) { currNode.getChildNodes().add(candidate); candidate.setParent(currNode); } i++; } else { i++; } } else i++; } sortChildren(currNode); while (currNode.getChildNodes().size() > 0) { ITNode child = (ITNode)currNode.getChildNodes().get(0); extend(child); save(child); delete(child); } 72 } private boolean containsAll(ITNode node1, ITNode node2) { BitSet newbitset = (BitSet)node2.getTidset().clone(); newbitset.and(node1.getTidset()); return newbitset.cardinality() == node2.size(); } private void replaceInSubtree(ITNode currNode, Set itemset) { Set union = new HashSet(itemset); union.addAll(currNode.getItemset()); currNode.setItemset(union); currNode.replaceInChildren(union); } private ITNode getCandidate(ITNode currNode, ITNode brother) { BitSet commonTids = (BitSet)currNode.getTidset().clone(); commonTids.and(brother.getTidset()); int cardinality = commonTids.cardinality(); if (cardinality >= this.minsupRelative) { Set union = new HashSet(brother.getItemset()); union.addAll(currNode.getItemset()); ITNode node = new ITNode(union); node.setTidset(commonTids, cardinality); return node; } return null; } private void delete(ITNode child) { child.getParent().getChildNodes().remove(child); } 73 private void save(ITNode node) throws IOException { if (!this.hash.containsSupersetOf(node.itemsetObject)) { this.hash.put(node.itemsetObject); } } private void sortChildren(ITNode node) { Collections.sort(node.getChildNodes(), new Comparator() { public int compare(ITNode o1, ITNode o2) { return o1.getTidset().size() - o2.getTidset().size(); } }); } public void printStats() { System.out.println("============= CHARM - STATS ============="); long temps = this.endTimestamp - this.startTimestamp; System.out.println(" Transactions count from database : " + this.tidcount); System.out.println(" Frequent closed itemsets count : " + this.itemsetCount); System.out.println(" Total time ~ " + temps + " ms"); System.out println("==================================================="); } } } ... tài Khai phá tập mục thường xuyên đóng sở liệu ứng dụng” Nội dung luận văn gồm chương: Chương 1: Tổng quan khai phá liệu khai phá tập mục thường xuyên Chương 2: Khai phá tập mục thường xuyên đóng. .. Chương 2: Khai phá tập mục thường xuyên đóng sở liệu 31 32 2.1 Cơ sở toán học tập mục thường xuyên đóng 32 2.1.1 Ánh xạ đóng 32 2.1.2 Tập đóng 32 2.1.3 Kết nối Galois 32 2.1.4 Bao đóng tập mục liệu. .. Tập tập mục thường xuyên tập mục thường xuyên Tức là: với A, B ⊆ I, A ⊆ B B tập mục thường xuyên A tập mục thường xuyên Tính chất 1.2 phát biểu lại sau: A ⊆ B A tập mục không thường xuyên B tập