Sau khi các tập mục phổ biến từ các tác vụ trong CSDL đã được tìm thấy, nó có thể sinh ra các luật kết hợp mạnh, ở đó luật kết hợp mạnh (strong association rule) là luật thoả mãn cả hai độ hỗ trợ cực tiểu và độ tin cậy cực tiểu. Điều đó có thể thực hiện bằng việc sử dụng tính độ tin cậy của luật, ta nhắc lại: độ tin cậy của luật X Y là: conf (X Y) = P(Y/X) = sup(XY)/sup(X) ở đó sup(XY) là độ hỗ trợ của XY và sup(X) là độ hỗ trợ của X.
Có thể coi tỷ số trên là tỷ số giữa: số các tác vụ chứa XY và số các tác vụ chứa X. Dựa trên biểu thức tính toán đó, các luật kết hợp có thể được sinh như sau:
Với mỗi tập mục phổ biến l, sinh ra tất cả các tập con không rỗng của l Với mỗi tập con không rỗng a của l, ta có luật a (l-a) nếu
) sup(
) sup(
a
Vì các luật được sinh ra từ các tập mục phổ biến nên độ hỗ trợ của luật đã được thoả mãn, tức là độ hỗ trợ của luật chính là sup(l).
* 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 mục lớ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 a của tập mục lớn l không sinh ra được luật thì không cần xét đến các tập con của 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 đến luật AB CD.
Điều này có thể chứng minh đơn giản như sau:
Nếu luật a (l-a) không thoả mãn độ tin cậy, tức là: conf(a l-a)) nhỏ hơn minconf, thế thì với bất kỳ tập con b nào của a ta có:
Vì b a nên sup(b) supp(a), do vậy: Conf(b (l-b)) = ) sup( ) sup( ) sup( ) sup( a l b l
= conf(( a (l-a)) < minconf Tức là độ tin cậy của luật b (l-b) cũng nhỏ hơn minconf
Thuật toán đơn giản này có thể mô tả như sau [10]: Thuật toán 1.
For all large itemsets lk , k2 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 again
conf = support(lk)/support(am-1); if (conf minconf) then
begin
output the rule am-1(lk-am-1),
if (m-l > l) then call genrules(lk,am-1);
//để sinh ra các luật với tập con của am-1là 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 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 ABCD không đủ độ tin cậy thì luật ABCD cũng không đủ độ tin cậy. Điều đó cũng 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 ABCD có đủ độ tin cậy thì luật ABCD cũng đủ độ tin cậy.
Thuật toán 2
For all larger itemsets lk, k 2 do Begin
Hl={các phần kết luận của các luật nhận được từ lkvới l-mục ở kết luận};
Call ap_genrules(lk,Hl) 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+1Hm-1 do Begin
Conf = support(lk)/support(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ợ là support (lk) Else Delete hm+1 from Hm+1 End; Call ap_genrules(lk, Hm+1) End; 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 ACDEB, ADECB là các luật có l-mục ở phần kết luận thoả mãn độ hỗ trợ cực tiểu minconf.
Trong thuật toán đơn giản trên, gọi đệ quy genrules(ABCDE, ACD) sẽ kiểm tra các luật với 2-mục ở phần kết luận là: ACDBE, ADEBC, CDEAB và ACEBD
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à ACEBD, ở đó B và D là các kết luận của các luật kết hợp 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.
Chƣơng 3
ỨNG DỤNG PHÁT HIỆN LUẬT KẾT HỢP KHAI PHÁ DỮ LIỆU QUẢN LÝ SINH VIÊN