Dựa trên cơ sở lý thuyết tập đóng, Mohammed J. Zaki và Ching-Jui Hsiao đã đưa ra thuật toán Charm, một thuật toán mới và hiệu quả trong việc tìm các tập mục thường xuyên đóng cũng như luật kết hợp.
Không giống như những thuật toán trước chỉ duyệt qua không gian của tập mục, thuật toán CHARM [12] thực hiện duyệt trên cả không gian tập mục và định danh. Hơn nữa, thuật toán CHARM tránh được những tính toán để tìm tất cả các tập con của tập mục đóng khi đi tìm tập mục đóng, hiệu quả hơn hẳn chiến lược tìm từ dưới lên (bottom – up). Tính chất này là quan trọng trong khai phá các cơ sở dữ liệu dày với tập mục thường xuyên dài. Với đặc tính duyệt qua cả hai không gian tập mục và tập định danh cho phép thuật toán CHARM sử dụng phương pháp tìm kiếm mới, bỏ qua nhiều mức để xác định tập mục đóng nhanh, thay vì phải tính toán cho nhiều tập con không đóng. Hơn nữa, thuật toán sử dụng hai chiến lược tỉa: tỉa những tập ứng cử viên nếu tập con của nó không thường xuyên; Tỉa những nhánh dựa trên tính chất không đóng (tỉa những tập không đóng Non-closed). Thuật toán không sử dụng cấu trúc dữ liệu cây băm mà sử dụng hai phép toán: hợp hai tập mục và giao hai tập định danh của chúng.
Hình 2.13 Dàn đầy đủ các tập mục của cơ sở dữ liệu hình 2.2 a.
Ý tưởng của thuật toán CHARM là duyệt trên các nút của dàn để kiểm tra xem các nút con có thường xuyên hay không. Tất cả những tập mục không thường xuyên cũng như những nhánh không đóng sẽ bị tỉa. Mỗi nút con được sinh bằng cách tổ hợp nút cha với các nút anh em cùng mức.
Ví dụ: để tạo ra các nút con của nút A thì ta tổ hợp nút A với các nút cùng mức C, D, T, W, được các nút con AC, AD, AT, AW.
Một nút anh em với nút cha sẽ không cần xét đến nếu bị tỉa do không thường xuyên hay là tập không đóng. Hiện nay có nhiều phương pháp tìm kiếm như: duyệt theo chiều rộng, chiều sâu, tìm kiếm tối ưu, CHARM thực hiện tìm kiếm theo chiều sâu trên các dàn con.
ACDW ACTW ACDTW CT CDT CDW CTW CW DT DW TW CDTW DTW C ACD {} AC AD AT AW ACDT
ACT ACW ADT ADW ATW
CD
D T W
Giả sử cho bất kỳ tập mục X nào ta đều tìm được tập tidset t(X) (tập định danh các giao tác chứa X) và ngược lại cho bất kỳ tập tidset Y nào ta đều tìm được tập mục i(Y) của nó. Thuật toán CHARM tính tất cả các khái niệm thường xuyên từ cơ sở dữ liệu vào. Một khái niệm là cặp XY trong đó X= i(Y) là tập mục đóng và Y = t(X) là tập định danh đóng. Chúng ta có thể bắt đầu duyệt các khái niệm trong không gian các tập mục hoặc không gian tập định danh. Tuy nhiên, số các mục nhỏ hơn nhiều số giao tác và vì quan tâm đến các tập đóng, ta bắt đầu tìm với các mục đơn và các tidset kết hợp của chúng.
Hình 2.14 Các tính chất cơ bản của các tập mục và tập định danh.
Các tính chất cơ bản của tập mục-tập định danh:
Cho f : P(I) N là ánh xạ 1-1 từ các tập mục đến tập các số tự nhiên. Với hai tập mục bất kỳ X1, X2, chúng ta nói X1 X2 nếu và chỉ nếu f(X1)
f(X2). f xác định một trật tự trên các tập mục. Các mục Các giao tác Các mục Các giao tác Các mục Các giao tác Các mục Các giao tác t(X1 t(X2) t(X1) cit(X1)= cit(X2) t(X1)= t(X2) X1 X2 i t t cit(X2)= it(X1X2) X1 X2 i t(x2) t t t(X1) t(X2) t(X2) cit(X1)= it(X1X2) X1 X2 t(x1) i t t t(X1) != t(X2) t(X1) cit(X1)!= cit(X2) X1 t(x2) i t i X2 t
Ví dụ: nếu f xác định trật tự từ điển thì tập mục AC < AD. Một ví dụ khác, nếu f sắp xếp các tập mục theo trật tự tăng dần của độ hỗ trợ thì khi đó AD < AC nếu supp(AD) < supp(AC).
Giả sử rằng ta xét nhánh X1t(X1), chúng ta muốn kết hợp nó với nhánh cùng mức X2t(X2) thì X1 < X2. Những tính toán của thuật toán CHARM dựa trên 4 tính chất sau:
1 Nếu t(X1) = t(X2) thì t(X1X2) = t(X1) t(X2) = t(X1) = t(X2). Do vậy, thay đổi mỗi xuất hiện của X1 với X1 X2 và loại bỏ X2 trong các tập xét sau này, vì toán tử đóng của nó đồng nhất với toán tử đóng của tập X1X2.
2 Nếu t(X1) t(X2) thì t(X1X2) = t(X1) t(X2) = t(X1) t(X2). Chúng ta thay mỗi xuất hiện của X1 với X1X2 vì nếu X1 xuất hiện bất kì giao tác nào thì X2 cũng luôn xuất hiện. Nhưng vì t(X1) t(X2) không thể loại bỏ X2 vì nó có thể sinh ra tập đóng khác.
3 Nếu t(X1) t(X2) thì t(X1X2) = t(X1) t(X2) = t(X2) t(X1). Trong trường hợp này, chúng ta thay mỗi xuất hiện của X2 với X1X2 vì khi X2 xuất hiện thì X1cũng luôn xuất hiện. X1 cũng có thể sinh ra tập đóng khác nên không thể loại bỏ.
4 Nếu t(X1) t(X2) thì t(X1X2) = t(X1) t(X2) t(X2) t(X1). Trong trường hợp này cả hai tập đều được giữ lại, vì cả hai tập X1, X2 đều sinh ra tập đóng khác.
Hình 2.14 mô tả một cách cụ thể 4 tính chất trên. Chúng ta thấy rằng chỉ có tập định danh tidset là được duy trì sau khi ta kết hợp hai cặp tập mục-tập định danh. Ví dụ: nếu hai tập định danh tidset bằng nhau, một trong hai tập bị tỉa (tính chất 1). Nếu một tập định danh là tập con của tập định danh khác thì tập định danh kết quả bằng với tập định danh nhỏ hơn và loại bỏ tập cha đó (tính chất 2, 3). Cuối cùng, nếu các tập định danh không bằng nhau thì hai tập
này có thể dẫn đến tập đóng.
Hình 2.15 a) CHARM theo thứ tự từ điển b) CHARM theo chiều tăng của độ hỗ trợ
Ví dụ: xem hình 2.15a, ban đầu có 5 nhánh tương ứng với 5 mục và tập định danh tidset của chúng (ở đây minSup = 3, các nhánh được sắp xếp theo thứ tự từ điển của các mức). Để sinh ra các con của mục A (hoặc cặp A1345) chúng ta cần kết hợp nó với tất cả các nút cùng mức ở sau nó (bên phải nó). Khi kết hợp hai cặp X1t(X1) và X2t(X2), cặp nhận được là (X1X2)t(X1) t(X2). Nói cách khác chúng ta cần lấy giao hai tập định danh tidset tương ứng mỗi khi ta kết hợp hai hay nhiều tập mục.
A1345 AC1345 C123456 D2456 T1356 W12345) ACD45 ACT135 CD2456 CT1356 CW12345 ACW1345 CDT56 ACTW13 5 CDW245 CTW135 {} A1345 D2456 T1356 W12345 C123456 AD45 AT135 DT56 DW245 TW135 AW1345 ACW1345 ATW135 ACTW13 5 CDW245 CTW135 CD2456 CT1356 CW12345 {}
Khi ta kết hợp A với C, ta thấy tính chất 2 thỏa mãn, tức là: t(A)=345
123456 = t(C). Do vậy ta có thể thay mục A bằng AC. Kết hợp A với D sinh ra tập không thường xuyên ACD, bị tỉa đi. Kết hợp với T sinh sinh ra cặp ACT135, thỏa tính chất 4, do vậy không tập nào bị tỉa. Khi chúng ta kết hợp A với W chúng ta thấy t(A) t(W). Theo tính chất 2, ta thấy tất cả sự xuất hiện của A bằng AW. Như vậy AC trở thành ACW và ACT thành ACTW kết thúc quá trình xử lý nhánh có gốc là mục A.
Với nhánh C, khi kết hợp C với D, tính chất 3 thỏa mãn, tức là t(C)
t(D). Điều này có nghĩa là khi D xuất hiện thì C luôn xuất hiện. Do đó D có thể loại bỏ, toàn bộ nhánh D bị tỉa và nút con CD thay thế cho nút D. Hoàn toàn tương tự đối với T và W cả hai nhánh đều bị tỉa và thay thế bởi CT và CW (con của C). Tiếp tục như trên xuống mức sâu tiếp theo, ta xét nút CD. Kết hợp CD với CT ta được tập không thường xuyên CDT, tập CT bị tỉa. Kết hợp CD với CW sinh ra CDW thỏa tính chất 4 nên không tập mục nào bị loại bỏ. Tương tự kết hợp CT với CW được tập mục CTW, vậy nhánh đã được xử lý xong. Cuối cùng loại bỏ tập mục CTW135 vì là tập con của ACTW. Như vậy, ta thấy chỉ cần 10 bước ta xác định được 7 tập mục thường xuyên đóng.
Thuật toán 2.8 tìm các tập mục thường xuyên đóng.
Dữ liệu vào: d, minSup.
Dữ liệu ra: Tập cácmục thường xuyên đóng.
Phương pháp:
CHARM ( IxT, minSup)
(1) Nodes = {Ijt(Ij):Ij I|t(Ij)| minSup }
CHARM-EXTEND (Nodes, C): (3) For each Xit(Xj) in Nodes (4) NewN = and X = Xi
(5) For each Xjt(Xj) in Nodes, with f(j)> f(i)
(6) X = XXj and Y=t(Xi) and
Y=t(Xi) t(Xj)
(7) CHARM-PROPERTY(Nodes, NewN)
(8) If NewN Then CHARM-EXTEND(NewN)
(9) C = C X;
Thủ tục kiểm tra các tính chất: CHARM-PROPERTY(Nodes, NewN)
(10)if (|Y| minSup) Then
(11) if t(Xi) = t(Xj) Then //tính chất 1
(12) Loại bỏ Xj khỏi nodes
(13) Thay Xi bằng X
(14) else if(t(Xi)t(Xj)Then //tính chất 2
(15) Thay Xi bằng X
(16) else if t(Xi)t(Xj) Then//tính
chất 3
(17) Loại bỏ Xj
(18) Thêm XY vào NewN
(19) else if t(Xi)t(Xj) Then//tính chất 4
Thuật toán bắt đầu với tập nút có một mục để kiểm tra tính thường xuyên của các mục và tập định danh của chúng (dòng 1). Hàm CHARM-EXTEND thực hiện những tính toán chính và kết quả trả về là các tập mục thường xuyên đóng C, CHARM-EXTEND phát triển cho mỗi nhánh. Hàm này lấy mỗi cặp tập mục- tập định danh của nút hiện đang xét Xit(Xi) (dòng 3) và tổ hợp với những cặp khác Xjt(Xj) (dòng 5), dòng 6 thực hiện việc tổ hợp. Thủ tục CHARM-PROPERTY kiểm tra độ hỗ trợ và áp dụng 4 tính chất trên để điều chỉnh những nút cho phù hợp và cũng sinh ra nút mới NewN nếu cặp ItemSetTidset mới là thường xuyên.
Nếu tập nút NewN thì ta xử lý đệ quy các nút như đặc tính duyệt theo chiều sâu (dòng 8) dòng 9 thực hiện thêm tập mục X mở rộng của tập Xi vào tập của những tập mục đóng C.
Thứ tự của các tập mục đơn có thể sắp xếp theo thứ tự từ điển hay theo độ hỗ trợ của mỗi mục.
Hình 2.15b thể hiện kết quả của thuật toán CHARM với các tập mục sắp xếp theo độ hỗ trợ của các mục đơn. Thuật toán bắt đầu với tập các nút: {A1345, D2456, T1356, W12345, C123456} trong dòng 1.
Dòng 3: xử lý nhánh với nút gốc A 1345 (Đặt X = A dòng 4); nó sẽ tổ hợp với những nút anh em cùng mức dòng 5, tổ hợp với D được tập mục AD không thường xuyên nên bị tỉa tiếp đến tổ hợp A và T ta có t(A) t(T), nên thêm AT vào NewN, tổ hợp A với W ta được AW, t(A) t(W), như vậy ta thay thế A bằng AW (X=AW) và thay đổi AT trong tập NewN bằng ATW, tổ hợp A và C ta có T(A) T(C) vậy AW trở thành ACW (X=ACW) và ATC trong newN trở thành ACTW. Lúc này tập NewN nên hàm CHARM-
EXTEND được gọi lại nhưng tập NewN chỉ có một phần tử nên nó chỉ thêm phần tử ACTW135 vào tập những tập đóng C.
Nhánh có gốc là mục A đã được xây dựng xong thêm tập mục X=ACW vào C. Những nhánh còn lại được kiểm tra tương tự và kết quả tập C được thể hiện như hình 2.15b.
Độ phức tạp của thuật toán: thời gian tính toán của thuật toán CHARM là O(l.C) với l chiều dài trung bình của tập định danh (tidset), C là tập tất cả các tập mục đóng thường xuyên.
Thuật toán CHARM đã giảm một cách đáng kể các tập mục ứng cử và giảm được chi phí tính toán để tìm các tập mục thường xuyên, tìm tập mục thường xuyên dựa trên cơ sở tập mục đóng.