Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 38 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
38
Dung lượng
6,26 MB
Nội dung
ĐẠI HỌC DUY TÂN TRƯỜNG KHOA HỌC MÁY TÍNH Báo cáo mơn học KHAI PHÁ DỮ LIỆU TÌM HIỂU LUẬT KẾT HỢP ( Association rule ) Thực : Bùi Thanh Tú Nguyễn Văn Quốc Lê Hồng Hải Nguyễn Đình Chiến Lớp : K24MCS.1 Đà nẵng, tháng 12 năm 2022 MỤC LỤC I LỜI MỞ ĐẦU Lý chọn đề tài Mục tiêu nghiên cứu 3 Phương pháp nghiên cứu .3 Bố cục tiểu luận .3 II GIỚI THIỆU VỀ PYTHON VÀ CÁC THƯ VIỆN Ngôn ngữ lập trình Python .4 Thư viện Numpy Thư viện pandas .9 III PHÁT HIỆN TRI THỨC VÀ KHAI PHÁ DỮ LIỆU .11 Giới thiệu phát tri thức 11 Quá trình phát tri thức từ sở liệu 11 2.1 Xác định vấn đề 12 2.2 Thu thập tiền xử lý liệu 12 2.3 Khai thác liệu 12 2.4 Minh họa đánh giá .12 2.5 Đưa kết vào thực tế 12 Giới thiệu khai phá liệu 12 3.1 Khái niệm khai phá liệu 12 3.2 Nhiệm vụ khai phá liệu .13 3.3 Một số ứng dụng khai phá liệu 13 3.4 Các kỹ thuật khai phá liệu 13 3.5 Kiến trúc hệ thống khai phá liệu 15 IV LUẬT KẾT HỢP TRONG KHAI PHÁ DỮ LIỆU 16 Bài toán kinh điển dẫn đến việc khai phá luật kết hợp 16 Định nghĩa luật kết hợp 16 2.1 Độ hỗ trợ 16 2.2 Độ tin cậy .17 2.3 Tập hợp thường xuyên 18 2.4 Tập đóng 18 Phương pháp khai phá luật kết hợp 18 3.1 Các chiến luợc sinh tập thường xuyên 21 3.2 Giải thuật Apriori 21 3.3 Giải thuật FP-Growth .25 3.4 So sánh hai thuật toán Apriori FP-Growth 28 V KHẢO SÁT MƠ PHỎNG THUẬT TỐN .29 Môi trường chạy ứng dụng 29 Giới thiệu ứng dụng .29 Thực code ứng dụng .29 3.1 Thực đọc file liệu tiền xử lý liệu .29 3.2 Thực tính tốn in kết .30 VI KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN .31 VII TÀI LIỆU THAM KHẢO 32 VIII PHỤ LỤC 33 I LỜI MỞ ĐẦU Lý chọn đề tài Trong điều kiện yêu cầu thương trường, đòi hỏi phải có phương pháp nhanh, phù hợp, tự động, xác có hiệu để lấy thơng tin có giá trị Các tri thức chiết xuất từ sở liệu nguồn tài liệu hỗ trợ cho lãnh đạo việc lên kế hoạch hoạt động việc định sản xuất kinh doanh Vì vậy, tính ứng dụng khai thác luật kết hợp từ sở liệu vấn đề quan tâm Khai phá liệu giai đoạn quan trọng tiến trình khai thác tri thức từ sở liệu, tri thức hỗ trợ cho việc định khoa học kinh doanh Luật kết hợp phương tiện hữu ích để khám phá mối liên kết liệu Khai phá luật kết hợp sở liệu cho phép tiết kiệm chi phí làm tăng hiệu suất làm việc Do đó, vấn đề tìm hiểu khai phá liệu, luật kết hợp lý để thực đề tài Mục tiêu nghiên cứu Tiếp cận tổng quan phát tri thức, trình phát tri thức từ sở liệu khai phá liệu Tìm hiểu luật kết hợp khai phá liệu qua định nghĩa, toán, hướng tiếp cận số thuật toán phát luận kết hợp Dựa vào kiến thức môn học khác việc tìm hiểu thêm ngơn ngữ lập trình nhằm cài đặt thuật toán vào việc xây dựng ứng dụng thực tế Phương pháp nghiên cứu Tìm hiểu kiến thức phát tri thức khai phá liệu Tìm hiểu luật kết hợp Tìm hiểu kiến thức để phát triển ứng dụng mơ tả khảo sát thuật toán Bố cục tiểu luận Giới thiệu python Phát tri thức khai phá liệu Luật kết hợp Khảo sát, mơ tốn ứng dụng Kết luận định hướng phát triển II GIỚI THIỆU VỀ PYTHON VÀ CÁC THƯ VIỆN Ngôn ngữ lập trình Python Python ngơn ngữ lập trình thông dịch (interpreted), hướng đối tượng (object-oriented), ngôn ngữ bậc cao (high-level) ngữ nghĩa động (dynamic semantics) Python hỗ trợ module gói (packages), khuyến khích chương trình module hóa tái sử dụng mã Trình thơng dịch Python thư viện chuẩn mở rộng có sẵn dạng mã nguồn dạng nhị phân miễn phí cho tất tảng phân phối tự Python hình thành vào cuối năm 1980, việc thực vào tháng 12 năm 1989 Guido van Rossum Centrum Wiskunde & Informatica (CWI) Hà Lan kế thừa cho ngôn ngữ ABC (tự lấy cảm hứng từ SETL) có khả xử lý ngoại lệ giao tiếp với Hệ điều hành Amoeba Van Rossum tác giả Python, vai trị trung tâm ông việc định hướng phát triển Python Python 2.0 phát hành vào ngày 16 tháng 10 năm 2000 có nhiều tính mới, bao gồm thu gom rác theo chu kỳ (cycle-detecting garbage) hỗ trợ Unicode Với việc phát hành trình phát triển thay đổi trở nên minh bạch cộng đồng hậu thuẫn Python 3.0 phát hành năm 2008, sau thời gian dài thử nghiệm Cho tới năm 2017, Python có phiên 3.7 Sau đặc điểm Python: Ngữ pháp đơn giản, dễ đọc Vừa hướng thủ tục (procedural-oriented), vừa hướng đối tượng (object-oriented) Hỗ trợ module hỗ trợ gói (package) Xử lý lỗi ngoại lệ (Exception) Kiểu liệu động mức cao Có thư viện chuẩn module ngoài, đáp ứng tất nhu cầu lập trình Có khả tương tác với module khác viết C/C++ (Hoặc Java cho Jython, Net cho IronPython) Có thể nhúng vào ứng dụng giao tiếp kịch (scripting interface) Ngoài ra, Python dễ dàng kết nối với thành phần khác: Python kết nối với đối tượng COM, NET (Ironpython, Python for net), CORBA, Java… Python hỗ trợ Internet Communications Engine (ICE) nhiều công nghệ kết nối khác Có thể viết thư viện C/C++ để nhúng vào Python ngược lại Python ngôn ngữ có khả chạy nhiều tảng Python có cho hệ điều hành: Windows, Linux/Unix, OS/2, Mac, Amiga, hệ điều hành khác Thậm chí có phiên chạy NET, máy ảo Java, điện thoại di động (Nokia Series 60) Với mã nguồn chạy giống tảng Python đơn giản dễ học Python có cộng đồng lập trình lớn, hệ thống thư viện chuẩn, thư viện mã nguồn mở chia sẻ mạng Python ngôn ngữ mã nguồn mở Cài đặt Python dùng giấy phép nguồn mở nên sử dụng phân tối tự do, việc thương mại Giấy phép Python quản lý Python Software Foundation Kể từ năm 2003, Python xếp vào số mười ngơn ngữ lập trình phổ biến Chỉ số Cộng đồng Lập trình TIOBE, nơi mà tính đến tháng 10 năm 2021, Python ngôn ngữ phổ biến (đứng trước Java C) Nó chọn Ngơn ngữ Lập trình Năm (vì "có đánh giá tăng cao năm") vào năm 2007, 2010, 2018, 2020 (chỉ Python bốn năm) Một nghiên cứu thức nghiệm ngôn ngữ kịch bản, chẳng hạn Python, cho suất cao so với ngôn ngữ thông thường, chẳng hạn C Java, vấn đề lập trình liên quan đến thao tác xâu tìm kiếm từ điển, đồng thời tiêu tốn nhớ thường "tốt Java không tệ so với C hay C++" Hiện ngôn ngữ Python xếp hạng thứ Top 10 ngơn ngữ lập trình phổ biến giới sử dụng (Bảng xếp hạng năm 2016): Recommended for you Document continues below 1-1 1과3항 - dfdfgg 26 Viết tiếng Việt 100% (1) Bài tập nâng cao Tiếng Anh… Viết tiếng Việt 100% (11) ĐỀ THI Reading LV Trinh ĐỀ - Copy Viết tiếng Việt 89% (28) Du, Anh T T Phan, 114 Huyen T L 2018 … Viết tiếng Việt 78% (9) Bảng 1: Bảng xếp hạng top 10 ngơn ngữ lập trình phổ biến giới Thư viện Numpy Numpy thư viện lõi phục vụ cho khoa học máy tính Python, hỗ trợ cho việc tính tốn mảng nhiều chiều, có kích thước lớn với hàm tối ưu áp dụng lên mảng nhiều chiều Numpy đặc biệt hữu ích thực hàm liên quan tới Đại Số Tuyến Tính Đặc điểm Numpy: Kiểu liệu phần tử mảng phải giống Mảng chiều nhiều chiều Các chiều (axis) đánh thứ tự từ trở Số chiều gọi hạng (rank) Có đến 24 kiểu số khác Kiểu ndarray lớp xử lý liệu mảng nhiều chiều Rất nhiều hàm phương thức xử lý ma trận Khởi tạo với hàm có sẵn np.zeros((3,4), dtype = int): Tạo mảng hai chiều phần tử với kích thước 3x4 np.ones((2,3,4), dtype = int): Tạo mảng chiều phần tử với kích thước 2x3x4 np.arange(1,7,2): Tạo mảng với phần tử từ - với bước nhảy np.full((2,3),5): Tạo mảng chiều phần tử với kích thước 2x3 np.eye(4, dtype=int): Tạo ma trận đơn vị với kích thước 4x4 np.random.random((2,3)): Tạo ma trận phần tử ngẫu nhiên với kích thước 2x3 Thao tác với mảng dtype: Kiểu liệu phần tử mảng shape: Kích thước mảng size: Số phần tử mảng ndim: Số chiều mảng Truy cập phần tử mảng Các phần tử mảng đánh số từ trở arr[i]: Truy cập tới phần tử thứ i mảng chiều arr1[i,j]: Truy cập tới phần tử hàng i, cột j mảng chiều arr2[n,i,j]: Truy cập tới phần tử chiều n, hàng i, cột j mảng chiều arr[a:b]: Truy cập tới phần tử từ a đến b-1 mảng chiều arr1[:,:i]: Truy cập tới phần tử từ cột đến cột i-1, tất hàng mảng chiều Các hàm thống kê arr.max() np.max(arr): Lấy giá trị lớn mảng arr arr.min() np.min(arr): Lấy giá trị nhỏ mảng arr arr.sum() np.sum(arr): Tổng tất phần tử mảng arr arr.mean() np.mean(arr): Trung bình cộng tất phần tử mảng arr np.median(arr): Trả giá trị trung vị mảng arr NumPy dtype Bảng 2: Bảng kiểu liệu NumPy Hình 6: Lược đồ biểu diễn tập mục cần xét loại bỏ bớt theo độ hỗ trợ Ví dụ: Loại bỏ dựa độ hỗ trợ minsup = 22 8.2.2 Thuật toán Apriori 1- Sinh tất tập mục thường xuyên mức 1(frequent 1-itemsets) 2- Gán k =1 3- Lặp lại, khơng có thêm tập mục thường xuyên 3.1- Từ tập mục thường xuyên mức k, sinh tập mục mức (k+1) cần xét 3.2- Loại bỏ tập mục mức k+1 chứa tập tập mục khơng thường xun mức k 3.3- Tính độ hỗ trợ tập mục mức k+1, cách duyệt qua tất giao dịch 3.4- Loại bỏ tập mục không thường xuyên mưc k+1 3.5- Thu tập mục thường xuyên mức k+1 Ví dụ: Với minsup = 4- Với tập mục thường (I) thu được, sinh tất tập (B) không rỗng 5- Với tập B, sinh luật kết hợp: B (I-B) 6- Với luật kết hợp, duyệt qua tất giao dịch Chọn luật có độ tin cậy(c) ≥ minconf Ví dụ: với I= {A1,A2,A5} Các tập I: {A1}, {A2}, {A5}, {A1,A2},{A1,A5},{A2,A5} Có luật kết hợp sau: {A1} => {A2,A5}; {A2} =>{A1,A5}; {A5} =>{A1,A2}; {A1,A2} =>{A5}; {A1,A5} =>{A2}; {A2,A5} => {A1} Với frequent itemsets I ={B,C,E}, min_conf =80% Ta có luật kết hợp là: {B,C} =>{E}; {C,E} =>{B} 23 8.2.3 Các yếu tố ảnh hưởng Lựa chọn giá trị ngưỡng minsup: Giá trị minsup thấp sinh nhiều tập mục thường xuyên Điều làm tăng số lượng tập mục phải xét Số lượng mục sở liệu (các giao dịch): Cần thêm nhớ để lưu giá trị độ hỗ trợ với mục Nếu số lượng mục(tập mục mức 1) thường xun tăng lên chi phí chi phí I/O (duyệt giao dịch) tăng Kích thước sở liệu (các giao dịch): Giải thuật phải duyệt sở liệu nhiều lần, chi phí tính tốn Apriori tăng lên số lượng giao dịch tăng lên Kích thước trung bình giao dịch: Khi kích thước (số lượng mục) trung bình giao dịch tăng lên, độ dài tối đa tập mục thường xuyên tăng 8.2.4 Các cải tiến giải thuật Apriori Kỹ thuật dựa bảng băm (hash-based technique): Một k-itemset ứng với hashing bucket count nhỏ minimum support threshold không frequent itemset Giảm giao dịch (transaction reduction): Một giao dịch không chứa frequent kitemset khơng cần kiểm tra lần sau (cho k+1-itemset) Phân hoạch (partitioning): Một itemset phải frequent phân hoạch frequent tồn tập liệu Lấy mẫu (sampling): Khai phá tập liệu cho trước với trị support threshold nhỏ cần phương pháp để xác định tính tồn diện (completeness) Đếm itemset động (dynamic itemset couting): Chỉ thêm itemset dự tuyển tất tập chúng dự đoán frequent 24 8.3 Giải thuật FP-Growth FP-Growth biểu diễn liệu giao dịch cấu trúc liệu gọi FP – tree FP-Growth sử dụng cấu trúc FP-tree để xác định trực tiếp tập mục thường xuyên FP-tree viết tắt từ Frequent Pattern Tree ( Cây mẫu thường xun) Thuật tốn đọng (các thơng tin chính) đủ để khai thác tập phổ biến Tránh vấn đề "tốn kém" phải duyệt sở liệu nhiều lần Phát triển phương pháp khai thác tập phổ biến dựa FP-tree hiệu quả: Phương pháp chia để trị: phân tách nhiệm vụ khai thác thành vấn đề nhỏ Tránh bước sinh tập ứng viên: kiểm tra sở liệu phụ 8.3.1 Ý tưởng Nén sở liệu vào FP-tree, giữ lại thông tin liên kết (kết hợp) hạng mục (tập phổ biến) Chia sở liệu nén thành sở liệu có điều kiện, sở dư liệu chia ứng với hạng mục phổ biến ta khai thác sở liệu cách độc lập 8.3.2 Tính chất Thuật tốn FP -Growth xây dựng dựa hai tính chất cốt lõi: Hai giao dịch có chứa số mục, đường chúng có phần (đoạn) chung Càng nhiều đường có phần tử chung, việc biểu diễn FP-Tree gọn Thuật toán FP-Growth 1- Nén sở liệu giao dịch gốc vào FP-tree 1.1- Quét sở liệu lần, tìm tập phổ biến 1-itemsets (chỉ có hạng mục hay phần tử) 1.2- Sắp xếp tập phổ biến tìm theo thứ tự giảm dần độ phổ biến (tần số) 25 1.3- Quét lại sở liệu lần 2, xây dựng FP-tree bắt đầu với hạng mục phổ biến giao dịch 26 2- Các bước để khai thác tập phổ biến FP- tree - FP -tree có điều kiện 2.1- Duyệt hạng mục phổ biến (1-itemsets) theo thứ tự tăng dần tần số (p, m, b, a, c, f) Với hạng mục, xây dựng sở mẫu điều kiện FP-tree có điều kiện tương ứng nó: item inin (1-itemsets)(1−itemsets) ⇒ conditional pattern−base ⇒ conditional FP−Tree 2.2- Bắt đầu với hạng mục p, sở mẫu điều kiện tất đường tiền tố FP-Tree duyệt từ nút gốc {} đến nút p, đường fcam:2 cb:1 ( số theo sau số lần xuất nút p tương ứng với tiền tố đó) 2.3- Xây dựng FP-Tree có điều kiện từ mẫu cách trộn tất đường giữ lại nút có tần số >= min_sup = 0.5: fcam:2 cb:1 trộn lại thành f:2, c:3, a:2, m:2, b:1; có c:3 thoả mãn điều kiện ⇒ Do đó, mẫu phổ biến chứa p là: p, cp Làm tương tự cho hạng mục lại, ta thu bảng Item Cơ sở mẫu điều kiện FP-Tree điều kiện Các mẫu phổ biến p {fcam:2, cb:1} {c:3}-p p, cp m {fca:2, fcab:1} {f:3, c:3, a:3}-m m, fm, cm, am, fcm, cam, fam, fcam b {fca:1, f:1, c:1} ∅ b a {fc:3} {f:3, c:3}-a a, fa, ca, fca c {f:3} {f:3}-c c, fc f ∅ ∅ f 27 8.4 So sánh hai thuật toán Apriori FP-Growth Hai thuật toán so sánh dựa tiêu chí: kỹ thuật, chiến lược tìm kiếm, việc sử dụng nhớ, số lần quét sở liệu, thời gian thực hiệu thuật toán liệu khác Kĩ thuật: Thuật tốn Apriori sử dụng hai tính chất Apriori để thực trình kết hợp sinh tập ứng viên loại bỏ tập ứng viên không phù hợp, xây dựng dần tập phổ biến từ lên Thuật toán FP Growth xây dựng FP- tree từ xây dựng sở mẫu điều kiện (conditional pattern-base) FP-tree có điều kiên (condition FP-tree) thỏa mãn độ hỗ trợ tối thiểu minSup Chiến lược tìm kiếm: Apriori sử dụng chiến lược tìm kiếm theo chiều sâu FP Growth sử dụng chiến lược chia để trị Sử dụng nhớ: Thuật tốn Apriori địi hỏi khơng gian nhớ lớn xử lý số lượng tập ứng cử viên candidate itemsets tạo Thuật tốn FP Growth địi hỏi nhớ cấu trúc nhỏ gọn khai phá tập phổ biến frequent itemsets mà khơng phải thơng qua q trình sinh tập ứng cử viên candidate itemsets Số lần quét sở liệu: Thuật toán Apriori thực nhiều lần quét để tạo tập ứng viên candidate itemsets Thuật toán FP Growth cần quét sở liệu hai lần Thời gian thực hiện: Trong Apriori, thời gian thực thuật toán bị lãng phí nhiều q trình lần sinh tập ứng viên Với đặc thù chiến lược sử dụng FP Growth nêu trên, yêu cầu thời gian thực so với giải thuật Apriori Hiệu liệu: Apriori làm việc tốt với sở liệu lớn FPGrowth làm việc tốt với sở liệu nhỏ tập phổ biến sinh không dài (độ dài lớn tập frequent itemset khơng q lớn) 28 V KHẢO SÁT MƠ PHỎNG THUẬT TỐN Mơi trường chạy ứng dụng IDE: Visual studio Code Ngôn ngữ: Python Giới thiệu ứng dụng Ứng dụng sử dụng liệu mẫu hành vi mua hàng thiết bị điện tử để đưa tập mẫu phổ biến Ứng dụng bao gồm hàm: Hàm tính tốn giá trị hỗ trợ cho item_set cho từ danh sách transactions Hàm tạo tập phổ biến từ tập phổ biến trước Hàm trả tập item_set cho với item Hàm Kiểm tra xem item_set cho có hợp lệ hay khơng, tức có tất tập hợp có giá trị hỗ trợ lớn giá trị hỗ trợ tối thiểu Hàm thực bước loại bỏ tập không đủ điều kiện Thuật toán Apriori Hàm lấy mục từ item_support_dict chiều dài trả tất kết hợp có phần tử bên mục Hàm tạo quy tắc kết hợp phù hợp với giá trị tin cậy tối thiểu cho từ điển cung cấp tập mục dựa giá trị hỗ trợ chúng Hàm thực thuật tốn Apriori Ứng dụng đưa thông tin tập mẫu phổ biến với giá trị min_support = 0.5 min_confidence = 0.5 10 Thực code ứng dụng 10.1 Thực đọc file liệu tiền xử lý liệu 29 10.2 Thực tính tốn in kết 30 VI KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN Với tốn đơn giản lượng liệu ta áp dụng thuật tốn bình thường để thao tác cách nhanh chóng Nhưng thời đại số nay, lượng liệu tổng hợp lưu trữ nên quy mô dung lượng lớn Để khai thác liệu không đơn giản nên bên cạnh việc nâng cao chất lượng sở hạ tầng việc nghiên cứu áp dụng giải thuật để khai thác liệu cách tối ưu điều vô cần thiết Tùy theo loại liệu toán cụ thể, nhà khoa học giới đưa giải pháp phù hợp cho thể loại Việc nghiên cứu ứng dụng giải thuật tính tốn vào thực tế thực cần thiết Điều giúp cho công việc thực dễ dàng suất lao động cao Thơng qua q trình tiếp nhận kiến thức khai phá liệu luật kết hợp, nhóm em thực đề tài nhằm thực hóa kiến thức học vào thực tế Cụ thể, tiểu luận sâu nghiên cứu làm rõ nội dung sau: Tìm hiểu kiến thức nâng cao lập trình python Tìm hiểu kiến thức khai phá liệu Tìm hiểu luật kết hợp thuật tốn Apriori FP-Growth Xây dựng tốn mơ thuật tốn Tiểu luận cho thấy hữu ích lớn việc áp dụng thuật toán vào yêu cầu thực tế Tuy nhiên, số nguyên nhân khách quan chủ quan, tiểu luận tồn số hạn chế sau: Chưa tìm hiểu sâu tốn mơ thuật tốn FP-Growth Để khắc phục hạn chế nêu trên, thời gian tới, hướng nghiên cứu tiếp tục tìm hiểu thêm giải thuật khác nhằm bổ sung vào ứng dụng để đối chiếu so sánh kết 31 VII TÀI LIỆU THAM KHẢO 1) Giáo trình khai mỏ liệu – TS Lê Thanh Long 2) KAVITHA, M.; SELVI, ST Tamil Comparative Study on Apriori Algorithm and Fp Growth Algorithm with Pros and Cons International Journal of Computer Science Trends and Technology (I JCS T)–Volume, 2016, 3) Ebook: Jiawei Han, Micheline Kamber, “Data Mining: Concepts and Techniques”, Third Edition, Morgan Kaufmann Publishers 4) Giáo trình lập trình Python – TS Huỳnh Bá Diệu 32 VIII PHỤ LỤC Mô tả số đoạn code ứng dụng: # Đọc liệu từ file csv df = pd.read_csv("data/apriori_test.csv", low_memory=False) #Hàm tính tốn giá trị hỗ trợ cho item_set cho từ danh sách transactions def get_support(transactions, item_set): match_count = for transaction in transactions: if item_set.issubset(transaction): match_count += return float(match_count/len(transactions)) #Tạo tập phổ biến từ tập phổ biến trước def self_join(frequent_item_sets_per_level, level): current_level_candidates = list() last_level_items = frequent_item_sets_per_level[level - 1] if len(last_level_items) == 0: return current_level_candidates for i in range(len(last_level_items)): for j in range(i+1, len(last_level_items)): itemset_i = last_level_items[i][0] itemset_j = last_level_items[j][0] union_set = itemset_i.union(itemset_j) if union_set not in current_level_candidates and len(union_set) == level: current_level_candidates.append(union_set) return current_level_candidates #Hàm trả tập item_set cho với item def get_single_drop_subsets(item_set): single_drop_subsets = list() for item in item_set: temp = item_set.copy() temp.remove(item) single_drop_subsets.append(temp) 33 return single_drop_subsets #Kiểm tra xem item_set cho có hợp lệ hay khơng, tức có tất tập hợp có giá trị hỗ trợ lớn giá trị hỗ trợ tối thiểu def is_valid_set(item_set, prev_level_sets): single_drop_subsets = get_single_drop_subsets(item_set) for single_drop_set in single_drop_subsets: if single_drop_set not in prev_level_sets: return False return True #Hàm thực bước loại bỏ tập ko đủ điều kiện Thuật toán Apriori def pruning(frequent_item_sets_per_level, level, candidate_set): post_pruning_set = list() if len(candidate_set) == 0: return post_pruning_set prev_level_sets = list() for item_set, _ in frequent_item_sets_per_level[level - 1]: prev_level_sets.append(item_set) for item_set in candidate_set: if is_valid_set(item_set, prev_level_sets): post_pruning_set.append(item_set) return post_pruning_set #Hàm lấy mục từ item_support_dict chiều dài trả tất kết hợp có phần tử bên mục import itertools def find_subset(item, item_length): combs = [] for i in range(1, item_length + 1): combs.append(list(itertools.combinations(item, i))) subsets = [] for comb in combs: for elt in comb: subsets.append(elt) return subsets #Hàm tạo quy tắc kết hợp phù hợp với giá trị tin cậy tối thiểu cho 34 từ điển cung cấp tập mục dựa giá trị hỗ trợ chúng def association_rules(min_confidence, support_dict): rules = list() for item, support in support_dict.items(): item_length = len(item) if item_length > 1: subsets = find_subset(item, item_length) for A in subsets: B = item.difference(A) if B: A = frozenset(A) AB = A | B confidence = support_dict[AB] / support_dict[A] if confidence >= min_confidence: rules.append((A, B, confidence)) return rules #Hàm thực thuật toán Apriori from collections import defaultdict def apriori(min_support): frequent_item_sets_per_level = defaultdict(list) # print("level : 1", end = " ") for item in range(1, len(item_list) + 1): support = get_support(transactions, {item}) if support >= min_support: frequent_item_sets_per_level[1].append(({item}, support)) for level in range(2, len(item_list) + 1): # print(level, end = " ") current_level_candidates = self_join(frequent_item_sets_per_level, level) post_pruning_candidates = pruning(frequent_item_sets_per_level, level, current_level_candidates) if len(post_pruning_candidates) == 0: break for item_set in post_pruning_candidates: support = get_support(transactions, item_set) if support >= min_support: 35 frequent_item_sets_per_level[level].append((item_set, support)) return frequent_item_sets_per_level 36