Phần này sẽ trình bày thuật toán tìm các luật kết hợp từ các tập mục thƣờng xuyên đã có.
Thuật toán đơn giản:
Chúng ta cải tiến thủ tục xử lý bằng cách sinh ra các tập con của tập mục thƣờng xuyên theo kiểu đệ qui ƣu tiên độ sâu. Ví dụ: với tập mục ABCD, đầu tiên chúng ta xét tập con ABC, sau đó đến AB,...
Tiếp đến, nếu tập con X của tập mục L không sinh ra đƣợc luật thì ta không cần xét đến các tập con cuả nó nữa. Chẳng hạn: nếu luật ABC D không đủ độ tin cậy thì ta không cần xét luật AB CD.
Điều này có thể chứng minh đơn giản nhƣ sau:
Nếu luật X (L\X) không thoả mãn độ tin cậy, tức là: conf(X (L\X)) nhỏ hơn minconf, thế thì với bất kỳ tập con Y nào của X ta có:
Vì Y X nên supp(Y) supp(X), do vậy:
minconf )) \ (L conf(X supp(X) supp(L) supp(Y) supp(L) Y)) \ (L conf(Y X
Tức là độ tin cậy của luật Y (L\Y) cũng nhỏ hơn minconf. Thuật toán đơn giản này có thể mô tả nhƣ sau:
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
Thuật toán 1:
for all large itemsets lk, k 2 do
call genrules(lk, lk)
Procedure genrules(lk: large k-itemsets, am: large m-
itemsets)
A = {(m – 1)-itemsets am – 1 | am – 1 am};
for all am – 1 A do begin
conf = support(lk)/support(am – 1);
if (conf minconf) then
begin
output the rule am – 1 (lk - am – 1),
with confidence = conf and support=Support(lk)
if (m – 1 > 1) then
call genrules(lk, am – 1);
// để sinh ra các luật với tập con của am – 1 là phần tiền đề.
end end
Thuật toán nhanh hơn:
Ở trên ta đã chỉ ra rằng nếu một luật không thoả mãn với tập cha X thì cũng không thoả mãn với tập con của nó. Ví dụ nhƣ trên đã xét: nếu ABC
D không đủ độ tin cậy thì luật AB CD cũng không đủ độ tin cậy. Điều đó có thể áp dụng theo hƣớng ngƣợc lại nhƣ sau: nếu xảy ra luật với tập con thì cũng xảy ra luật với tập cha . Ví dụ: nếu luật AB CD có đủ độ tin cậy thì luật ABC D cũng đủ độ tin cậy.
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
Thuật toán 2 :
For all large itemsets lk, k 2 do begin
H1 ={ Các phần kết luận của các luật nhận đƣợc từ lk với 1- mục ở kết luận};
call ap-genrules(lk, H1)
end
Procedure ap-genrules(lk: large k-itemsets, Hm: set of m-
item consequents)
if (k > m + 1) then begin
Hm + 1 = apriori_gen(Hm);
For all hm + 1 Hm + 1 do begin
conf = support(lk)/support(lk - h m + 1);
if (conf minconf) then
output the rule (lk - hm + 1) hm + 1
//với độ tin cậy là conf và độ hỗ trợ là support(lk);
else
delete hm + 1 from Hm + 1
end
call ap-genrules(lk, Hm + 1);
end
Thuật toán nhanh hơn này sử dụng thủ tục apriori_gen mô tả ở phần thuật toán Apriori ở trên. Ta xem tại sao thuật toán 2 này nhanh hơn thuật toán 1 ở trên:
Ví dụ, ta xét tập mục ABCDE. Giả sử rằng ACDE B và ABCE D
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
Trong thuật toán đơn giản ở trên, gọi đệ qui genrules(ABCDE, ACDE) sẽ kiểm tra các luật với 2-mục ở phần kết luận là: ACD BE, ADE BC, CDE BA, và ACE BD.
Luật thứ nhất không xảy ra vì E BE và ABCD E không thoả mãn độ tin cậy. Các luật thứ hai và thứ ba cũng không thoả mãn độ tin cậy với lí do tƣơng tự.
Chỉ có một luật với 2-mục ở phần kết luận nhận đƣợc là ACE BD , ở đó B và D là các kết luận của các luật hợp lệ có 1-mục ở phần kết luận. Thuật toán nhanh hơn mô tả ở trên chỉ kiểm tra một luật này.