Cho một tập phổ biến l, chương trình con sinh luật kết hợp sẽ sinh ra luật dạng
a => (l – a), trong đó a là một tập con khác rỗng của l. Độ hỗ trợ của luật chính là độ hỗ trợ của tập phổ biến l (tức là s(l)), còn độ tin cậy của luật là tỷ sốs(l)/s(a). Để sinh luật hiệu quả, chúng ta tiến hành duyệt các tập con của l có kích thước lớn trước tiên và sẽ tiếp tục xét các tập con nhỏ hơn khi luật vừa sinh thỏa mãn độ tin cậy tối thiểu (minconf). Ví dụ, l là tập phổ biến ABCD, nếu luật ABC => D không thỏa mãn độ tin cậy tối thiểu thì luật AB => CD cũng không thỏa mãn do độ hỗ trợ của AB luôn lớn hơn hoặc bằng ABC. Như vậy chúng ta không cần xét các luật mà vế trái là tập con của ABC vì chúng không thỏa mãn độ tin cậy tối thiểu.
Thuật toán sinh luật tuần tự [AS94] thể hiện ý tưởng trên như sau:
// Simple algorithm
Forall frequent itemset lk, k > 1 do
Call gen_rules(lk, lk);
// The gen_rules generates all valid rules α => (l - α), for all α⊂ am
Procedure gen_rules(lk : frequent k-itemset, am : frequent m-itemset)
Begin
1 A = {(m-1)-itemsets am-1 | am-1⊂ am} 2 Forall am-1∈ A do begin
3 conf = s(lk)/s(am-1);
4 if (conf≥minconf) then begin
5 output the rule am-1 => (lk – am-1); 6 if (m – 1 > 1) then
7 Call gen_rules(lk, am-1); 8 end
9 end End
Bảng 15 - Thuật toán sinh luật kết hợp tuần tự
Để sinh luật song song, chúng ta chia tập các tập thuộc tính phổ biến cho tất cả các BXL trong hệ thống. Mỗi BXL sinh luật trên các tập phổ biến được phân chia cho nó sử dụng thuật toán trên.
Trong thuật toán sinh luật song song, để tính độ tin cậy của một luật, BXL có thể cần phải tham chiếu đến độ hỗ trợ của một tập phổ biến nằm trên một BXL khác. Vì lý do này, các BXL nên có thông tin về toàn bộ các tập phổ biến truớc khi thực hiện thuật toán sinh luật song song.