1.7.4.1 Thuật tốn Apriori
Apriori là thuật tốn khai phá tập mục thường xuyên do R. Agrawal và R. Srikant đề xuất vào năm 1993 [4]. Ý tưởng của thuật tốn Apriori cũng là nền tảng cho việc phát triển nhiều thuật tốn khai phá tập mục thường xuyên khác về sau.
Ý tưởng chính của thuật tốn như sau: sinh ra các tập mục ứng viên từ các tập mục thường xuyên ở bước trước, sử dụng kỹ thuật “tỉa” để bỏ đi những tập mục ứng viên khơng thỏa mãn ngưỡng hỗ trợ cho trước. Cơ sở của kỹ thuật này là tính chất:
Bất kỳ tập con nào của tập mục thường xuyên cũng phải là tập mục thường xuyên.
Vì vậy các tập mục ứng viên gồm k mục cĩ thể được sinh ra bằng cách kết nối các tập mục thường xuyên cĩ (k-1) mục và loại bỏ tập mục ứng viên nếu nĩ cĩ chứa bất kỳ một tập con nào khơng phải là thường xuyên.Giả sử các mục dữ liệu trong mỗi giao tác được lưu theo trật tự từ điển. Thuật tốn sử dụng các ký hiệu sau đây:
Thuật tốn duyệt cơ sở dữ liệu nhiều lần. Mỗi lần duyệt, thuật tốn thực hiện hai bước: bước kết nối và bước tỉa. Trong lần lặp thứ k, thuật tốn nối hai (k-1)-tập
Số hóa bởi Trung tâm Học liệu http://lrc.tnu.edu.vn/ mục để sinh ra k-tập mục, sử dụng tính chất Apriori để tỉa các tập ứng viên. Bước nối và bước tỉa như sau:
Bước kết nối (tìm Ck): Tập các k-tập mục ứng viên Ck được sinh ra bởi việc kết nối
Lk-1 với chính nĩ. Hai tập mục l1 và l2 của Lk-1 được nối nế -
- 1 2:
(l1[1] = l2[1]) (l1[2] = l2[2]) … (l1[k-2] = l2[k-2]) (l1[k-1] < l2[k-1]) Dạng của tập mục nhận được bởi nối l1 và l2 là: l1[1] l1[2] … l1[k-2] l1[k-1] l2[k-1].
Bước tỉa: Tập Ck chứa tập Lk , tức là tất cả các k-tập mục thường xuyên đều thuộc tập Ck . Tập Ck cĩ thể là rất lớn dẫn đến khối lượng tính tốn lớn. Thuật tốn áp dụng tính chất Apriori để rút gọn tập Ck . Nếu cĩ một (k-1)-tập mục con nào đĩ của k-tập mục ứng viên mà khơng cĩ mặt trong Lk-1 thì ứng viên đĩ khơng thể là thường xuyên, cĩ thể loại bỏ khỏi Ck. Việc kiểm tra các (k-1)-tập mục con cĩ thể thực hiện nhanh bởi duy trì một cây băm của tất cả các tập mục thường xuyên đã tìm thấy.
Thuật tốn Apriori ( tìm các tập mục thường xuyên)
Input: Cơ sở dữ liệu DB, ngưỡng độ hỗ trợ minsup Output: Tập các tập mục thường xuyên L trong DB Method:
(1) Tìm các 1-tập mục thường xuyên, nhận được L1 ; (2) For (k=2; Lk-1≠ ; k++) do begin
(3) Ck = apriori_gen(Lk-1, minsup); // Sinh tập ứng viên mới từ Lk-1 (4) For (each T DB) do begin
(5) C= subset(Ck,T) ; // Các tập mục ứng viên chứa trong T (6) For (each c C)
(7) c.count++ ; // tăng số đếm c lên một đơn vị (8) end ;
(9) Lk = { c Ck / c.count ≥ minsup} ; (10) End;
Số hóa bởi Trung tâm Học liệu http://lrc.tnu.edu.vn/
Sinh các tập mục ứng viên của thuật tốn Apriori: hàm Apriori_gen() Function Apriori_gen()
Input: Tập các (k-1)- tập mục thường xuyên Lk-1 Output: Tập các k- tập mục ứng viên Ck
Method: // Bước kết nối
(1) For (each (k-1)-tập mục l1 Lk-1) do (2) For (each (k-1)-tập mục l2 Lk-1) do
(3) if (l1[1] = l2[1]) and (l1[2] = l2[2]) and ….. and
(l1[k-2] = l2[k-2]) and (l1[k-1] < l2[k-1]) then (4) Ck { l1[1], l1[2], … l1[k-2],l1[k-1] l2[k-1]}; // kết nạp k-tập mục mới vào Ck // Bước tỉa (5) For (each ci Ck) do
(6) If exist (s ci) and (s Lk-1) then (7) delete ci from Ck;
(8) Return Ck;
Ví dụ minh họa:
Ta minh họa thực hiện thuật tốn Apriori trên cơ sở dữ liệu trong bảng 1.4 với
minsup = 50%, tức xuất hiện ít nhất 2 lần.
TID Các mục dữ liệu
T1 A, C, D T2 B, C, E T3 A, B, C, E T4 B, E
Bảng 1.4: Cơ sở dữ liệu giao tác minh họa thực hiện thuật tốn Apriori
- Duyệt CSDL lần thứ nhất: Tính độ hỗ trợ cho các 1 – Tập mục được kết quả như sau: C1 L1 1 – Tập mục Count {A} 2 {B} 3 {C} 3 {D} 1 {E} 3 1 – Tập mục Count {A} 2 {B} 3 {C} 3 {E} 3 Loại bỏ các 1 – tập mục cĩ count < 2
Số hóa bởi Trung tâm Học liệu http://lrc.tnu.edu.vn/ Kết nối L1 với L1 được C2:
C2 2 – Tập mục {A, B} {A, C} {A, E} {B, C} {B, E} {C, E} - Duyệt CSDL lần thứ 2: Tính độ hỗ trợ cho các 2 – tập mục. C2 L2 2 – Tập mục Count {A, B} 1 {A, C} 2 {A, E} 1 {B, C} 2 {B, E} 3 {C, E} 2 2 – Tập mục Count {A, C} 2 {B, C} 2 {B, E} 3 {C, E} 2
Kết nối L2 với L2 được C3:
C3 3 – Tập mục {B, C, E} - Duyệt CSDL lần thứ 3: Tính độ hỗ trợ cho các 3 – tập mục. C3 L3 3 – Tập mục Count {B, C, E} 2 3 – Tập mục Count {B, C, E} 2 Nối L3 với L3 được L4 = Ø, thuật tốn dừng.
Các tập mục thường xuyên tìm được theo thuật tốn Apriori là:
BCECE CE BE BC AC E C B A L L L L 1 2 3 , , , , , , , , Nhận xét:
- Cần sinh ra số lượng khổng lồ các tập ứng viên. Loại bỏ các 2 – tập
mục cĩ count < 2
Loại bỏ các 3 – tập mục cĩ count < 2
Số hóa bởi Trung tâm Học liệu http://lrc.tnu.edu.vn/ - Lặp nhiều lần duyệt CSDL để xác định độ hỗ trợ của các tập ứng viên, số lần duyệt CSDL bằng độ dài của tập mục thường xuyên dài nhất tìm được. Thuật tốn Apriori chỉ thích hợp cho các CSDL thưa (Sparse), với các CSDL dày (Dense) thì thuật tốn thực hiện kém hiệu quả.