Sử dụng MapReduce để xây dựng thuật toán Luật kết hợp Apriori Trong báo cáo này, chúng tôi đề xuất cải tiến thuật toán Apriori dựa trên mô hình MapReduce. Bản báo cáo này chúng tôi đã hoàn thành tốt đạt 9 điểm
TRƯỜNG ĐẠI HỌC THỦY LỢI KHOA CÔNG NGHỆ THÔNG TIN BÁO CÁO BÀI TẬP LỚN MƠN HỌC PHÂN TÍCH DỮ LIỆU LỚN Đề tài: Sử dụng MapReduce để xây dựng thuật tốn Luật kết hợp Apriori Nhóm sinh viên thực hiện: Nguyễn Thị Quỳnh 1651061170 Trương Thị Thanh Hiền 1651061180 Nguyễn Trung Hiếu 1651060711 Giảng viên phụ trách môn học: Nguyễn Tu Trung Hà Nội, tháng 12 năm 2020 Mục lục I Mục mở đầu .3 II Trình bày thuật toán gốc : Apriori Algorithm III Ý tường Map/Reduce hóa Map/Reduce hóa Ý tưởng Map/Reduce hóa 10 IV Thuật tốn Map-Reduce hóa 11 Pha 11 Pha 13 Sinh luật kết hợp từ tập mục phổ biến 14 V Chương trình demo 16 Chương trình MRApriori 16 Chương trình sinh luật kết hợp từ kết MRApriori .17 VI KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN .17 Kết luận .17 Hướng phát triển 18 VII Tài liệu tham khảo 18 I Mục mở đầu Phân tích liệu lớn ứng dụng rộng rãi nhiều lĩnh vực Đặc biệt, năm gần với số lượng liệu vượt khả xử lý hệ thống sở liệu truyền thống việc khai phá xử lý liệu lớn cách hiệu thách thức thực Nhiều thuật toán khai phá tập mục phổ biến công bố với kết thành cơng thuật tốn Apriori, FP-Growth, Thuật tốn Apriori thuật toán tảng cho nhiều thuật toán khai phá luật kết hợp sau Tuy nhiên, thuật toán lại không thực hiệu với sở liệu lớn thời gian thực lớn phải duyệt nhiều lần sở liệu Mơ hình lập trình Map/Reduce đề xuất mơ hình lập trình thực thi song song xử lý tập liệu lớn Map/Reduce tảng Hadoop chạy phần cứng thơng thường giúp làm đơn giản hóa thuật tốn tính tốn phân tán Do đó, việc cải tiến thuật tốn Apriori khai phá tập mục phổ biến mơ hình Map/Reduce giải pháp hợp lý Trong báo cáo này, chúng tơi đề xuất cải tiến thuật tốn Apriori dựa mơ hình Map/Reduce Thuật tốn thực tìm kiếm tất tập mục phổ biến qua hai pha: pha thứ tìm kiếm tập mục phổ biến 1_itemsets pha thứ hai tìm kiếm tập mục phổ biến k_itemSets (k>=2) Thơng qua mơ hình Map/Reduce chia việc xử lý thành nhiều công việc nhỏ, phân tán khắp nút tính tốn, thu thập kết từ nút để tổng hợp thành kết toàn thể Bài báo gồm phần sau: Sau phần mở đầu mục dành cho việc mơ tả mơ hình và| phương pháp lập trình dựa Map/Reduce Mục trình bày thuật tốn Apriori gốc Mục chúng tơi đề xuất cải tiến thuật tốn MRApriori mơ hình Map/Reduce Mục kết thử nghiệm thuật toán MRApriori so sánh với thuật toán gốc Apriori Cuối cùng, mục kết luận số ý kiến nhận xét vấn đề nghiên cứu II Trình bày thuật toán gốc: Apriori Algorithm Thuật toán thực lặp lại việc tìm kiếm theo mực sử dụng thơng tin mức k để duyệt mức k+1 Đầu tiên tập mục thường xuyên có độ dài xây dựng việc duyệt qua toàn liệu để đếm xuất phần từ giá trị phải lớn độ hỗ trợ nhỏ nhất(minSupport) Kết việc đếm kí hiệu L1.Tiếp theo L1 sử dụng để tìm L2 tập mục thường xun có độ dài Tác vụ thực lặp lại đến khơng tìm tập mục thường xun có độ dài k thỏa mãn điều kiện minSupport Mỗi lần thực việc tìm tập mục thường xuyên Lk yêu cầu duyệt toàn tập liệu Từ mục thường xuyên ta sinh luật kết hợp mạnh cách tìm luật tập mục thường xuyên thỏa mãn minConfidence Định nghĩa : độ hỗ trợ (support) X=>Y tỷ lệ phần trăm ghi X U Y với tổng số giao tác có CSDL Support(X=>Y) = Support(X U Y)/ Tổng số giao tác Định nghĩa : độ tin cậy (confidence) X=>Y tỉ lệ phần trăm số giao dịch có chứa X U Y với số giao dịch có chứa X Confidence( X=>Y) = Support(X U Y)/ Support(X) Duyệt toàn CSDL giao dịch để tính giá trị hỗ trợ phần tử tập phổ biến tiềm C1 1-itemset , so sánh với minsup để có 1itemset(L1) VD: với tập mục Tập mục trong giao dịch {a, b, c, d, e} {b, c} {a, b, f} {a, b, g} {a, f, h} minSup = Bước 1: Duyệt CSDL D để đếm mục liệu có độ dài C1 Mục liệu Tần suất a b c d e f g h So sánh với minSup L1 Mục liệu Tần suất a b c f 2 L1 nối ghép phép toàn join L1, để sinh 2-itemset tập phổ biến tiềm Loại bỏ tập mục tập mục phổ biến 2-itemset C2 VD: Bước 2: Sinh C2 từ ứng cử viên L1 Mục liệu a, b a, c a, f b, c b, f c, f Duyệt tồn CSDL giao dịch để tính giá trị hỗ trợ ứng viên 2itemset, so sánh phần tử với minSup để thu tập mục thường xuyên 2-itemset(L2) VD: Bước 3: Duyệt CSDL D để đếm mục liệu có độ dài Mục liệu Tần suất a, b a, c a, f b, c b, f c, f So sánh với minSup được L2 Mục liệu Tần suất a, b a, f b, c 4.Lặp lại từ bước cho đên tập ứng cử tiềm C= rỗng( khơng tìm thấy tập mục phổ biến) VD: Bước 4: Sinh C3 từ ứng cử viên L2 Mục liệu a, b, f a, b, c Duyệt CSDL D để đếm các mục liệu có độ dài là 3 Mục liệu Tần suất a, b, f a, b, c Từ ta có L3 rỗng 5.Với mục phổ biến I, sinh tất tập s không rỗng với I VD: minConf = 75% Mục liệu support(X,Y) support(X) confidence a, b 60% 80% 75% b, a 60% 80% 75% a, f 40% 80% 50% f, a 40% 40% 100% b, c 40% 80% 50% c, b 40% 40% 100% 6.Với tập s không rỗng I ,sinh luật s =>(I->s) độ tin cậy (confidence) lớn minConf VD: Xét tập CSDL ban đầu, tìm tất luật kết hợp áp dụng thuật toán thoả mãn điều kiện minSup 40% minConf = 80% Tập luật sinh sau thực sau R1: a → b (support = 60%, confidence = 75%) R1: b → a (support = 60%, confidence = 75%) R1: f → a (support = 40%, confidence = 100%) R1: c → b (support = 40%, confidence = 100%) III Ý tường Map/Reduce hóa Map/Reduce hóa Mơ hình lập trình Map/Reduce Google đề xuất năm 2004 để xử lý tập liệu lớn Map/Reduce mơ hình áp dụng hệ thống máy tính kết nối với kèm theo hệ thống chia sẻ tập tin phân tán Với mơ hình này, chia nhỏ cơng việc thành công việc giống liệu đầu vào chia thành mảnh liệu nhỏ Đặc biệt nhất, để thực thao tác xử lý cách song song đồng thời Map/Reduce sử dụng hai thao tác cho việc thực thi công việc ban đầu từ người dùng hàm Map hàm Reduce Hàm Map tiếp nhận mảnh input vàovà thực xử lý để chuẩn bị liệu làm đầu vào cho hàm Reduce Hàm Reduce thực xử lý riêng trả phần nhỏ kết cuối công việc Sau tất hàm Reduce thực ta có tồn kết cơng việc Hình 1. Mơ hình Map/Reduce Hàm Map: nhận liệu đầu vào cặp liệu (key/value) tùy vào mục đích người dùng mà hàm Map trả danh sách cặp liệu (intermediate key, value) Hàm Reduce: Hệ thống gom nhóm tất value theo intermediate key từ output hàm Map, tạo thành tập cặp liệu với cấu trúc (key, tập value key) Dữ liệu input hàm Reduce cặp liệu gom nhóm sau thực xử lý trả cặp liệu (key, value) ouput cuối cho người dùng hàm apriori_gen(Lk-1:frequent(k-1)_itemsets): Đây hàm sinh tập itemSet ứng viên vòng thứ k để bước Map/Reduce thứ k (k >= 2) duyệt sở liệu Ý tưởng Map/Reduce hóa Trong phần chúng tơi trình bày thuật tốn Apriori mơ hình Map/Reduce (MRApriori) kế thừa từ ý tưởng thuật toán Apriori Thuật toán MRApriori thực bước giống thuật tốn Apriori thơng qua hai pha thực để tìm thấy tất tập mục phổ biến Thuật tốn duyệt tập CSDL theo cách mơ hình Map/Reduce, dựa vào hai hàm định nghĩa Map Reduce để tính độ hỗ trợ tập mục Việc tính tốn thực 10 song song phân tán việc tính tốn nhanh hơn, đặc biệt sở liệu thực lớn Hình 2. Mơ hình luồng dữ liệu của thuật tốn MRApriori IV Thuật tốn Map-Reduce hóa Input: sở liệu bệnh nhân ung thư vú độ hỗ trợ cực tiểu Output: Tất tập mục phổ biến Method: bước thuật toán MRApriori sau: Pha Tìm tập mục phổ biến 1_itemsets Ta định nghĩa h|m Map mô hình Map/Reduce, nhận liệu đầu vào giao dịch DB Tại nút, đầu hàm Map output(ai, part_count) trả cặp (imtermediate key, value), imtermediate key ứng với tập mục value số imtermediate key tương ứng với giao dịch Ở bước này, hàm Reduce nhận đầu vào cặp (imtermediate key, value), tập hợp tính tổng value theo imtermediate key, đ}y l| độ hỗ trợ tập mục Đầu hàm Reduce output(ai, C) trả tập mục phổ biến 1_itemsets, có độ hỗ trợ C lớn độ hỗ trợ cực tiểu 11 procedure Mapper_MRApriori; KeyIn Line_offset: LongWritable ValueIn Line_value: Text KeyInt ItemSet: Text ValueInt 1: IntWritable foreach transaction t in Si foreach item in t output(ai, part_count); end foreach end foreach Bảng biểu diễn hình thức Map1 procedure Reducer_MRApriori; KeyInt ItemSet: Text ValInt List KeyOut ItemSet: Text ValueOut sum: IntWritable C = sum(S(ai)); if (C >= minSupport) output(ai, C); end if 12 Pha Tìm tập mục phổ biến k_itemsets (k>=2) Đ}y l| bước lặp, hàm Map nhận liệu đầu vào giao dịch tập mục phổ biến Lk-1 (k>=2) Ở bước này, tìm kiếm tập mục ứng viên Ck hàm apriori_gen, tức xếp kết nối tập mục Lk-1, loại bỏ tập mục trùng lặp Với tập mục k_itemsets (k>=3), thực hàm prune(Ck) xén tỉa tập mục khơng phổ biến Duyệt sở liệu, tính độ hỗ trợ tập mục Đầu hàm Map output(ai, part_count) trả cặp (imtermediate key, value) với imtermediate key tập mục value số imtermediate key giao dịch Hàm Reduce bước thực giống bước procedure Mapper2_MRApriori; KeyIn Line_offset: LongWritable ValueIn Line_value: Text KeyInt ItemSet: Text ValueInt 1: IntWritable Ck = apriori_gen(Lk1); if (k >= 3) prune(Ck); end if foreach transaction t in Si Ct = subset(Ck,t); foreach item ai in Ct output(ai, part_count); end foreach end foreach procedure Reducer2_MRApriori; (Xây dựng như h|m Reducer_MRApriori) Hàm giống với pha 13 Với nút, độ phức tạp thời gian thuật tốn để tính tốn tập mục O(t * n/p) đó, t l| kích thước sở liệu n số tập mục t p số nút hệ thống Thực kết nối xén tỉa k tập mục phổ biến, nên có độ phức tạp thời gian O(k /p) Vậy, độ phức tạp thời gian thuật toán MRApriori O(k * (k + t * n)/p), hay O((k + k * t * n)/p) Suy ra, O((k* t * n)/p) t >> k, n >> k, chưa tính thời gian truyền liệu máy Procedure apriori_gen(Lk - 1: frequent(k – 1)_itemsets) foreach itemset l1 in Lk – foreach itemset l2 in Lk – if (l1[1] = l2[1]) ^ (l1[2] = l2[2]) ^ (l1[k – 2] = l2[k – 2]) ^ (l1[k – 1] < l2[k – 1]) then c = l1 xor l2 if has _infrequent_subset(c, Lk – 1) then delete c else add c to Ck endif end foreach end foreach Sinh luật kết hợp từ tập mục phổ biến Với dòng output từ hàm Reduce thuật tốn MRApriori có thành phần sau: [Danh sách tập mục phổ biến] [Số lần xuất hiện] Với k_itemsets (k >= 2) ta tách sau [X] [Số lần xuất = support(X)] Và [X, Y] [Số lần xuất = support(X,Y)] Với X tập mục lại sau bỏ tập mục Y khỏi thành phần liệu Với n tập mục thành phần có n cặp X, Y sinh từ việc tách Y cịn lại X Tính confidence(X, Y) = support(X) / support(X,Y) so sánh với minConfidence để xem có rút luật hay khơng 14 Map KeyIn Line_offset: LongWritable ValueIn Line_value: Text KeyInt X: Text ValueInt Y + count OR count: Text foreach k_itemsets in Reduce_MRApriori_result foreach itemset in k_itemsets collect((k_itemsets – itemset), (itemset + count)) endforeach collect(k_itemsets, count) endforeach Reduce KeyInt X: Text ValueInt Y + count OR count: List KeyOut X -> Y: Text ValueOut Confidence: Text X = keyInt foreach value in valueInt if (value is number) then support(X) = value else Y = value[0] // first element of value support(X, Y) = value[1] // second element of value endelse confident(X, Y) = support(X, Y) / support(X) if(confident(X, Y) >= minConf) then collect(X->Y, confident(X, Y)) 15 endforeach V Chương trình demo Tệp liệu đầu vào Hình 1Một phần tệp liệu đầu vào Dữ liệu có cột khơng có cột gán nhãn Thứ tự tên cột là: "age", "menopause", "tumor-size", "inv-nodes", "node-caps", "degmalig", "breast", "breast-quad", "irradiat" 16 Cấu trúc dự án Chương trình MRApriori Hình Màn hình console sau chạy MRApriori 17 Hình Kết MRApriori, cột đầu tập mục phổ biến, cột cuối số lần suất Chương trình sinh luật kết hợp từ kết MRApriori Hình Màn hình console sau chạy chương trình sinh luật kết hợp Chú ý kết xếp theo độ giảm dần tin cậy luật kết hợp 18 Hình Kết lưu file Chú ý chưa xếp theo độ tin cậy luật kết hợp VI Web scaping winform kết nối sở liệu phi sql MongoDB - Ý tưởng: Bóc tách liệu tự động trang bán hàng Shopee Tiki, lưu liệu sở liệu phi sql mongoDB hiển thị dạng winform Web scaping Ngôn ngữ sử dụng: javascript dự engine Nodejs thư viện puppeteer Winform mongoDB Ngôn ngữ sử dụng : C# dựa engine Unity kết hợp với mongoDB Chức năng: Crawl liệu từ Tiki Crawl liệu từ Shopee Hiển thị toàn liệu crawl từ Tiki Hiển thị toàn liệu crawl từ Shopee Hiển thị theo danh mục hàng theo Tiki Hiển thị theo danh mục hàng theo Shopee Tìm kiếm theo tên Sản phẩm Tìm kiếm nâng cao theo đánh giá, giá tiền, địa điểm bán hàng Hình ảnh: 19 VII KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN Kết luận Hoàn thành đề tài “Sử dụng Map/Reduce để xây dựng thuật tốn Luật kết hợp Apriori” Nhóm em đạt số kết sau: Tìm hiểu tổng quan Map/Reduce thuật toán Apriori Xây dựng thuật tốn MRApriori mơ hình Map/Reduce cho liệu breast-cancer.arff So sánh kết thử nghiệm thuật toán MRApriori so với thuật toán gốc Apriori 20 Hướng phát triển Xây dựng, cải tiến Map/Reduce với phương pháp học máy khác như: SVM, KNN, Random Forest,… Áp dụng Map/Reduce nói riêng phân tích liệu lớn (Bigdata) nói chung vào số lĩnh vực khác vào áp dụng thực tiễn Trong q trình hồn thành tập lớn, nhóm em cố gắng tìm hiểu tham khảo tài liệu liên quan Tuy nhiên, thời gian có hạn nên chúng em khơng tránh khỏi thiếu sót, mong nhận đóng góp ý kiến quý thầy cô bạn để báo cáo kỹ chúng em ngày hoàn thiện áp dụng thực tiễn VIII Tài liệu tham khảo 1) Giáo trình Khai phá liệu – Thư viện Đại học Thủy Lợi - Nguyễn Hà Nam, Nguyễn Trí Thành, Hà Quang Thụy 2) Cải tiến thuật tốn Apriori mơ hình Map/Reduce - Trần Thiên Thành, Phan Đình Sinh 3) Thuật tốn Apriori khai phá luật kết hợp Data Mining (https://viblo.asia/p/thuat-toan-apriori-khai-pha-luat-ket-hop-trongdata-mining-3P0lPEv85ox) 4) Giáo trình giảng dạy môn Khai phá liệu – Ts Nguyễn Văn Đức 5) Tài liệu thư viện puppeteer (web scaping) : https://pptr.dev 6) Tài liệu mongoDB ngôn ngữ C#: https://mongodb.github.io/mongo-csharpdriver/2.11/apidocs/html/R_Project_CSharpDriverDocs.htm 7) Tài liệu unity (winform): https://docs.unity3d.com/Manual/index.html https://docs.unity3d.com/ScriptReference/ 8) Tài liệu lập trình trình xây dựng sản phẩm: https://stackoverflow.com 21