Các ký hiệu

Một phần của tài liệu 28042_1712202001920798LVNguyenHoangNhat (Trang 60 - 69)

7. Bố cục luận văn

2.4.1.Các ký hiệu

D : CSDL gốc

T : tập các giao dịch cần thêm vào

U : CSDL sau khi thêm giao dịch mới vào (D ∪ T)

d : số lượng các giao dịch trong D

t : số lượng các giao dịch trong T

I : một item

SD(I) : số lần xuất hiện của I trong D

ST(I) : số lần xuất hiện của I trong T

SU(I) : số lần xuất hiện của I trong U

Sl : ngưỡng lower support đối với một pre-large itemset

Su : ngưỡng upper support đối với một large itemset, Su > Sl

Pre_ItemsD : tập pre-large item trong D Pre_ItemsT : tập pre-large item trong T Lar_ItemsT : tập large item trong T

Insert_Items : tập hợp các item trong T phải xử lý lại để cập nhật cây FUFP-tree. Branch_Items : tập hợp các item trong D phải xử lý lại để cập nhật cây FUFP-

tree.

Rescan_Items : tập hợp các item trong D cần phải xử lý lại để xác định item nào

là large.

2.4.2. Thuật toán

Giống như thuật toán FUP [9] biến c dùng để lưu lại số lượng giao dịch thêm vào kể từ lần gần nhất quét lại CSDL D. Khởi tạo ban đầu c = 0.

INPUT: d, c, Su, Sl, t, bảng Header_Table chứa đựng số lượng các tập phổ biến cùng tần số xuất hiện của chúng sắp xếp theo thứ tự giảm dần, tương ứng với cây FUFP-tree của D.

OUTPUT: Một cây FUFP-tree của CSDL U.

Bước 1: Tính f dựa vào công thức (Hong et al., 2001 [10])

( ) 1 u l u S S d f S         

Bước 2: Quét T để tìm ra tập tất cả các 1-item và tần số xuất hiện của chúng. Bước 3: Chia tập 1-item vừa tìm được ở bước 2 ra 3 phần tuỳ thuộc vào những

item đó là large, pre-large hay small trong D.

Bước 4: For each I từ Bước 3 mà là large trong D do (Trường hợp 1, 2, 3) Bước 4-1: Tính SU(I) = SD(I) + ST(I)

Bước 4-2: If SU(I) / (d + c + t) ≥ Su then

Cập nhật tần số xuất hiện của I trong Header_Table. Thêm I vào tập Insert_Items (được xử lý trong bước 10) Else if Su ≥ SU(I) / (d + c + t) ≥ Sl then

Loại bỏ I khỏi bảng Header_Table, các nút con và nút cha của

I sẽ liên kết lại với nhau, SD(I) = SU(I) thêm I vào bảng pre-large table.

Else I là small trong U, loại I khỏi bảng Header_Table, các nút con và nút cha của I sẽ liên kết lại với nhau.

Bước 5: For each I từ Bước 3 là pre-large trong D do (Trường hợp 4, 5, 6) Bước 5-1: Tính SU(I) = SD(I) + ST(I) (adsbygoogle = window.adsbygoogle || []).push({});

Bước 5-2: If SU(I)/(d + c + t) ≥ Su then I là large trong U.

Thêm I vào tập Insert_Items và Branch_Items (được xử lý trong bước 8)

Else if Su ≥ SU(I)/(d + c + t) ≥ Sl then

SD(I) = SU(I), thêm I vào bảng pre-large table. Else Loại I khỏi bảng pre-large table.

Bước 6: For each I trong bước 3 là small trong D, nhưng là large hoặc pre- large trong T do (Trường hợp 7, 8)

Thêm I vào tập Rescan_Items (được xử lý trong bước 7)

Bước 7: If (t + c ≤ f) or Rescan_Items = null then nothing

Else {

For each item I  Rescan_Items do {

Bước 7-1: Quét lại D để tính SD(I)

Bước 7-2: Tính SU(I) = SD(I) + ST(I)

Bước 7-3: If SU(I) / (d + c + t) ≥ Su then

I là large trong U

Thêm I vào tập Insert_Items và Branch_Items Else if Su ≥ SU(I) / (d + c + t) ≥ Sl then

SD(I) = SU(I), thêm I vào bảng pre-large table. Else Loại I khỏi bảng pre-large table.

} }

Bước 8: Thêm các item trong Branch_Items vào cuối bảng Header_Table

tuỳ thuộc vào thứ tự sắp xếp giảm dần của tần số xuất hiện.

Bước 9: For each t  D tương ứng với item I trong Branch_Items do

If I không tồn tại trong nhánh nào của cây FUFP-tree ứng với t then thêm

I vào cuối của nhánh tương ứng với giao dịch t và thiết lập count = 1

Else tăng 1 vào count của I

Bước 10: For each tT tương ứng với item I trong Insert_Items do

If I không tồn tại trong nhánh nào của cây FUFP-tree ứng với t then thêm

I vào cuối của nhánh tương ứng với giao dịch t và thiết lập count = 1

Else tăng 1 vào count của I

Bước 11: If (t + c > f) then

d = d + t + c và c = 0 Else c = t + c

2.4.3. Ví dụ minh hoạ

Bảng 2.15. CSDL ban đầu [18] (adsbygoogle = window.adsbygoogle || []).push({});

Transaction No. Items

1 a, b, c, d, e, g, h 2 a, b, f, g 3 b, d, e, f, g 4 a, b, f, h 5 a, b, f, i 6 a, c, d, e, g, h 7 a, b, h, i 8 b, c, d, f, g 9 a, b, f 10 a, b, g, h

Giả sử ngưỡng Sl = 30%, Su = 50%, ta có tập large 1-itemset là {a, b, f, g, h}.

Bảng Header_Table gồm các phần tử trong tập large 1-itemset. Cây FUFP-tree được xây dựng như Hình 2.8 và tập pre-large 1-itemset như Bảng 2.16. Tập giao dịch mới cần được thêm vào thể hiện trên Bảng 2.17

Bảng 2.16. Tập pre-large 1-itemset của D [18]

Items Count

c 3

d 4

e 3

Bảng 2.17. 3 giao dịch mới cần thêm vào [18]

Transaction No. Items

1 a, b, d, f, i

2 a, b, d, i

Hình 2.8. Cây FUFP-Tree và Header_Table được xây dựng [18] Bước 1: Tính ( ) (0.5 0.3) 10 4 1 1 0.5 u l u S S d f S                  

Bước 2: Quét T để tìm ra tập 1-item và độ đếm hỗ trợ của từng item. Kết quả

thể hiện trên Bảng 2.18 Bảng 2.18. Tập hợp các item trong T [18] Items Frequency a 3 b 2 c 1 d 3 e 0 f 1 g 0 h 1 i 3

Bước 3: Phân chia tập các item trong T ra làm 3 phần, phụ thuộc vào các item

Bảng 2.19. Kết quả phân chia tập item trong T thành 3 phần [18] Originally large 1-itemsets Originally pre-large 1-itemsets Originally small 1- itemsets Items Count Items Count Items Count

a 3 c 1 i 3

b 2 d 3

f 1 e 0

g 0

h 1

Bước 4: Xét từng phần tử trong tập large item trong D. Ta thấy SU(a) = SD(a) + ST(a) = 8 + 3 = 11. Vì support(a) = 11 / (10 + 0 + 3)  0.5 nên a vẫn là large trong

U. Cập nhật giá trị frequency của a trong bảng Header_Table và thêm a vào tập Insert_Items. Item b cũng được xử lý như a. Tương tự như vậy support của g và h

trên U đều nhỏ hơn 0.5 nhưng lớn hơn 0.3, nên g và h là pre-large trong U, ta sẽ loại

g và h ra khỏi bảng Header_Table và cây FUFP-tree. Tính toán tương tự cho f. Sau

bước 4 ta có kết quả như sau Insert_Items = {a, b, f} và cây FUFP-tree như Hình 2.9

Hình 2.10. Cây FUFP-tree sau khi loại bỏ h [18]

Hình 2.11. Cây FUFP-tree sau bước 4 [18] (adsbygoogle = window.adsbygoogle || []).push({});

Bước 5: Xét từng phần tử trong tập pre-large item trong D. Ta thấy SU(d) = SD(d) + ST(d) = 4 + 3 = 7. Vì support(d) = 7 / (10 + 0 + 3)  0.5 nên d vẫn là large trong U. Thêm d vào tập Insert_Items và Branch_Items. Tương tự như vậy support của c trong

U là 0.4 nhỏ hơn 0.5, nhưng lớn hơn 0.3, nên c là pre-large trong U và count(c) = 4,

tương tự cho e, ta có support(e) < 0.3 nên e là small trong U, ta loại e ra khỏi bảng

pre-large table. Sau bước 5 ta có Insert_Items = {a, b, f, d}, Branch_Items = {d} Bước 6: Bởi vì item i là small trong D nhưng là large trong T, ta sẽ thêm i vào

tập Rescan_Items (sẽ được xử lý trong bước 7). Sau bước 6 thì Rescan_Items = {i}.

Bước 7: Vì t + c = 3 + 0 < f (= 4) nên ta khôn cần quét lại D

Bước 8: Những item trong Branch_Items sẽ được sắp xếp theo thứ tự giảm dần

của tần số xuất hiện, và được thêm vào cuối bảng Header_Table. Sau bước 8 bảng

Hình 2.12. Header_Table sau khi thêm d vào [18]

Bước 9: Cây FUFP-tree sẽ được cập nhật dựa vào những giao dịch trong D

tương ứng mà có chứa các item trong tập Branch_Items. Trong ví dụ này thì Branch_Items = {d}. Các giao dịch tương ứng trong D có chứa d được thể hiện trong

Bảng 2.23 và sau bước 9 ta sẽ có cây FUFP-tree như Hình 2.23

Bảng 2.20. Các giao dịch trong D có chứa d [18]

Transaction No. Items Branches

1 a, b, c, d, e, g, h b, a, d

3 b, d, e, f, g b, f, d

6 a, c, d, e, g, h a, d

8 b, c, d, f, g b, f, d

Hình 2.14. Cây FUFP-tree sau bước 9 [18]

Bước 10: Cây FUFP-tree được cập nhật dựa vào những giao dịch trong T tương

ứng mà có chứa các item trong tập Insert_Items. Trong ví dụ này thì Insert_Items = {a, b, f, d}. Các giao dịch tương ứng trong T có bất kỳ phần tử nào trong tập Insert_Items được thể hiện trong Bảng 2.21 và sau bước 10 ta sẽ có cây FUFP-tree

như Hình 2.16

Bảng 2.21. Giao dịch trong T có chứa phần tử trong Insert_Items [18]

Transaction No. Items Branches

1 a, b, d, f, i b, a, f, d

2 a, b, d, i b, a, d

3 a, c, d, h, i a, d

Hình 2.16. Cây FUFP-tree sau bước 10 [18]

Bước 11: Vì t + c = 3 + 0 < f (= 4) nên c = t + c = 3 + 0 = 3 (adsbygoogle = window.adsbygoogle || []).push({});

Sau bước 11 thì cây FUFP-tree đã được cập nhật lại hoàn toàn, ở đây f – c = 1

nghĩa là ta có thể thêm một giao dịch nữa vào D mà khi cập nhật cây FUFP-tree ta không cần quét lại D. Từ cây FUFP-tree này ta sẽ áp dụng thuật toán FP-Growth [9] để tìm tập phổ biến.

Một phần của tài liệu 28042_1712202001920798LVNguyenHoangNhat (Trang 60 - 69)