2.6.1. Bài toán đặt ra
Thuật toán SETM được đề xuất do mong muốn dùng SQL để tìm các tập mục phổ biến.
1. Đầu tiên, duyệt toàn bộ CSDL để tìm tất cả các tập mục phổ biến L1 và các mục phổ biến cùng với TID của nó L1' được xếp theo TID.
2. Tiếp theo chừng nào Lk-1!= (k >= 2)
3. Tìm tập các ứng cử viên bằng cách quét toàn bộ CSDL, với mỗi giao dịch ta tìm tổ hợp chập k của các mục có trong giao dịch và xác định các mục cùng với TID trong tổ hợp này có thuộc L'k-1 ? Nếu không phải thì bỏ qua. Trái lại, ta bổ sung tổ hợp đó vào tập ứng cử viên đồng thời lưu một bản sao của tập mục ứng cử viên cùng với TID của nó.
4. Sắp xếp lại các ứng cử viên theo tập mục.
5. Xoá tất cả các ứng cử viên có độ hỗ trợ nhỏ hơn độ hỗ trợ do người sử dụng đề ra. Kết quả lưu vào Lk'.
6. Xếp lại Lk' theo TID.
7. Cuối cùng ta được tất cả các tập mục phổ biến thoả mãn, có độ hỗ trợ tối thiểu lớn hơn hoặc bằng độ hỗ trợ tối thiểu mà người sử dụng yêu cầu.
2.6.2. Thuật toán SETM
Input: CSDL D, minsup
Ouput: Tập các tập mục phổ biến. 1.L1 = Các mục phổ biến
2.L1' = Các mục phổ biến cùng các TID của nó được xếp theo TID 3.for (k=2; Lk-1 ; k ++)
4.C'k = ;
5. for (tất cả các giao dịch t D) 6. Lt = l L'k-1 \I.TID = t.TID
// Các tập có ( k-1) - itemset phổ biến có trong giao dịch t 7.for (tất cả các tập mục phổ bíên lt Lt)
8. Ct = tăng lt thêm một mục có trong t; // Các ứng cử viên có trong t
9. C'k + = < t.TID, c > \ c C1 ; 10.
12. sort C'k theo các tập mục
13. delete các mục c C'k có c.count < minsup đưa vào L'k;
14. Lk = < l.itemset, count of l in L'k >\ l L'k; kết hợp với bước 13 15. sort L'k theo TID
16.
17.return L = kLk';
Giống như AIS thuật toán SETM cũng sinh ra các ứng cử viên dựa trên các giao dịch đọc được từ CSDL. Vì thế, nó sinh ra và đếm mỗi tập mục ứng cử viên mà thuật toán AIS sinh ra. Tuy nhiên, để dùng phép nối (JOIN) chuẩn của SQL. SETM chia sự phát sinh ứng cử viên từ việc đếm. Nó lưu một bản sao của tập mục ứng cử viên cùng với TID của việc phát sinh giao dịch trong cấu trúc tuần tự (bước 9). Cuối mỗi bước, đếm độ hỗ trợ của các tập mục ứng cử viên được xác định bởi việc xếp (bước 12) và việc kết hợp lại cấu trúc tuần tự này (bước 13). SETM ghi nhớ các TID của việc phát sinh các giao dịch với các tập mục ứng cử viên. Để tránh việc thao tác trên tập con, nó dùng thông tin này để xác định các tập mục lớn chứa trong giao dịch được đọc (bước 6). L'k C'k và thu được bởi việc xóa các ứng cử viên này mà không có độ hỗ trợ tối thiểu (bước 13). Giả sử rằng CSDL được xếp thứ tự TID, SETM có thể dễ dàng tìm các tập mục phổ biến được chứa trong một giao dịch trong bước tiếp theo bằng việc xếp L'k theo TID (bước 15). Thực tế, nó cần thăm hỏi mỗi thành viên của L'k chỉ một lần theo thứ tự TID và việc sinh ứng cử viên ở các bước 5 đến 11 có thể thực hiện nhờ phép toán Merge-join.
Nhược điểm chính của thuật toán này là dựa vào số các tập ứng cử viên C'k. Khi với mỗi tập các mục ứng cử viên có một TID kết hợp với nó, nó yêu cầu nhiều không gian để lưu trữ số lượng lớn các TID. Hơn nữa, khi độ hỗ trợ của tập mục ứng cử viên được tính vào cuối mỗi bước, C'k không theo thứ tự. Vì thế, việc xếp lại các mục là cần thiết (bước 12). Sau đó, các tập mục ứng cử viên được cắt tỉa bằng việc loại bỏ các tập mục ứng cử viên không thoả mãn ràng buộc độ hỗ trợ. Một sắp xếp khác trên TID là cần thiết đối với tập kết qủa L'k (bước 15) trước khi nó có thể được sử dụng để phát sinh các ứng cử viên trong bước tiếp theo.
Ví dụ minh hoạ thuật toán SETM
Xét CSDL cho trong bảng sau. Giả sử với độ hỗ trợ tối thiểu là 2 giao dịch
CSDL L1 L’1
TID Các mục Tập mục Độ hỗ trợ TID Tập mục
100 1, 3, 4 {1} 2 100 {1}
300 1, 2, 3, 5 {3} 3 200 {2} 400 2, 5 {5} 3 200 {3} 200 {5} 300 {1} 300 {2} 300 {3} 300 {5} 400 {2} 400 {5} C’2 L2 L’2 TID Tập mục Tập mục Độ hỗ trợ TID Tập mục 100 {1, 3} {1, 3} 2 100 {1, 3} 100 {1, 4} {2, 3} 2 200 {2, 3} 100 {3, 4} {2, 5} 3 200 {2, 5} 200 {2, 3} {3, 5} 2 200 {3, 5} 200 {2, 5} 300 {1, 3} 200 {3, 5} 300 {2,3} 300 {1, 2} 300 {2, 5} 300 {1, 3} 300 {3, 5} 300 {1, 5} 400 {2, 5} 300 {2, 3} 300 {2, 5} 300 {3, 5} 400 {2,5} L'3 L3 TID Tập mục Tập mục Độ hỗ trợ
200 {2, 3, 5} {2, 3, 5} 2
300 {2, 3, 5}
C'4 L4 = L'4 =
TID Tập mục
300 {1, 2, 3, 5}
Bảng 2.8: Ví dụ thuật toán SETM
Như vậy, tập các tập mục phổ biến mà ví dụ trên thu được là: L = 1, 2,3,5,1, 3,2, 3,2, 5,3, 5,2, 3, 5. Thuật toán kết thúc.