2.4.1. Đặt vấn đề
Một hệ thống siêu thị có bán n mặt hàng I = {i1, i2, …in}, do yêu cầu chuyên biệt hóa các sản phẩm của mỗi cửa hàng (và cũng tránh việc lƣu trữ quá tải cho một máy), siêu thị muốn lƣu trữ các giao dịch mua hàng của khách hàng tại k máy tính. Mỗi máy tính chịu trách nhiệm lƣu trữ một tập các mặt hàng phân biệt có trong các giao dịch. Có thể mô hình hóa nhƣ sau: Cơ sở dữ liệu D đƣợc chia thành k mảnh (mỗi mảnh nằm trên một máy) {D1, D2, …, Dk}, trong đó Dj chứa tập các mặt hàng (item) Ij = { v j j j i i i , ,..., 2
1 } (v là số lƣợng mặt hằng đƣợc lƣu trữ tại Dj), các giao dịch trong Dj chỉ chứa các mặt hàng có trong Ij, với
Ii Ij=, ij và k j j I 1 = I.
Vấn đề đặt ra là làm thế nào tận dụng các máy tram (Slave) để khai thác hiệu quả tập phổ biến trên cơ sở dữ liệu D = D1 D2 … Dk?
Tid Items 1 A, B, D, E, F, G 2 B, C, E, F 3 A, B, E, F, G 4 A, B, C, E, F, H 5 A, B, C, D, E, G 6 B, C, D, G, H
Giả sử cơ sở dữ liệu trên đƣợc chia làm 2 mảnh với I1 = {A, B, C, D} và I2 = {E, F, G, H}.Ta có dữ liệu tại 2 mảnh nhƣ sau:
Mảnh 1 (Slave 1) Mảnh 2 (Slave 2)
Tid Items Tid Items 1 A, B, D 1 E, F, G 2 B, C 2 E, F 3 A, B 3 E, F, G 4 A, B, C 4 E, F, H 5 A, B, C 5 E, G 6 B, C, D 6 G, H Bảng 2.14 CSDL phân tán từ bảng 2.13 2.4.2. Mô hình khai thác
Trong mô hình này, giữa Slave và Master có sự trao đổi thông tin 2 chiều. Master sẽ gửi cho từng Slave thông tin về CSDL cần khai thác và minSup (ngƣỡng độ phổ biến tối thiểu). Từng Slave sẽ khai thác độc lập các tập phổ biến có trong cơ sở dữ liệu cục bộ và gửi kết quả này về Master. Bên cạnh đó, các mục dữ liệu (item) có độ phổ biến thỏa minSup cũng sẽ đƣợc gửi về Master cùng với Tidset (tập định danh các giao dịch có chứa item). Master sẽ dựa vào các thông tin này để khai thác các tập phổ biến còn lại (chƣa đƣợc khai thác từ các Slave).
Master Site L oc at ion N TCP/IP TCP/IP L oc ati on 3
Hình 2.11 Mô hình tổng quát khai thác trên CSDL phân tán ngang
Mô hình chi tiết về trao đổi thông tin giữa Master và Slave :
Hình 2.12 Trao đổi thông tin và khai thác tập phổ biến giữa Master và Slave
Phía Master: Đầu tiên, Master sẽ gửi yêu cầu khai thác đến tất cả các Slave (tên CSDL, minSup) và chờ nhận thông tin từ Slave (danh sách các item thỏa minSup cùng với Tidset của chúng). Sau khi đã nhận đủ các thông tin từ Slave, Master sẽ gọi thuật toán PEclat (đƣợc trình bày trong phần 2.4.3).
Phía Slave: Khi nhận đƣợc thông tin từ Master, Slave sẽ đọc CSDL cục bộ để lọc ra các item có độ phổ biến thỏa minSup cùng với danh sách các Tid của chúng để gửi về Master. Đồng thời, trên từng Slave sẽ khai thác tập phổ biến từ CSDL cục bộ, danh sách các tập phổ biến sẽ đƣợc gửi về Master để tổng hợp kết quả.
Xét CSDL ở bảng 2.13 với minSup = 50%, ta có: MASTER:
1. Gửi thông tin sang các Slave (yêu cầu về CSDL, minSup)
2. Chờ nhận các item cùng với Tidset của nó từ các Slave. Khi đã nhận đủ thông tin, nó sẽ gọi thuật toán PEclat (đƣợc trình bày trong phần 2.4.3).
3. Chờ nhận các tập phổ biến từ các Slave. SLAVE:
1. Chờ nhận thông tin từ Master. 2. Đọc CSDL cục bộ để:
Gửi các item thỏa minSup và Tidset của chúng về Master để khai thác.
Hình 2.13 Kết quả khai thác từ Slave 1 theo thuật toán Eclat
Hình 2.14 Kết quả khai thác từ Slave 2 theo thuật toán Eclat
Nhƣ vậy, sau khi nhận đƣợc các tập phổ biến từ các Slave, Master đã có 10 tập phổ biến cùng với độ phổ biến là {A:4, B:6, C:4, E:5, F:4, G:4, AB:4, BC:4, EF:4, EG:3}. Master chỉ cần khai thác các tập phổ biến từ các item chứa trong cả 2 Slave bằng cách sử dụng thuật toán PEclat trong phần 2.4.3.
2.4.3. Thuật toán khai thác tập phổ biến trên Master
Trong [8] các tác giả đã đề xuất thuật toán PEclat (Parallel Eclat), một thuật toán mở rộng từ thuật toán Eclat để khai thác các tập phổ biến chƣa đƣợc khai thác từ các Slave. Để phát triển thuật toán, chúng tôi bổ sung vào mức 1 của IT-tree một thành phần thứ 3 (group), thành phần này cho biết item của một nút thuộc nhóm (Slave) nào? Nhƣ vậy, nếu 2 item thuộc về 2 nhóm khác nhau mới kết hợp chúng lại để tạo ra một itemset mới, nếu độ phổ biến của nó thỏa minSup thì tạo ra một nút mới trên IT-tree.
Sự khác nhau chính giữa PEclat và Eclat ở chỗ thêm thành phần group vào để cho biết 2 item có cùng nhóm không? Nếu chúng khác nhóm nhau thì kết hợp lại thành một itemset mới X = l l. Nếu độ phổ biến của itemset mới này (|T| - chính
mức 2 của IT-tree, chúng ta không cần kiểm tra các itemset có khác nhóm hay không? Vì vậy, thuật toán tách riêng phần xét các item ở mức một trên hàm PEclat và từ mức 2 trở đi hoàn toàn tƣơng tự nhƣ thuật toán Eclat [35].
Hình 2.15 Thuật toán PEclat
Ví dụ 2.4:(minh họa thuật toán) Xét CSDL của Bảng 2.13 với minSup = 50%, ta có: Sau khi nhận đƣợc đầy đủ thông tin từ các Slave, Master sẽ sắp xếp các nút ở mức một theo chiều tăng dần của độ phổ biến (hay |Tidset|). Sau đó, nó xét mỗi nút trên mức 1 với các nút đứng sau nó, nếu giá trị của group là khác nhau thì kết hợp lại thành một itemset mới bằng cách:
i) Itemset X = itemset của li kết hợp với itemset của lj. Thực tế, do hai itemset này thuộc cùng lớp tƣơng đƣơng [P] nên có cùng tiền tố chính là itemset của P, vì vậy việc kết hợp đơn giản là chép toàn bộ itemset của li và item cuối của lj cho X. Chẳng hạn: AFE chính là AF và item cuối của AE.
Đầu vào: i, Tidset(i), group(i) và minSup.
Đầu ra: Các tập phổ biến được khai thác từ các group
khác nhau thỏa minSup.
Phương pháp: PEclat( ) [] = { ) ( min ) ( | ) ( i group Sup i i Tidset i } for all li [] do [Pi] =
for all lj [], with j > i do if group(li) ≠ group(lj) then
X = li lj T = Tidset( li ) Tidset( lj ) if |T| minSup then [Pi] = [Pi] {XT} ENUMERATE_FIs([Pi]) ENUMERATE_FIs([P]) for all li [P] do [Pi] =
for all lj [P], with j > i do X = li lj
T = Tidset( li ) Tidset( lj ) if |T| minSup then
[Pi] = [Pi] {XT}
ii) Tidset của itemset X đƣợc tính bằng cách lấy phần giao 2 Tidset của 2 itemset tạo ra X. Chẳng hạn: X = AFE đƣợc tạo ra từ AF và AE ở trên thì T = Tidset(X) = Tidset(AF) Tidset(AE) = 134 1345 = 134, do |T| ≥ minSup nên X là phổ biến và thêm X vào lớp tƣơng đƣơng [Pi] = [AFE] (lúc đầu đƣợc khởi tạo bằng rỗng).
Nhƣ vậy, sau khi khai thác các tập phổ biến từ Master, chúng ta tạo thêm đƣợc 9 tập phổ biến {AF:3, AG:3, AE:4, CE:3, BF:4, BG:4, BE:5, AEF:3, AEG:3}. Nghĩa là: Sau khi tổng hợp, có tất cả 19 tập phổ biến thỏa minSup từ cơ sở dữ liệu tổng hợp (10 từ các Slave gửi về, 9 đƣợc khai thác trực tiếp tại Master). Kết quả khai thác tại Master nhƣ trong hình 2.16 hợp với các kết quả khai thác từ các slave trong các hình 2.13 và 2.14 ta có kết quả tổng hợp.
Hình 2.16 – Kết quả của PEclat với minSup = 50%
Đánh giá thuật toán
Về độ phức tạp tính toán của thuật toán PEclat chúng ta dễ dàng nhật thấy độ phức tạm là hàm mũ(tƣơng đƣơng với các thuật toán khai thác khác). Để đánh giá tính hiệu quả của thuật toán PEclat, chúng ta xem xét quá trình trao đổi thông tin giữa Master và các Slave. Master chỉ gửi yêu cầu thông tin về CSDL và minSup cho các Slave đúng 1 lần. Vì vậy, thời gian gửi này không đáng kể. Các Slave có 2 lần gửi thông tin về Master. Lần thứ nhất gửi các item cùng với Tidset của chúng, lần
dẫn đến làm ảnh hƣởng đến thời gian kết thúc thuật toán. Tuy nhiên, đều này ít xảy ra vì các tập phổ biến thƣờng chia đều trên các Slave. Một vấn đề nữa là Master chỉ khai thác các tập phổ biến chƣa đƣợc khai thác trên các Slave và vì vậy, thời gian khai thác sẽ nhanh hơn so với việc tập trung dữ liệu lại để khai thác trên một máy.
2.5. Khai thác tập mục có lợi ích cao 2.5.1. Đặt vấn đề 2.5.1. Đặt vấn đề
Khai thác tập mục có ích cao (High Utility Itemsets - HUIs) là dạng tổng quát của khai thác tập phổ biến (Frequent Itemsets - FIs). Mục đích của nó là nhằm tìm các tập mục có độ có ích cao từ cơ sở dữ liệu. Tính hữu ích của một tập mục đƣợc mô tả nhƣ là một ràng buộc về độ có ích. Nghĩa là, một tập mục đƣợc ngƣời dùng quan tâm chỉ khi độ có ích của nó thỏa ràng buộc độ có ích cho trƣớc. Tính hữu dụng của một tập mục đƣợc tính theo giá trị chủ quan và giá trị khách quan của các mục. Giá trị chủ quan của mục, gọi là xpq, là giá trị liên quan đến mục ip trong giao tác tq. Giá trị chủ quan của mục, gọi là yq, là giá trị thực tế do ngƣời dùng gán sao cho hai mục ip và iq bất kỳ. Bài toán khai thác tập mục dựa trên độ có ích khám phá tập HUIs là tập chứa tất cả các tập mục có độ có ích cao, nghĩa là, HUIs = { S | S
I , u(S) minutil}. Trong đó: S i t T p pq p q S y x f S
u( ) ( , ), với f(xpq,yp)xpqyp, và TS là tập giao tác có chứa S. Tuy nhiên, không giống nhƣ khai thác FIs, HUIs không thoả tính chất Apriori, nghĩa là tập con của một tập mục có ích cao không chắc là tập mục có ích cao. Vì vậy, ta không thể sử dụng hoàn toàn các thuật toán khai thác FIs để khai thác HUIs.
Trong [13], các tác giả đã đề xuất cấu trúc dữ liệu WIT-tree (Weighted Itemset- Tidset tree), một mở rộng của IT-tree, để tìm HUIs.
2.5.2. Khai thác tập mục có lợi ích cao
Lớp tƣơng đƣơng : Cho I là tập các items. p(X, k) = X[1:k] là hàm nhận kết quả gồm k phần tử đầu của X. Một quan hệ tƣơng đƣơng dựa vào tiền tố ktrên itemset đƣợc định nghĩa nhƣ sau: X, Y I, X
k
Y p(X, k) = p(Y, k).
Đỉnh: Có 3 trƣờng : X: itemset; Tidset: Tập giao tác chứa X ; twu: Tổng độ có ích theo trọng số giao tác của X.
Biểu thị một đỉnh là
)
(X
twuTidset
X .
Cung: Nối từ một đỉnh X ở mức k đến đỉnh Y ở mức (k+1)sao cho X k Y. Ví dụ 2.5: Xét cơ sở dữ liệu sau:
Bảng 2.15 Bảng giá trị khách quan Bảng 2.16 Bảng giá trị chủ quan
Ta có WIT-tree trong khai thác HUIs nhƣ sau:
item TID A B C D E Twu T1 0 0 16 0 1 21 T2 0 12 0 2 1 71 T3 2 0 1 0 1 12 T4 1 0 0 2 1 14 T5 0 0 4 0 2 14 T6 1 2 0 0 0 13 T7 0 20 0 2 1 111 T8 3 0 25 6 1 57 T9 1 2 0 0 0 13 T10 0 12 2 0 2 72 Item Benefit A 3 B 5 C 1 D 3 E 5
Chúng ta có thể thấy, giá trị twu(X) là tổng các giá trị twu của các giao tác mà tid của chúng chứa trong Tidset. Vì vậy, tính twu(X) và u(X) sẽ đƣợc thực hiện nhanh chóng dựa vào Tidset.
Thuật toán TWU-Mining dựa trên WIT-tree để khai thác HUIs. Có 2 giai đoạn trong thuật toán:
Giai đoạn 1 tìm tất cả tập mục có độ có ích trọng số giao tác cao.
Giai đoạn 2 chọn tất cả tập mục có độ có ích cao. Thật ra, giai đoạn 2 tính các giá trị có ích dựa trên Tidset.
Đầu vào : CSDL gồm 2 bảng: Khách quan và chủ quan, ngƣỡng minutil.
Đầu ra: HUIs chứa tất cả tập mục có ích cao.
Hình 2.18 Thuật toán TWU-Mining
Thuật toán bắt đầu bằng cách khởi tạo lớp tƣơng đƣơng rỗng ([]) chứa các mục đơn i sao cho twu(i) minutil, sau đó gọi hàm TWU-Mining-Extend, đầu vào của hàm này là lớp tƣơng đƣơng P ([P]): Xét mỗi đỉnh li với các đỉnh sau lj, với X =
lilj, tính Y = Tidset(X) = Tidset(li) Tidset(lj) (chi tiết xin xem [29]), nếu twu(X)
TWU-Mining()
HUIs =
[] = {it(i)| i I twu(i) minutil} TWU-Mining-Extend([], minutil)
TWU-Mining-Extend ([P], minutil)
// Phase 1
1. for all li [P] do 2. [Pi] =
3. for all lj [P], with j > i do 4. X = li lj
5. Y = Tidset(li) Tidset(lj) 6. if twu(X) minutil then 7. [Pi] = [Pi] { ) (X twu Y X } 8. TWU-Mining-Extend([Pi], minutil) // Phase 2 9. foreach itemset s in [P] do 10. If u(s) minutil then 11. HUIs = HUIs s
(đƣợc tính thông qua Tidset(X)) thoả minutil, thêm đỉnh mới
) (X twu Y
X vào lớp tƣơng đƣơng [Pi], thuật toán gọi đệ qui để tìm các lớp tƣơng đƣơng ở mức sau đến khi không còn đỉnh nào đƣợc tạo ra. Với mỗi lớp tƣơng đƣơng [P], thuật toán tính giá trị có ích của tập mục dựa trên Tidset, nếu u(s) minutil, thêm nó vào HUIs.
Ví dụ 2.6 (Minh họa thuật toán TWU-Mining)
Xét quá trình khai thác HUIs dựa trên thuật toán TWU-Mining với minutil = 130. Xét lớp tƣơng đƣơng [B],(hình 2.16)
Kết hợp với C, ta có itemset mới BC10 với twu(BC) = 72 < minutil, loại bỏ BC. Kết hợp với D, ta có itemset mới BD27 với twu(BD) = 71 + 111 = 182.
Kết hợp với E, ta có itemset mới BE2710 với twu(BE) = 71 + 111 + 72 = 254. Tiếp đó, tính u(BD) = 172, thoả minutil, vì vậy thêm vào HUIs, HUIs = {B, BC}. Ta tính u(BE) = 240, thoả minutil, và thêm vào HUIs, HUIs = {B, BC, BE}.
Tƣơng tự nhƣ vậy, xét lớp tƣơng đƣơng [BD]: kết hợp với BE, ta có itemset mới BDE27 với twu(BDE) = 71 + 111 = 182
Tiếp đó, tính u(BDE) = 182, thoả minutil, vì vậy thêm vào HUIs, HUIs = {B, BC, BE, BDE}.
Làm tƣơng tự cho các bƣớc tiếp theo ta có kết quả chi tiết trong hình 2.18.
Nhận xét thuật toán:
Các tác giả trong [14] đã giới thiệu một phƣơng pháp mới để khai thác tập mục có ích cao từ CSDL và đƣa ra thuật toán hiệu quả để khai thác HUIs. Nhƣ đã đƣợc đề cập ở trên, thuật toán dựa trên WIT-tree hiệu quả hơn các thuật toán dựa trên Apriori. Bằng kỹ thuật WIT-tree, thuật toán chỉ quét CSDL 1 lần dựa trên phần giao giữa các Tidset để tính nhanh giá trị có ích và giá trị trọng số giao tác của các tập mục. Trong phần thực nghiệm thuật toán cũng cho thấy thời gian thực thi của thuật toán TWU-Mining nhanh hơn Two-Phase. Ví dụ: Trong cơ sở dữ liệu MBS-POS với minutil = 1%, thời gian khai thác của Two-Phase khoảng 569 giây, trong khi thời gian khai thác của TWU-Mining khoảng 183 giây (bảng 2.18).
Thực nghiệm thuật toán:
Tất cả các thuật toán đƣợc viết bằng C# 2005. Cấu hình PC dùng cho thực nghiệm là CPU Intel 2.0 GHz Centrino, RAM 1 GB, Windows XP. CSDL thực nghiệm có đặc điểm nhƣ sau:
Database Trans Items
BMS-POS 515597 1656 Retail 88162 16469
Bảng 2.17 CSDL thực nghiệm
Chúng tôi bổ sung bằng cách thêm cột giá trị (ngẫu nhiên từ 1 đến 10) cho mỗi item tƣơng ứng với mỗi giao tác, và tạo thêm một bảng để lƣu giá trị lợi nhuận của các item (trong phạm vi từ 1 đến 10).
Do thuật toán Two-Phase [44] đƣợc so sánh là nhanh hơn các thuật toán khác dựa vào biên trên có ích và đã đƣợc chứng minh trong [26],[27], vì vậy chúng tôi chỉ so sánh thuật toán với Two-Phase.
Minutil(%) Two-Phase (s) TWU-Mining (s) HUIs 5 51.89 27.59 4 4 73.73 39.05 6 3 117.72 55.67 7 2 205.09 95.56 22 1 569.22 182.67 161
Minutil(%) Two-Phase (s) TWU-Mining (s) HUIs 1 7.67 7.46 20 0.8 11.38 11.31 29 0.6 24.63 23.23 45 0.4 60.25 57.69 64 0.2 210.78 178.19 239 0.1 546.03 426.27 800
Bảng 2.19 Bảng thực nghiệm 2 thuật toán trong CSDL Retail
Từ kết quả của bảng 2.17 và bảng 2.18, chúng ta thấy thời gian thực thi của thuật toán TWU-Mining nhanh hơn Two-Phase. Với ngƣỡng minutil càng nhỏ, khoảng cách thời gian khai thác của 2 thuật toán càng lớn. Điều đó cho thấy thuật toán