Hai thuật toán trên đều yêu cầu các bộ xử lý phải đồng bộ vào cuối mỗi bước để trao đổi số đếm hoặc frequent itemset tương ứng. Băng thông sẽ không đủ tải trọng, có thể dẫn tới các bộ xử lý phải chờ đợi nhau sau mỗi giai đoạn. Thuật toán Candidate Distribution thực hiện độc lập giữa các bộ xử lý không cần quá trình đồng bộ.
Trong một số giai đoạn l, với l được xác định bằng mẹo, thuật toán phân chia tập frequent itemset Lk-1 cho các bộ xử lý sao cho mỗi Pi chỉ sinh ra một tập Ci
m (m ≥ l) duy nhất, độc lập. với các bộ xử lý khác (Ci
m ∩ Cj
m = ∅, i ≠ j). Trong cùng một giai đoạn, dữ liệu được lựa chọn được sao lưu để các bộ xử lý có thể tính toán số đếm candidate Ci
m độc lập với các bộ xử lý khác.Sự lựa chọn của giai đoạn tái phân phối là khi đạt cân bằng giữa các bộ xử lý ngay khi có thể và đợi đến khi các itemset phân đoạn hợp lý và rõ ràng. Thuật toán phân đoạn được miêu tả ngữ nghĩa trong thủ tục sinh candidate Apriori đã mô tả ở những phần trên. Sau khi phân phối candidate, chỉ có sự phụ thuộc lẫn nhau giữa các bộ xử lý được sử dụng cho quá trình cắt tỉa. Một bộ xử lý sẽ không phải chờ cho tất cả thông tin đầy đủ từ các tất cả các bộ xử lý khác để thực hiện cắt tỉa. Nó sẽ tiến hành cắt tỉa ngay khi bất kỳ thông tin nào đến, các thông tin đến sau sẽ được sử dụng cho các giai đoạn cắt tỉa sau kế tiếp.
Thuật toán:
Giai đoạn k <1: sử dụng hoặc là thuật toán Count hoặc thuật toán Data Distribution.
Giai đoạn k = 1:
1. Phân đoạn Lk thực hiện song song nhau bởi mỗi bộ xử lý. 2. Pi sinh ra tập Ci
k chỉ sử dụng Lk-1 gán cho mình. Pi có thể truy cập được Lk-1, do đó có thể áp dụng cắt tỉa trong khi sinh ra Ci
3. Tong cùng thời gian đó, Pi tổng hợp số đếm toàn cục từ Ci
k và cơ sở dữ liệu được tái phân đoạn thanh DRi. Chi tiết thuật toán được cho trong phần sau. 4. Sau khi Pi xử lý xong tất cả dữ liệu cục bộ và dữ liệu nhận được từ các bộ xử lý
khác, nó sẽ gửi yêu cầu tới N – 1 bộ đệm nhận để nhận L j
ktừ các bộ xử lý khác. Lj
k được sử dụng trong quá trình sinh tập candidate để cắt tỉa tập Ci k+1
5. Pi tính toán Li
k từ Cik và quảng bá không đồng bộ tới N – 1 bộ xử lý sử dụng N – 1 cuộc gửi dị bộ.
Giai đoạn k > 1:
1. Pi tập hợp tất cả frequent itemset đã gửi tới các bộ xử lý khác. Tập itemset chỉ được dùng trong bước sinh candidate chứ không được sử dụng trong bước kết nối. Các itemset được sinh ra trong bước i có thể có độ dài k được hoàn gửi lại sau khi xử lý.
2. Pi sinh ra Cik sử dụng Li
k−1. Có thể xảy ra trường hợp Pi không nhận được Lj k−1
từ các bộ xử lý khác, do đó phải đặc biệt chú ý thời điểm cắt tỉa. Cần phân biệt một itemset (là một tập con có độ dài k-1 của một candidate itemset) không có mặt trong bất kỳ một tập Lj
k−1 với một itemset có mặt trong một số tập L j k−1
nhưng tập đó vẫn không thể nhận được bởi Pi. Đó là bởi việc tìm ra Ll-1 (cần lưu ý việc phân đoạn lại xảy ra trong giai đoạn l) sử dụng tiền tố độ dài l – 1 của itemset trong yêu cầu, chỉ ra được bộ xử lý tương ứng với itemset đó, kiểm tra xem Lj
k−1 có được nhận bởi bộ xử lý này hay không. 3. Pi duyệt DRi và đếm Ci k . Tính toán i k L từ Ci k và phát không đồng bộ i k L tới các bộ xử lý khác sử dụng N – 1 hàm gửi dị bộ.
Bước nhậy cảm của thuật toán trên là làm cách nào tính toán lại phân đoạn hợp lý nhất (Bước 3 của giai đoạn k = l). Sau đây là mô tả chi tiết hơn:
Giống thuật toán Data Distribution, mỗi bộ xử lý Pi sử dụng N – 1 Asynchreceive() để gửi tới N – 1 bộ đệm nhận dị bộ cho quá trình nhận trang dữ liệu từ bất kỳ một bộ xử lý nào. Pi đếm số đếm trong Ci
ktuần tự từ các trang dữ liệu nhận được trong bộ đệm nhận RBuf và tuple vào phân đoạn dữ liệu cục bộ DBi, Pi ưu tiên xử lý trang dữ liệu nhận được hơn việc tuple cục bộ để tránh nghẽn mạng. Mỗi khi Pi bắt đầu xử lý một trang bộ đệm, nó xử lý tất cả các tuple trên đó và gửi lại chúng sử dụng Asynchreceive cho đến khi nhận được cờ EOT. Điểm khác biệt so với thuật toán Data Distribution là Pi định vị N – 1 bộ đệm gửi để gửi các tuple tới bộ xử lý được chỉ định trước như mô tả dưới đây.
Nếu không có trang dữ liệu nào có sẵn trong các bộ đệm nhận, Pi xử lý các tuple cục bộ trên phân đoạn DBi. Đầu tiên, Pi thăm dò Lk-1 để biết bộ xử lý nào sử dụng tuple này để chỉ ra các bộ xử lý được gán cho frequent (k-1)-itemset được chứa trong
tuple. Ghi tuple vào bộ đệm gửi của các bộ xử lý tương ứng. Nếu Pi là một trong số những bộ xử lý đó thì tuple tăng số đếm Ci
k. Sau khi DBi được xử lý xong, Pi thêm cờ EOT vào tất cả bộ đệm gửi. Khi một bộ đệm gửi đầy hay cờ EOT đã được thêm vào bộ đệm thì Pi gửi dị bộ bộ đệm đó tới bộ xử lý tương ứng.
Khi xử lý một tuple từ bộ đệm nhận, Pi tăng số đếm trong Ci
k. Ghi tuple này vào tệp cục bộ DRi, loại bỏ đi các item trên tuple không tham gia vào quá trình tăng số đếm. Các tuple cục bộ thường đếm Ci
k đã được ghi vào tệp DRi. Pi sử dụng phân đoạn DRi trong các bước sau đó để đếm support các candidate.
Phân đoạn Lk . Xét ví dụ sau: Gọi L3 là {ABC, ABD, ABE, ACD, ACE, BCD, BCE, BDE, CDE}. L4 = {ABCD, ABCE, ABDE, ACDE, BCDE}, L5 = {ABCDE}, và L6 =
∅. Xét ξ = {ABC, ABD, ABE} có mọi phần tử đều có tiền tố chung là AB. Lưu ý rằng, các candidate ABCD, ABCE, ABDE và ABCDE cũng có tiền tố là AB. Thuật toán sinh candidate theo Apriori sinh ra những tập này bởi việc nối các item có trong
ξ.
Do đó, giả sử rằng các item trong các itemset đã sắp theo thứ tự. Ta có thể phân đoạn Lk dựa trên tiền tố độ dài (k-1). Để đảm bảo không có phân đoạn nào được gán cho nhiều hơn một bộ xử lý, ta phải bảo đảm rằng mỗi bộ xử lý có thể sinh ra các candidate độc lập với nhau (ngoại trừ giai đoạn cắt tỉa). Giả sử rằng ta đã phân đoạn lại cơ sở dữ liệu theo cách bất kỳ tuple nào cũng có chứa phân đoạn Lk được gán cho một bộ xử lý đều được lưu vào ổ cứng của bộ xử lý đó. Các bộ xử lý có thể xử lý hoàn toàn dị bộ.
Thuật toán thực tế có thể phức tạp hơn bởi hai lý do sau: Một bộ xử lý có thể chứa frequent itemset đã được xử lý bởi bộ xử lý khác trong bước cắt tỉa của quá trình sinh candidate. Trong ví dụ trên, bộ xử lý gán tập ξ đã biết cho BCDE là frequent có thể quyết được khi nào thì tiến hành cắt tỉa candidate ABCDE nhưng có thể tập candidate với tiền tố BC đã được gán cho một bộ xử lý khác rồi. Một vấn đề khác nữa sẽ được xem xét là cần phải cân bằng tải trọng giữa các bộ xử lý.
4.1.4. Sinh luật song song
Cho một frequent itemset l, quá trình sinh luật kiểm tra chỉ những tập con không rỗng a và sinh luật có dạng a ⇒ (l – a) với s = support(l) và conf = support(l)/support(a). Quá trình tính toán này được thực hiện hiệu quả bởi đầu tiên kiểm tra các tập con lớn nhất của l và chỉ xem xét tới các tập nhỏ hơn nếu các luật đã sinh ra có yêu cầu ngưỡng confidence tối thiểu. Ví dụ, cho frequent itemset ABCD, nếu luật ABC ⇒ D hoặc là AB ⇒ CD không có minconf thì ta không cần phải xét tới itemset đó nữa.
Tính toán confidence của một luật, một bộ xử lý có thể phải kiểm tra support của itemset không tương ứng. Vì lý do này, mỗi bộ xử lý phải có thể truy cập tất cả các frequent itemset trước khi quá trình sinh luật bắt đầu.
Sinh luật song song đơn giản chỉ triệu gọi quá trình phân đoạn tập tất cả các frequent itemset giữa các bộ xử lý. Mỗi bộ xử lý sau đó sinh ra luật cho phân đoạn của mình bằng cách chỉ sử dụng thuật toán trên. Vì số lượng luật có thể sinh ra từ một itemset là tỷ lệ với kích thước itemset, ta cần phải cân bằng tải bằng cách phân đoạn cơ sở dữ liệu thành những đoạn bằng nhau giữa các bộ xử lý. Điều này không thành vấn đề đối với thuật toán CD và DD do cuối mỗi giai đoạn, tất cả các bộ xử lý đều có đủ tập frequent itemset. Trong thuật toán Candidate Distribution, bộ xử lý nhanh hơn có thể phải đợi bộ xử lý chậm hơn phát hiện và truyền về tất cả frequent itemset.
Do chi phí cho quá trình sinh luật là tương đối rẻ, nên để tốt hơn thuật toán Candidate thường sinh luật off-line, có thể trên một máy nối tiếp. Điều này giúp cho các bộ xử lý tự do thực hiện tác vụ khác khi đã tìm thấy frequent itemset, thậm chí trong khi bộ xử lý khác vẫn đang hoạt động.
4.2. Kiểu kiến trúc chia sẻ bộ nhớ chung [8]
Ta đưa ra một thuật toán FDM (Fast Distributed Mining of Association rules) có những đặc trưng sau:
1. Quá trình sinh tập candidate giống với Apriori. Tuy nhiên, mối liên quan giữa tập large cục bộ và large toàn thể cần được xem xét để sinh ra tập candidate nhỏ hơn tại mỗi bước lặp và nhằm làm giảm số lượng thông điệp cần trao đổi. 2. Sau khi tập candidate đã được sinh ra, hai kỹ thuật cắt tỉa là cắt tỉa cục bộ và
cắt tỉa toàn cục được phát triển để tỉa đi một số tập candidate tại các site tách biệt.
3. Nhằm phát hiện khi nào một tập candadite là large, thuật toán chỉ yêu cầu O(n) thông điệp để trao đổi số đếm support, với n là số lượng các site có trong mạng. Rõ ràng ít hơn so với mô phỏng theo Apriori cần O(n2) thông điệp.
Từ thuật toán này, ta có một số biến thể là: FDM-LP, FDM-LUP, FDM-LPP, có cùng nền tảng nhưng khác kỹ thuật tổ hợp. FDM-LP chỉ áp dụng kỹ thuật cắt tỉa cục bộ, FDM-LUP sử dụng cả cắt tỉa cục bộ và cắt tỉa với giới hạn trên, FDM-LPP thực hiện cả cắt tỉa cục bộ và cắt tỉa-thăm dò site.
Ta xét kỹ thuật khai phá luật kết hợp trong môi trường phân tán. Đặt DB là cơ sở dữ liệu với D giao dịch. Giả sử rằng có n site S1, S2,… , Sn trong một hệ thống phân tán và DB được phân phối trên n site thành {DB1, DB2,… , DBn} tương ứng.
Gọi kích thước của phân đoạn DBi là Di với i = 1,…, n. Gọi X.sup và X.supi lần lượt là số đếm support của itemset X trong DB và DBi. X.sup được gọi là số đếm support toàn cục, X.supi được gọi là số đếm support cục bộ của X tại site Si. Với
ngưỡng support tối thiểu cho trước s, X được gọi là large toàn cục nếu X.sup ≥ s x D, tương ứng X được gọi là large cục bộ tại site Si, nếu X.supi≥ s x Di.
Ký hiệu:
L: tập các itemset large toàn thể trong DB, L(k): các large itemset toàn cục trong L. Thực chất thuật toán khai phá luật kết hợp phân tán là tìm ra các large itemset toàn cục trong L
4.2.1. Các kỹ thuật khai phá dữ liệu phân tán.
Sinh tập candidate
Một điều quan trọng đối với môi trường phân tán là giảm số lượng các thông điệp được truyền đi trên mạng.
Hai thuộc tính khác có thể dễ dàng rút ra từ large cục bộ và gl-large itemset. Một là, nếu itemset X là large cục bộ tại site Si thì tất cả các tập con của X cũng là large cục bộ tại site Si. Hai là, nếu itemset X là gl-large tại site Si thì tất cả các tập con của X cũng là gl-large tại site Si.
Bổ đề 2-5: Nếu một itemset X là large toàn cục thì sẽ tồn tại một số site Si (1 ≤ i ≤ n) sao cho X và tất cả tập con của X đều là gl-large tại site Si.
Chứng minh: nếu X không là large cục bộ tại bất kỳ site nào thì X.supi < s x Di đối với mọi i = 1, …, n. Do đó, X.sup < s x D và X không là large toàn cục. Mâu thuẫn, vậy X phải là large cục bộ tại một vài site Si, do đó X là gl-large tại site Si. Rút ra, tất cả các tập con của X đều là gl-large tại site Si.
Ký hiệu:
GLi : tập các gl-large itemset tại site Si và GLi(k) là tập các gl-large k-itemset tại site Si. Theo Bổ đề 2 -5, nếu X ∈ L(k) thì tồn tại một site Si sao cho mọi tập con kích thước (k-1) của nó đều là gl-large tại site Si, do đó chúng phải thuộc vào tập GLi(k-1).
Ký hiệu giống với Apriori, tập các tập candidate tại bước lặp thứ k ký hiệu là CA(k), có nghĩa là tập candidate kích thước k đối với Apriori được sinh ra từ hàm Apriori_gen dựa trên L(k-1).
CA(k) = Apriori _gen(L(k-1))
Một mối liên quan quan trọng giữa large itemset và các site trong cơ sở dữ liệu phân tán: mọi large itemset phải là large cục bộ tại một vài site. Nếu X vừa là large cục bộ, vừa là large toàn cục tại site Si, thì X được gọi là gl-large tại site Si. tập các gl- large tại một site sẽ tạo ra cơ sở cho site đó trong việc sinh tập candidate của chính site đó.
Tại mỗi site, ký hiệu CGi(k) là tập các tập candidate bởi áp dụng Apriori_gen dựa trên GLi(k-1).
với CG thay thế cho tập candidate được sinh ra từ gl-large itemset. Do đó, CGi(k) được sinh ra từ GLi(k-1). Do GLi(k-1)⊆ L(k-1), CGi(k) là một tập con của CA(k). Sau đay ta sử dụng ký hiệu CG(k) để chỉ tập n
i
U =1CGi(k).
Định lý 5: Với mọi k > 1, tập tất cả các large k-itemset L(k) đều là tập con của CG(k) =
n i
U=1CGi(k), với CGi(k) = Apriori_gen(GLi(k-1)).
Chứng minh: Đặt X ∈ L(k). Theo Bổ đề 2 -5, tồn tai một site Si (1 ≤ i ≤ n) sao cho mọi tập con kích thước (k-1) của X đều là gl-large tại site Si. Do đó, X ∈CGi(k). Suy ra: L(k) = CG(k) = n i U=1CGi(k) = n i U=1Apriori_gen(GLi(k-1)) .
Theo định lý này thì CG(k) sẽ là tập con của CA(k), do đó nhỏ hơn CA(k). CG(k) được coi như tập các candidate cho large k-itemset. Sự khác nhau giưũa hai tập phụ thuộc vào phân phối các itemset. Định lý nỳa là cơ sở cho việc sinh tập candiate của thuật toán FDM. Đầu tiên, tập các candidate CGi(k) được sinh ra cục bộ tại mỗi site Si tại bước lặp thứ k. Sau khi trao đổi số đếm support, tập gl-large itemset GLi(k) trong tập CGi(k) được tìm ra tại cuối mỗi bước lặp. Dựa trên GLi(k), tập candidate tại site Si ở bước lặp thứ (k+1) được sinh ra. Theo hướng này, số lượng tập candidate được sinh ra ó thể giảm đáng kể từ 10 – 25% so với thuật toán CD.
Ví dụ 2-9: Xét một hệ thống có 3 site và phân chia cơ sở dữ liệu DB thành DB1, DB2, DB3. Giả sử rằng tập large 1-itemset L(1) = {A, B, C, D, E, F, G, H}, trong đó A, B, C là large cục bộ tại site S1, B, C và D là large cục bộ tại site S2,và E, F, G và H là large cục bộ tại site S3. Do vậy, GL1(1) = {A, B, C}, GL2(1) = {B, C, D}và GL3(1) = {E, F, G, H}. Theo Định lý 5, tập candidate kích thước 2 tại site S1 là CG1(2) = Apriori_gen(GL1(1)) = {AB, BC, AC}. Tương tự CG2(2) = {BC, CD, BD} và CG3(2) = {EF, EG, EH, FG, FH, GH}. Do tập candidate của large 2-itemset là CG(2) = CG1(2) ∪
CG2(2)∪ CG3(2), tổng là 11 candidate. Nếu áp dụng thuật toán Apriori-gen áp dụng đối với L(1) thì tập candidate CA(2) = Apriori_gen(L(1)) sẽ là 28 candidate. Rõ ràng hiệu quả của Định lý 5 sẽ làm giảm số lượng tập candidate.
Cắt tỉa cục bộ tập các candidate.
Khi tập các tập candidate CG(k) đã sinh ra, để tìm ra large itemset toàn cục, số