7. Bố cục luận văn
2.1.2. Chi tiết thuật toán FUP
Bước 1: Tại mỗi lần lặp, độ hỗ trợ của từng itemset trong tập large k-itemset
trong L sẽ được cập nhật dựa vào db để lọc ra những itemset nào là không phổ biến (losers còn gọi là small itemset hay những tập không còn là tập phổ biến trong
DBdb). Ta chỉ cần quét db để tiến hành cập nhật độ hỗ trợ.
từ db cùng với độ độ hỗ trợ. Độ hỗ trợ của các phần tử trong Ck sẽ được cập nhật dựa vào DB để tìm ra tập các tập phổ biến mới.
Bước 3: Tập Ck sẽ được cắt tỉa dựa vào db trước khi dựa vào DB
Bước 4: Kích thướt của CSDL sau khi được cập nhật trong mỗi lần lặp sẽ được
giảm xuống bằng phép cắt tỉa dựa vào các item trong db. Bước 1:
Bổ đề 1: Một 1-itemset X L1 là không phổ biến ( L1) trong CSDL sau khi được cập nhật DBdb nếu và chỉ nếu X.supportUD < s × (D+d)
CM: Dựa vào định nghĩa độ hỗ trợ tối thiểu và định nghĩa large 1-itemset. Bổ đề 2: Một 1-itemset X L1 có thể trở thành phổ biến (winner hay large itemset L1 ) trong CSDL sau khi được cập nhật DBdb nếu và chỉ nếu X.supportd
≥ s×d
CM: Vì X L1 nên X.support < s×D
Nếu X.support < s×d thì X.supportUD = X.supportD + X.supportd < s×(D+d) nên X L1. Vì vậy để X L1 thì X.supportd ≥ s×d
Mô tả chi tiết bước 1:
- Quét db, ∀X ∈ L1, cập nhật X.supportUD, sau khi quét xong db thì ∀X ∈ L1
kiểm tra X.supportUD < s × (D+d) nếu X thỏa thì X là loser và loại X ra khỏi L1
- Trong khi quét db thì có tập C1 dùng để lưu các itemset X T với Tdb và X
L1, sau đó dựa vào bổ đề 2 nếu XC1 và X thỏa X.supportd < s×d thì loại X ra khỏi C1
- Quét DB để cập nhật X.supportUD ∀X ∈ C1, bằng cách kiểm tra độ hỗ trợ các tập phổ biến trong C1 sẽ được tìm thấy. Ta kết hợp các tập phổ biến vừa tìm thấy trong
C1 với tập L1 ta được tập L1
Ví dụ: D = 1000, d = 100, s = 3%, CSDL có 4 items I1, I2, I3, I4
I1, I2 L1 với I1.supportD = 32, I2.supportD = 31. Giả sử I1.supportd = 4,
I2.supportd = 1. Sau khi quét db ta có I1.supportUD = 36 > 1100 × 3%, I2.supportUD = 32 < 1100 × 3% vì vậy I2 là loser và bị loại khỏi L1, thêm I1 vào L1
Giả sử I3, I4 ∉ L1 nhưng xuất hiện trong các giao dịch trong db, nên cả I3 và I4
có thể là những ứng viên tìm ẩn I3, I4 C1, I3.supportd = 6, I4.supportd = 2, vì
I4.supportd < s×d = 3%×100 nên I4 bị loại khỏi C1, giả sử I3.supportD = 28 nên
I3.supportUD = 34 > 1100 × 3% suy ra I3 L1 Bước 2:
Bổ đề 3: Nếu (k-1)-itemset {X1,…, Xk-1} là không phổ biến (loser) tại bước lặp thứ (k-1) (Lk1 nhưng Lk1 ), L một large k-itemset Lk chứa một trong các itemset {X1,…, Xk-1} thì không thể là phổ biến (winner) trong bước lặp thứ k
CM: Dựa vào tính chất tất cả tập con của một tập phổ biến là tập phổ biến. Bổ đề 4: k-itemset {X1,…, Xk} Lk nhưng Lk nếu và chỉ nếu {X1,…,Xk}.supportUD < s × (D + d)
CM: Dựa trên định nghĩa độ hỗ trợ tối thiểu và tập phổ biến.
Bổ đề 5: k-itemset {X1,…, Xk} Lk nhưng có thể Lk nếu và chỉ nếu {X1,…,Xk}.supportd ≥ s × d
CM: Tương tự bổ đề 2 Mô tả chi tiết bước 2:
- Sau khi tiến hành bước 1 ta có tập L1 L1 , X L2 nếu Y X và Y
(L1 L1) thì loại X ra khỏi tập L2 (theo bổ đề 3), sau đó tiến hành quét db và cập nhật độ hỗ trợ cho các phần tử còn lại trong L2, dựa vào độ hỗ trợ ta sẽ tìm ra được tập phổ biến thuộc L2
- Khởi tạo C2 bằng cách áp dụng hàm appriori-gen [2] trên L1. C2 sẽ không chứa các phần tử đã chứa trong L2. Quét db để tính độ hỗ trợ của các phần tử trong C2, ∀X ∈ C2 nếu X.supportd < s×d thì loại X ra khỏi C2
- Quét DB để cập nhật độ hỗ trợ của các phần tử còn lại trong C2, ∀X ∈ C2 nếu
X.supportUD < s × (D+d) thì loại X là tập phổ biến, ngược lại thì loại X ra khỏi C2.
2 2 2
L L C
Ví dụ: D = 1000, d = 100, s = 3%, CSDL có 4 items I1, I2, I3, I4
L1 = {I1, I2, I3}, L2 = {I1I2, I2I3} và I1I2.supportD = 50, I2I3.supportD = 31, giả sử
1
L = {I1, I2, I4}. Trong lần lặp thứ 2 ta sẽ tìm L2
Ta có: I3 L1 L1 nên ta loại I2I3 ra khỏi L2. Tiến hành quét db, giả sử I1I2.supportd = 3 nên I1I2.supportUD = (3 + 50) > 3% × 1100 nên I1I2 L2
Áp dụng hàm appriori-gen trên L1 ta được tập C2 = {I1I2, I1I4, I2I4} vì I1I2 L2
nên C2 = {I1I4, I2I4}. Quét db ta có: I1I4.supportd = 5, I2I4.supportd = 2. Vì I2I4.supportd
= 2 < 3% ×100 nên loại I2I4 ra khỏi C2. Sau đó ta tiến hành quét DB, giả sử I1I4.supportD = 30 nên I1I4.supportUD = 5+ 30 > 3% × 1100 nên I1I4 được thêm vào L2