Từ tất cả các tập mục thường xuyên, chúng ta có thể sinh các luật thỏa mãn độ tin cậy cực tiểu minconf và độ hỗ trợ cực tiểu minSup. Với mỗi tập mục thường xuyên l, chúng ta tìm tất cả các tập con không rỗng của l, mỗi tập con a của l, sinh ra luật có dạng a (l-a) sao cho có độ tin cậy lớn hơn hoặc bằng minconf. Để cải tiến thủ tục sinh những tập mục con của một tập thường xuyên theo kiểu đệ qui. Ví dụ cho tập mục ABCD, đầu tiên sinh xem xét các tập con ABC, sau đó đến AB, .... Nếu tập con a của tập mục thường xuyên l sinh ra luật a (l-a) không thỏa minconf thì chúng ta không cần xét đến những luật có tiền đề là tập con của tập a. Chẳng hạn: nếu luật ABC D không thỏa minconf thì không cần xét đến luật ABCD.
Thuật toán 2.4 tìm luật kết hợp từ các tập mục thường xuyên
For tất cả các tập mục thường xuyên lk k 2 Do gọi genrules(lk: tập k-mục, lk : tập k-mục) procedure genrules(lk: Frequent k-items, am :
Frequent m-items)
A = {(m-1)-itemsets am-1 | am-1 am};
For (all am-1 A ) Do
{
conf = supp(lk)/supp(am -1)
{
output the rule am-1 (lk – am-1)
//với độ tin cậy là conf và độ hỗ trợ = supp(lk)
If (m-1) > 1 Then
call genrules(lk, am-1)
// Sinh các luật với tiền đề là tập con của am-1
} }
Thuật toán nhanh hơn:
Thuật toán trên chúng ta đã xét nếu luật a (l-a) không thỏa mãn độ tin cậy thì luật a* (l- a*) cũng không thỏa độ tin cậy, với a* a. Nghĩa là một luật không thỏa đối với tập cha thì cũng không thỏa đối với tập con của nó. Điều đó cũng có thể áp dụng cho chiều ngược lại: nếu a*
(l- a*) thỏa độ tin cậy thì luật a (l-a) cũng thỏa mãn độ tin cậy với bất kỳ a* a.
Ví dụ: nếu luật AB CD thỏa độ tin cậy thì luật ABC D cũng thỏa độ tin cậy.
Như vậy, từ tập mục thường xuyên lk trước hết chúng ta sinh tất cả các luật có một mục ở phần kết luận, sau đó sử dụng kết luận của các luật này và hàm apriori-gen trong phần 2.5.1 để sinh tất cả kết luận của luật bao gồm 2- mục, 3-mục,.... Thuật toán sau sẽ mô tả ý tưởng này.
Thuật toán 2.5 tìm luật kết hợp từ các tập mục thường xuyên tối ưu hơn.
{
H1 = {các phần kết luận 1-mục nhận được từ lk} ap-genrules(lk, H1)
}
Procedure ap-genrules (lk: Frequent k-items, Hm: Frequent m-items) IF (k > m+1) Then { Hm+1 = Apriori-gen(Hm) For (all hm +1 Hm+1) Do {
conf = supp(lk)/supp(lk- hm +1)
If (conf minconf) Then
output the rule (lk – hm+1) hm+1
//với độ tin cậy là conf và độ hỗ trợ = supp(lk) else delete hm+1 from Hm+1
}
ap-genrules(lk, Hm*1) }