4.4.1 Kết hợp các tập mục phổ biến có độ dài từ 1 đến k
Từ các tập mục phổ biến có độ dài từ 1 đến k, chúng ta kết hợp dữ liệu từ các bảng F1 đến Fk vào bảng dữ liệu FISETS(item1,…,itemk, nullm, count) với nullm là vị trí có giá trị 0 đầu tiên, và count là độ hỗ trợ của tập mục, như sau:
(1) Insert into fisets as
(2) select item1, …, 0 itemk, 2 nullm,count from F1 (3) union all
(4) select item1, item2, …, 0 itemk, 3 nullm,count from F2 (5) union all
(6) … (7) union all
(8) select item1, item2,…, itemk, k+1 nullm,count from Fk
4.4.2 Sinh các tập con bảng tập mục phổ biến FISETS
Bước tiếp theo, sinh các tập con cho mỗi tập hữu hạn trong bảng tập mục phổ biến FISETS. Sau đó cập nhật vào bảng SUBSETS(item1, …, itemk, nullm, rulem, count) với cột nullm là cột có giá trị 0 đầu tiên, rulem là vị trí của „=>‟ trong luật kết hợp và count là độ hỗ trợ. Đối với một dòng dữ liệu trong bảng FISETS, có giá trị trong các cột (item1,…,itemk) tăng dần. Để sinh các tập con cho mỗi tập hữu hạn trong bảng tập mục phổ biến FISETS đề tài sử dụng thuật toán đệ quy liệt kê tổ hợp chập k của n phần tử:
(1) declare
(2) n number; --Mảng có độ dài n
(3) source number [ ] := null; --Mảng kết quả (4) k number := 3; --Số lượng phần tử (5) selected boolean [ n ]; --Mảng lưu trạng thái
(6) procedure choose(element number, startIdx number) is
(7) begin
(8) if element = k then
(9) --In danh sách phần tử trong mảng source[k] (10) for i in 1 .. n loop
(11) if selected[i] = true then
(12) --In phần tử mảng sẽ được chọn (13) end if;
(14) end loop;
(15) else
(16) for i in startIdx .. n loop
(17) if selected [ i ] = false then
(18) selected [ i ] = true;
(19) --Thực hiện thuật toán đệ quy (20) choose(element + 1, i + 1);
(21) selected [ i ] = false; (22) end if; (23) end loop; (24) end if; (25) end choose; (26) Begin (27) choose(0, 0); (28) End;
Hình 4.9: Liệt kê tổ hợp chập k của n phần tử
4.4.3 Sinh các luật kết hợp
Chúng ta sẽ kết hợp hai bảng FISETS và SUBSETS với điều kiện: . min_ . SUBSETS count conf FISETS count
Cập nhật dữ liệu vào bảng RULES (item1,…, itemk, nullm, rulem, confidence, support)
(1) insert into Rules
(2) select s.item1, …, s.itemk, s.nullm, s.rulem,
(float(s.count)/f.count)*100 Confidence, s.count Support
(3) from SUBSETS s, FISETS f
(4) where (s.item1 = f.item1 OR s.rulem <= 1 )
(5) AND (s.item2 = f.item2 OR s.rulem <= 2 )
(6) ...
(7) AND (s.itemk = f.itemk OR s.rulem <= k )
(8) AND s.rulem = f.nullm
(9) AND s.count*100/ f.count >= minconf