(3)Khai thác đệ qui cây FP-Tree điều kiện phát triển mẫu phổ biến cho đến khi cây FP-Tree điều kiện chỉ chứa 1 đường dẫn duy nhất tạo ra tất cả các tổ hợp của mẫu phổ biến:
Xây dựng tập phổ biến dựa trên nguyên lý mở rộng mẫu phổ biến và tính chất mở rộng mẫu:
Giả sử là tập phổ biến trong CSDL, B là cơ sở mẫu điều kiện của ; là một hạng mụcset trong B. Khi đó là tập phổ biến trong CSDL khi và chỉ khi là phổ biến trong B.
Ví dụ 2.13:
“abcdef” là mẫu phổ biến khi và chỉ khi “abcde” là mẫu phổ biến và “f” là phổ biến trong tập các giao dịch chứa “abcde”
Trường hợp cây chỉ có đường dẫn đơn (Đường dẫn đơn là đường dẫn chỉ có 01 đường đi duy nhất từ nút gốc đến nút lá)
Giả sử cây FP-Tree là cây T có một đường dẫn đơn P; tập phổ biến cuối cùng của T sinh ra bằng cách liệt kê tất cả các tổ hợp của đường dẫn con thuộc P. Ví dụ 2.14:
Cây FP-Tree điều kiện cho p là cây có đường dẫn đơn
Hạng
mục Độ phổ biến
c 3
Hình 2.11 Tất cả mẫu phổ biến liên quan đến p là: p:3 và cp:3 {} {}
24 Cây FP-Tree điều kiện cho m là cây có đường dẫn đơn:
Hạng mục Độ phổ biến f 3 c 3 a 3
Hình 2.12 Tất cả mẫu phổ biến liên quan đến m là: m:3, fm:3, cm:3, am:3, fcm3:, fam:3, cam:3, fcam:3
Trường hợp cây không chỉ có đường dẫn đơn: Xem xét các cây FP-Tree chỉ có 01 đường dẫn đơn và các cây FP-Tree gồm nhiều nhánh một cách riêng biệt.
Việc phân chia cây nhiều nhánh thành cây có một đường dẫn đơn thực hiện đệ quy gọi FP_Growth(FP-Tree, Null).
Nhận xét thuật toán FP-Growth:
Ưu điểm:
Hiệu quả hơn so với Apriori.
Phân chia và kiểm soát quá trình xử lý.
Sử dụng cây FP-Tree để biểu diễn các mẫu phổ biến thì dữ liệu giảm rất đáng kể so với cách biểu diễn trong CSDL.
Nhược điểm:
Không thể xây dựng cây FP-Tree trong bộ nhớ chính khi CSDL là lớn.
Mất nhiều thời gian và gặp trở ngại khi cập nhật lại cây khi cây tăng trưởng về mặt kích thước.
Đánh giá:
Điểm nổi bật của thuật toán này là chỉ quét cơ sở dữ liệu hai lần, và không cần phát sinh tập ứng viên. Chính điều này làm cho FP-Growth nhanh hơn Apriori. Trong nghiên cứu của mình, Han đã chứng minh rằng phương pháp của ông nhanh hơn so với các phương pháp tuần tự khác trong việc khai thác tập phổ biến như các thuật toán Apriori,…
{}
f:3 c:3 a:3
25
2.3.3. Thuật toán CLOSET
Thuật toán CLOSET [6] là mở rộng của thuật toán FP-growth [4], trong đó xây dựng một cây FP-Tree và đệ quy có điều kiện cây FP-Tree từ dưới lên để khai thác tập đóng:
1. Cho Y là tập các mục trong f_list sao cho chúng xuất hiện trong mọi giao tác của DB, thêm XY vào FCI nếu nó không phải là một tập con của FCI với cùng độ phổ biến;
2. Xây dựng FP-Tree cho DB, các mục đã được trích xuất nên được loại trừ 3. Trích xuất các tập đóng phổ biến nếu có thể
4. Xây dựng cơ sở dữ liệu có điều kiện cho tất cả các hạng mục còn lại trong f_list, đồng thời tính toán độ phổ biến cho mục cục bộ của các cơ sở dữ liệu có điều kiện này.
5. Đối với mỗi mục còn lại trong f_list, bắt đầu từ mục cuối cùng, gọi đệ quy CLOSET (iX; DB|i; f_listi; FCI) nếu iX không phải là một tập con của bất kỳ tập phổ biến đóng với cùng độ phổ biến, khi đó DB|i ký hiệu i-cond DB và f_listi
là mục phổ biến tương ứng.
Hình 2.13 Thuật toán CLOSET
Thuật toán CLOSET
Input: CSDL giao tác TDB và minsup; Output: FCI;
Method:
1. Khởi tạo: FCI
2. Tính độ phổ biến: Duyệt CSDL giao tác gán vào f list; 3. CLOSET(; TDB; f_list; FCI).
Subroutine CLOSET(X; DB; f_list; FCI) Tham số:
X: các tập phổ biến nếu DB là X-cond DB
nếu DB là TDB;
DB: transaction database of conditional database;//cơ sở dữ liệu có điều kiện f_list: danh sách các hạng mục phổ biến của DB;
26 Ví dụ 2.15: Cho một CSDL giao tác như sau:
Mã giao tác Nội dung giao tác
1 a, c, d, e, f 2 a, b, e 3 c, e, f 4 a, c, d, f 5 c, e, f Bảng 2.12 CSDL giao tác gồm 5 giao tác và 5 hạng mục
Minh họa thuật toán CLOSET
Hình 2.14 Thuật toán CLOSET khai thác tập phổ biến đóng
TDB cefad ea cef cfad cef d-cond DB (d:2) cefa cfa e-cond DB (e:4) c:3 ea-cond DB (ea:2) c a-cond DB (a:3) cef e cf f-cond DB (f:4) ce:3 c
f_list:{c:4, e:4, f:4, a:3, d:2}
Output F.C.I: cfad:2
Output F.C.I: a:3
Output F.C.I: ae:2
Output F.C.I: cf:4, cef:3
27
Diễn giải thuật toán:
Trong CSDL bảng 2.12 với minsup = 2, sử dụng phương pháp chia để trị trong khai thác các tập phổ biến đóng như trong hình 2.14
1. Tìm hàng mục phổ biến: Duyệt CSDL để tìm tập hợp các hạng mục phổ biến và lập một danh sách hạng mục phổ biến, được gọi là f_list, f_list = {c: 4; e: 4; f: 4; a: 3; d: 2}, trong đó các mục được sắp xếp giảm dần theo độ phổ biến như trong Hình 2.14
2. Kỹ thuật chia để trị: Tất cả các tập đóng phổ biến có thể được chia thành 5 tập con không chồng lên nhau dựa trên f_list:
- Các tập con chứa mục d,
- Các tập con chứa mục a và không chứa mục d, - Các tập con chứa mục f và không chứa mục a và d, - Các tập con chứa mục e và không chứa mục f, a và d - Các tập con chỉ chứa mục c
3. Quá trình tìm các tập con của các tập đóng phổ biến: Các tập con của các tập đóng phổ biến có thể được khai thác bằng cách xây dựng các cơ sở dữ liệu tương ứng và điều kiện đệ quy của chúng.
(a) Tìm các tập đóng phổ biến có chứa d. Chỉ giao tác có chứa d là cần thiết. Cơ sở dữ liệu có điều kiện, được ký hiệu là TDB|d, chứa tất cả các giao tác có d, đó là {cefa, cfa}. Chú ý hạng mục bị loại bỏ trong mỗi giao tác vì nó xuất hiện trong mọi giao tác của cơ sở dữ liệu có điều kiện.
Độ phổ biến của d là 2. Các mục c, f và a xuất hiện hai lần tương ứng trong TDB|d. Có nghĩa là mọi giao tác có chứa d cũng chứa c, f và a. Hơn nữa, e là không phổ biến vì nó chỉ xuất hiện một lần trong TDB|d. Do đó, cfad: 2 là tập phổ biến đóng. Quá trình khai thác của TDB|d kết thúc.
(b) Tìm các tập phổ biến đóng có chứa a không có d. Tương tự, cơ sở dữ liệu có điều kiện, TDB|a = {cef; e; cf}. Mục d trong các giao tác như vậy được bỏ qua, vì các tập phổ biến đóng có chứa d đã được tìm thấy trong TDB|d. Vì sup (a) = 3 và không có bất kỳ mục nào xuất hiện trong mọi giao tác của TDB|a, như vậy a: 3 là một mục đóng.
28 Để tìm các mục phổ biến đóng còn lại có chứa a nhưng không d, chúng ta cần phải tiếp tục khai thác TDB|a. Đầu tiên, tập các mục phổ biến trong TDB|a, f_lista = {c: 2; e: 2; f: 2}3. Theo f_lista, các tập phổ biến đóng có chứa a nhưng không d có thể được phân chia thêm thành ba tập con:
(1) Tập con có chứa af nhưng không d,
(2) Tập con có chứa ae nhưng không chứa d hoặc f, (3) Tập con có chứa ac nhưng d, e hoặc f.
Chúng có thể được khai thác bằng cách xây dựng cơ sở dữ liệu có điều kiện đệ quy. Độ phổ biến fa tương đương với cfad, do đó fa và a cũng là một hạng mục phổ biến đóng được tìm thấy. Điều đó có nghĩa là mọi giao tác có chứa fa cũng phải chứa cfad. Do đó, không có mục phổ biến đóng có chứa fa nhưng không có d. Tương tự như vậy, không có mục phổ biến đóng chứa ca không d, e hoặc f, vì ca là một tập con của cfad và sup (ca) = sup (cfad). Cơ sở dữ liệu có điều kiện ea, TDB|e a = {c}, không thể tạo ra bất kỳ mục phổ biến nào. Vì vậy, ea: 2 là tập phổ biến đóng.
(c) Tìm các tập phổ biến đóng chứa f nhưng không có d. TDB|f = {ce: 3; c}, c xuất hiện trong mọi giao tác f-cond, và cf không phải là tập hợp con của bất kỳ tập phổ biến đóng nào có cùng sự phổ biến, do đó cf: 4 là một tập phổ biến đóng. Độ phổ biến của fc bằng với f và c, f và c luôn xuất hiện cùng nhau, do đó không có các tập phổ biến đóng chứa c nhưng không có f. Ngoài ra, cef: 3 không phải là tập hợp con của bất kỳ mục nào được tìm thấy, do đó, nó là một tập phổ biến đóng.
(d) Tìm các phổ biến đóng chứa e nhưng không có f, a và d. Tương tự, TDB|e = {c: 3}. Nhưng ce không phải là một tập đóng vì nó là một tập con của cef và sup(ce) = sup(cef). Tuy nhiên, e: 4 là một tập phổ biến đóng.
(e) Tìm các tập phổ biến đóng chỉ chứa c. Chúng ta biết rằng không có các tập phổ biến đóng chỉ có chứa c nhưng không có f, do đó không có các tập phổ biến đóng chỉ chứa c.
4. Tóm lại, tập hợp các tập phổ biến đóng được tìm thấy là {acdf: 2, a: 3, ae: 2, cf: 4, cef: 3, e: 4}
Đánh giá: Mặc dù CLOSET sử dụng một số kỹ thuật tối ưu hóa để nâng cao hiệu quả
hoạt động khai thác, hiệu quả của nó vẫn chưa cao trong bộ dữ liệu thưa thớt hoặc khi ngưỡng phổ biến thấp.
29
2.3.4. Thuật toán BitTableFI
Thuật toán BitTableFI [10] sử dụng kỹ thuật nén tập dữ liệu dựa trên cấu trúc BitTable. Theo cách nén này, dữ liệu được bố trí dưới dạng dãy các bit, mỗi một tập mục sẽ chiếm |T| bit. Vì vậy, mỗi tập mục sẽ chiếm |T|/8 + 1 byte. Khi tạo ra một tập mục mới XY từ hai tập mục X và Y, Bitlist của XY sẽ được tính dựa trên Bitlist của các tập mục có trong XY bằng cách lấy phần giao giữa các byte có trong các Bitlist. Do lực lượng của hai vectơ bit là bằng nhau nên kết quả sẽ cho ra một vectơ bit (Bitlist) có chiều dài là |T|/8 + 1 byte. Thuật toán khai thác tập phổ biến theo cấu trúc này được các tác giả tiếp cận dựa vào nguyên lý Apriori [3]. Điểm khác biệt chính là cách tính độ phổ biến: thuật toán Apriori tính độ phổ biến bằng cách quét lại CSDL, còn BitTableFI chỉ cần tính phần giao trên các vectơ bit. Độ phổ biến của hạng mụcset kết quả có thể được tính nhanh dựa vào số bit 1 có trong vectơ bit. Thuật toán Index- BitTableFI được nhóm tác giả Wei-Song đề xuất để cải tiến BitTableFI. Các tác giả dựa vào khái niệm subsume để gộp các tập mục. Cách gộp như sau: đầu tiên, sắp xếp các tập mục tăng theo độ phổ biến, xét mỗi tập mục i với các tập mục đứng sau nó (theo thứ tự đã sắp xếp), nếu Bitlist i là con của Bitlist j thì j thuộc về tập subsume của i. Việc tạo ra subsume và khai thác tập phổ biến dựa trên subsume cải tiến đáng kể thời gian khai thác tập phổ biến.
2.3.5. Thuật toán PIETM
Một thuật toán khai thác tập phổ biến dựa trên nguyên lý Bao gồm - Loại trừ và ánh xạ giao tác. Kiến trúc cơ bản của thuật toán PIETM [16] tuân theo chiến lược khai thác của Apriori [3]. Không quét cơ sở dữ liệu để đếm độ phổ biến của các tập mục, PIETM xây dựng một cấu trúc cây, lưu đầy đủ thông tin cho việc khai thác các tập phổ biến. Nguyên tắc bao gồm – Loại trừ được sử dụng để tích hợp cấu trúc cây với chiến lược từ dưới lên. Mặc dù PIETM kết hợp chiến lược khai thác của Apriori và cấu trúc cây FP-Growth [4], PIETM đã loại bỏ điểm yếu của hai thuật toán bằng cách kết hợp các tính năng chính của Apriori, FP-Growth và PIETM như hình
30
Thuật toán PIETM Input:
Output:
1: Tree=Build_Tree(DB, minsup) 2: mapTransaction_Intervals(Tree) 3: for (k=2; Ck!=0; k++) do
4: Generate candidate k-itemsets into Ck by joining Fk-1* Fk-1 using Apriori 5: for each itemset ck Ck do
6: Sup(Union(ck)=Union_Intervals(ck)
7: Gather the sizes of all ck’s sub-intersection terms 8: Compute sup(ck) using (1)
9: if sup(ck)>=minsup then
10: Fk=Fkck
11: end 12: F=FFk 13.end
Hình 2.15 Thuật toán Apriori, FP-Growth và PIETM
31
Procedure Union_Intervals Input:
Output:
1: Let A, B be the two itemsets in Fk-1 from which ck is generated 2: Union all the intervals in A.L and B.L as L(Union(ck))
3: Merge these intervals if they are mergeable (i.e., if the intervlas are contiguous)
4: Return Num(L(Union(ck)))
Hình 2.17 Hàm Union_Intervals
Ví dụ 2.16: Cho một CSDL giao tác gồm 8 giáo tác 17 hạng mục
Mã giao tác Nội dung Nội dung sắp xếp với
minsup =2 1 a, b, c, e a, b, c 2 a, c, f, g a, c 3 b, d, h b, d 4 a, c, i, j, k a, c 5 a, b, l a, b 6 a, c, m, n a, c 7 b, c, p b, c 8 a, b, c, d, q, r a, b, c, d Bảng 2.13 CSDL giao tác gồm 8 giáo tác và 17 hạng mục
32 Bước 1: Xây dựng cây FP-Tree
Hình 2.18 Ví dụ xây dựng cây FP-Tree và các khoảng giao tác
Cho X biểu thị một nút trong cây giao tác và y biểu thị số lượng giao tác trong đó có xuất hiện X. Một khoảng [s, e] được liên kết với X. Trong [s, e], s chỉ ra số giao tác (id) bắt đầu được gắn nhãn và e cho biết (id) kết thúc cũng được gắn nhãn, trong đó y = (e - s + 1). Giả sử rằng X có k nút con, và mỗi nút con có giao tác yi, trong đó 1 ≤ i ≤ k. Khoảng K trong con của X được liên kết với [s1, e1], [s2, e2], ..., [sk, ek]. Mỗi khoảng giao tác được xây dựng theo bốn trường hợp sau:
s1 = s (2)
e1 = s1 + y1- 1 (3) si = ei - 1 + 1, for i = 2,3,...k (4) ei = si + yi - 1, for i = 2,3,...,k (5)
Ví dụ, trong hình 2.18, nút gốc có hai con. Ban đầu, giao tác (id) bắt đầu được gắn nhãn s là 1 trong thư mục gốc.
Đối với nút a, s1 = 1, e1 = 1 + 6 - 1 = 6. Do đó a có khoảng [s1-e1]=[1-6] Root a: 6 [1-6] b: 2 [7-8] b: 3 [1-3] [4-6] c: 3 c: 2 [1-2] d: 1 [1-1] c: 1 [7-7] d: 1 [8-8]
33 Đối với nút b, s2 = e1 + 1 = 7, e2 = s2 + 2 - 1 = 8. b có khoảng [s2-e2]=[7-8] Tương tự, đối với nút mức 1
Nút b là con của a, khoảng b, s1 = 1, e1 = 1 + 3 - 1 = 3, là [1-3].
Nút c là con của a, khoảng của c, s2 = e1 + 1 = 4, e2 = s2 + 3 – 1 = 6, là [4-6]. Nút c là con của b, khoảng của c, s3 = e2 + 1 = 7, e3 = s3 + 1 – 1 = 7, là [7-7]. Nút d là con của b, khoảng của d, s4 = e3 + 1 = 8, e4 = s3 + 1 – 1 = 8, là [8-8]. Tương tự, đối với nút mức 2
Nút c là con b, khoảng c, s1 = 1, e1 = 1 + 2 - 1 = 2, là [1-2]. Tương tự, đối với nút mức 3
Nút d là con c, khoảng d, s1 = 1, e1 = 1 + 1 - 1 = 2, là [1-1]. Hạng mục Khoảng giao tác a [1-6] b [1-3],[7-8] c [1-2],[4-6],[7-7] d [1-1],[8-8]
Bảng 2.14 Danh sách các khoảng giao tác
Một danh sách khoảng giao tác cho mục n có thể được tạo bằng cách thu thập tất cả các khoảng liên kết với mục n trong cây giao tác. Bảng 2.13 cho thấy danh sách khoảng giao tác trong hình 2.18.
Bước 2: Đếm các hạng mục với nguyên lý Bao gồm-Loại trừ
Lập danh sách khoảng giao tác của Union(ck) bằng cách sáp nhập các danh sách khoảng giao tác. Quá trình kết hợp các danh sách khoảng giao tác như sau: L(Z) là danh sách được xây dựng sau khi hợp nhất các danh sách khoảng giao tác của hai tập X và Y, trong đó X = Union (a1,a2 ... ak-2,ak-1), Y = ak và Z = Union (a1,a2 ... ak-2,ak-1,