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.