2.3.1.1. Ý tưởng thuật toán Apriori
Với một tập dữ liệu có k tập mục (item) thì việc sinh ra 2k ứng viên là quá lớn. Có cách để làm giảm độ phức tạp tính toán trong việc tạo các tập mục phổ biến đó là làm giảm số lượng các tập mục ứng viên bằng cách sử dụng nguyên lý Apriori.
Nguyên lý Apriori. Một tập mục là phổ biến thì mọi tập con của nó là phổ biến. Ví dụ, như hình sau: nếu tập mục {c,d,e} là phổ biến thì tất cả các tập con của nó là phổ biến
Hình 2.1. Tính chất Apriori của tập mục phổ biến
Như vậy, một tập mục là không phổ biến thì mọi tập cha nó đều không phổ biến nên không cần sinh ra. Ví dụ, như hình sau: nếu tập mục {a,b} không phổ biến thì tất cả các tập cha của nó là không phổ biến
2.3.1.2. Thuật toán Apriori
Apriori là một giải thuật được Rakesh Agrawal, Tomasz Imielinski, Arun Swami đề xuất lần đầu vào năm 1994. Là thuật toán khai thác luật kết hợp đầu tiên, dựa trên nguyên lý tỉa Apriori, hoạt động theo quy tắc quy hoạch động.
Nội dung thuật toán Apriori qua 2 giai đoạn:
Tìm tập phổ biến
Sinh luật mạnh
a. Tìm tập phổ biến
Input: CSDL giao dịch D và minsup
Output: Tất cả các tập mục phổ biến của D (Frequent Itemsets)
Thuật toán được mô tả như sau: 1. k=1;
2. Fk = {i|iI({i})≥N x minsup}; {tìm tất cả các tập phổ biến 1- phần tử} 3. Repeat
4. k = k+1;
5. Ck = apriori_gen(Fk-1); (sinh các tập ứng viên k phần tử) 6. for each transaction tT do
7. Ct = subset(Ck, t); (tập các ứng viên chứa trong t) 8. for each candidate itemset c Ct do
9. (c) = (c)+1 (tăng độ hỗ trợ của tập mục c) 10. end for 11. end for 12. Fk = { c | c Ck (c)≥N x minsup}; (các tập phổ biến k-phần tử) 13. until Fk =; 14. Result = Fk Diễn giải:
Tìm F1 (tập mục phổ biến có độ dài 1) (bước 1, 2)
Sinh các tập mục ứng viên có độ dài k từ Fk-1 (tập mục phổ biến có độ dài k-1) theo nguyên lý Apriori (bước 4, 5)
Duyệt CSDL để tìm độ hỗ trợ của các tập mục ứng viên có độ dài k (từ bước 6 đến bước 11)
Kiểm tra các tập mục ứng viên độ dài k có độ hỗ trợ thỏa mãn minsup. Từ đó ta có Fk (tập mục phổ biến có độ dài k) (bước 12)
Lặp lại thuật toán cho đến khi không có tập mục phổ biến mới nào được sinh ra (bước 13)
Thủ tục apriori-gen(Fk-1) tại bước 5: sinh ra ứng viên mới có độ dài k từ tập mục phổ biến có độ dài k-1 tìm được trước đó theo phương pháp sau: Cho 2 tập mục phổ biến có độ dài k-1 là A={a1,a2,…,ak-1} và B={b1,b2,…,bk-1}. Kết hợp A với B sinh ra ứng viên mới nếu thỏa mãn điều kiện sau:
𝑎𝑖 = 𝑏𝑖(𝑓𝑜𝑟 𝑖 = 1,2, … , 𝑘 − 2)𝑎𝑛𝑑 𝑎𝑘−1 ≠ 𝑏𝑘−1
Nhận xét:
Nếu theo phương pháp tổ hợp thì số lượng tập mục phải xét là 2k nhưng khi sử dụng phương pháp Apriori thì chỉ những tập phổ biến ở mức k mới được dùng để sinh ứng viên ở mức k+1, và đã loại bỏ các tập mục mức k+1 có bất kỳ tập mục con mức k là không phổ biến.
b. Sinh luật mạnh
Input: Tập F gồm tất cả các tập mục phổ biến của D và ngưỡng minconf Output: Tất cả các luật mạnh thỏa mãn minconf
Thực hiện:
Với mỗi tập phổ biến f F, sinh ra các tập con s khác , và sinh luật s =>(f-z) (f-z) ≠. (chỉ chọn f là các tập phổ biến có từ 2 phần tử trở lên)
s =>(f-z) là luật mạnh nếu độ tin cậy của nó ≥ minconf.
2.3.1.3.Ví dụ minh họa thuật toán Apriori
Với D là cơ sở dữ liệu gồm 4 giao dịch (như hình sau), với tập mục = {A,B,C,D,E}; minsup=50% minsup = 2; minconf=80%
Hình 2.3. Ví dụ minh họa thuật toán Apriori
Giải thích
Bước 1: Tìm tập mục phổ biến có độ dài 1: Ta có F1= {A},{B},{C},{E} Loại bỏ {D} vì sup(D)=1 < minsup
Bước 2: Sinh tập ứng viên có độ dài 2: Ta có tập ứng viên là {A,B}, {A,C}, {A,E}, {B,C}, {B,E}, {C,E}
Bước 3: Duyệt CSDL tìm độ hỗ trợ của tập ứng viên có độ dài 2
Bước 4: Tìm tập mục phổ biến có độ dài 2: tập ứng viên độ dài 2 có độ hỗ trợ thỏa mãn minsup
Ta có F2 = {A,C},{B,C},{B,E},{C,E}
Loại bỏ {A,B} và {A,E} do độ hỗ trợ không thỏa mãn minsup
Bước 5: Sinh ứng viên có độ dài 3: ta có tập ứng viên là {B,C,E}
Loại bỏ {A,B,C} do có tập con {A,B} không phổ biến và loại bỏ {A,C,E} do có tập con {A,E} không phổ biến đều tuân theo nguyên lý Apriori
Bước 6 : Duyệt CSDL tìm độ hỗ trợ của tập ứng viên có độ dài 3
Bước 7: Tìm tập mục phổ biến có độ dài 3: tập ứng viên độ dài 3 có độ hỗ trợ thỏa mãn minsup. Ta có F3 = {B,C,E} Không sinh được tập ứng viên có độ dài 4 -> không tìm được F4-> thuật toán dừng.
Các tập mục phổ biến tìm thấy là : {A}, {B}, {C}, {E}, {A,C}, {B,C}, {B,E}, {C,E},{B,C,E}
b. Sinh luật mạnh
Sinh luật và tính độ hỗ trợ của luật từ các tập mục phổ biến có 2 phần tử trở lên và so sanh với ngưỡng độ tin cậy minconf = 80%, ta có bảng sau:
Tập mục phổ biến Luật sinh ra Độ tin cậy Luật mạnh
{A,C} A =>C 100 % Yes C => A 67 % No {B,C} B => C 67 % No C => B 67 % No {B,E} B => E 100 % Yes E => B 100 % Yes {C,E} C => E 67 % No E => C 67 % No {B,C,E} B => CE 67 % No C => BE 67 % No E => BC 67 % No BC => E 100 % Yes BE => C 67 % No CE => B 100 % Yes