Trong hệ thống xử lý thông tin, dữ liệu tăng lên không ngừng, đòi hỏi phải có kỹ thuật lƣu trữ và khai thác thông tin một cách có hiệu quả. Từ đó có thể khai phá ra các tri thức phục vụ cho hoạt động sản xuất, kinh doanh và hỗ trợ ra quyết định. Giải pháp cho tất cả các vấn đề nêu trên chính là kỹ thuật khai phá dữ liệu (KDD- Knowledge Discovery and Data Mining) có sự hỗ trợ của hệ chuyên gia.
Hỗ trợ hệ chuyên gia trong khai phá dữ liệu cho phép khai thác đƣợc những thông tin mới mà các cơ sở dữ liệu tác nghiệp thông thƣờng không thể có đƣợc. Từ đó thể hiện độ chắc chắn trong sự kiện và luật khai phá luật kết hợp: sử dụng công cụ truy vấn, xây dựng cây quyết định, dựa theo khoảng cách (K-láng giềng gần), giá trị trung bình, phát hiện luật kết hợp, …
CHƢƠNG 2
HỖ TRỢ HỆ CHUYÊN GIA TRONG KHAI LUẬT KẾT HỢP 2.1 PHƢƠNG PHÁP TÌM LUẬT KẾT HỢP TRONG KHAI PHÁ DỮ LIỆU
2.1.1 Vài nét về khai phá luật kết hợp
Giả sử chúng ta có một cơ sở dữ liệu D. Luật kết hợp cho biết phạm vi mà trong đó sự xuất hiện của tập các thuộc tính S nào đó trong các bản ghi (records) của D sẽ kéo theo sự xuất hiện của một tập những thuộc tính khác U cũng trong những bản ghi đó. Mỗi luật kết hợp đƣợc đặc trƣng bởi một cặp tỉ lệ hỗ trợ (support ration). Mỗi tỉ lệ hỗ trợ đƣợc biểu diễn bằng tỉ lệ % những bản ghi trong D chứa cả S và U.
Vấn đề khám phá luật kết hợp đƣợc phát biểu nhƣ sau:
Cho trƣớc tỉ lệ hỗ trợ (support ration) và độ tin cậy (confidence)
Đánh số tất cả các luật trong D có các giá trị tỉ lệ hỗ trợ và tin cậy lớn hơn và tƣơng ứng.
Vấn đề phát hiện luật kết hợp đƣợc thực hiện nhƣ sau:
Liệt kê (đếm) tất cả những qui luật chỉ ra sự xuất hiện một số các mục sẽ kéo theo một số mục khác.
Chỉ xét những qui luật mà tỉ lệ hỗ và tin cậy lớn hơn và tƣơng ứng.
2.1.2 Luật kết hợp
2.1.2.1 Mô hình hình thức
Kí hiệu I = {I1, I2, ..., Im} là tập m khoản mục (item), một giao dịch (transaction) T đƣợc định nghĩa nhƣ một tập con (subset) của các khoản mục trong I (T I). Có thể coi chúng đã đƣợc sắp xếp theo thứ tự từ điển của các mục.
Gọi D là cơ sở dữ liệu của n giao dịch và mỗi giao dịch đƣợc đánh nhãn với một định danh duy nhất (Unique Transasction Identifier). Nói rằng, một giao dịch T D hỗ trợ (support) cho một tập X I nếu nó chứa tất cả các item của X, nghã là X T, trong một số trƣờng hợp ngƣời ta dùng ký hiệu T(X) để chỉ tập các giao dịch
hỗ trợ cho X. Kí hiệu support(X) (hoặc sup(X), s(X)) là tỷ lệ phần trăm của các giao dịch hỗ trợ X trên tổng các giao dịch trong D, nghĩa là:
| { | } | sup( ) | | T D X T X D
Độ hỗ trợ tối thiểu (minimum support) minsup là một giá trị cho trƣớc bởi ngƣời sử dụng. Nếu tập mục X có sup(X) minsup thì ta nói X là một tập các mục phổ biến (hoặc large itemset). Một tập phổ biến đƣợc sử dụng nhƣ một tập đáng quan tâm trong các thuật toán, ngƣợc lại, những tập không phải tập phổ biến là những tập không đáng quan tâm. Trong các trình bày sau này, ta sẽ sử dụng những cụm từ khác nhƣ “X có độ hỗ trợ tối thiểu”, hay “X không có độ hỗ trợ tối thiểu” cũng để nói lên rằng X thỏa mãn hay không thỏa mãn support(X) minsup.
a. Định nghĩa luật kết hợp
Một luật kết hợp có dạng R: X => Y, trong đó X, Y là tập các mục, X, Y I và X Y = . X đƣợc gọi là tiên đề và Y đƣợc gọi là hệ quả của luật.
Luật X => Y tồn tại một độ tin cậy c (confidence-conf). Độ tin cậy c đƣợc định nghĩa là khả năng giao dịch T hỗ trợ X thì cũng hỗ trợ Y.
Khai phá luật kết hợp đƣợc phân thành hai bài toán con:
Bài toán 1: Tìm tất cả các tập mục mà có độ hỗ trợ lớn hơn độ hỗ trợ tối thiểu do ngƣời dùng xác định. Các tập mục thoả mãn độ hỗ trợ tối thiểu đƣợc gọi là các tập mục phổ biến.
Bài toán 2: Dùng các tập mục phổ biến để sinh ra các luật mong muốn. Ý tƣởng chung là nếu gọi ABCD và AB là các tập mục phổ biến, thì chúng ta có thể xác định luật nếu AB => CD giữ lại với tỷ lệ độ tin cậy:
sup( ) ) sup( AB ABCD conf
nếu conf ≥ minconf thì luật đƣợc giữ lại (luật này sẽ thoả mãn độ hỗ trợ tối thiểu vì ABCD là phổ biến).
b. Một số tính chất liên quan đến các tập mục phổ biến
Tính chất 1: Độ hỗ trợ (support) cho tất cả các tập con (subset): A, B là tập các mục, nếu A B thì sup(A) sup(B) vì tất cả các giao dịch của D hỗ trợ B thì cũng hỗ trợ A.
Tính chất 2: Nếu một mục trong B không có độ hỗ trợ tối thiểu trên D nghĩa là sup(B) < minsup thì một tập con A của B sẽ không phải là một tập phổ biến vì support(B) support(A) < minsup.
Tính chất 3: Nếu mục B là mục phổ biến trên D, nghĩa là support(B) minsup thì mọi tập con A của B là tập phổ biến trên D vì support(A) support(B) > minsup.
2.1.2.2 Một số hƣớng tiếp cận trong khai phá luật kết hợp
Lĩnh vực khai phá luật kết hợp cho đến nay đã đƣợc nghiên cứu và phát triển theo nhiều hƣớng khác nhau; nhằm cải tiến tốc độ thuật toán, hoặc tìm kiếm luật có ý nghĩa hơn, … Sau đây xin nêu một số hƣớng chính hiện nay:
- Luật kết hợp nhị phân (binary association rule hoặc boolean association rule). - Luật kết hợp có thuộc tính số và thuộc tính hạng mục (quantitative and categorial association rule).
- Luật kết hợp tiếp cận theo hƣớng tập thô (mining association rules base on rough set).
-Luật kết hợp nhiều mức (multi-level association rule). - Luật kết hợp mờ (fuzzy association rule).
- Luật kết hợp với thuộc tính đƣợc đánh trọng số (association rule with weighted items).
- Khai thác luật kết hợp song song (parallel mining of association rules).
Ngoài ra, còn có một số hƣớng nghiên cứu khác về khai thác luật kết hợp nhƣ: khai thác luật kết hợp trực tuyến, khai thác luật kết hợp đƣợc kết nối trực tuyến đến các kho dữ liệu đa chiều (Multidimensional data, data warehouse) thông qua công nghệ OLAP (Online Analysis Processing), MOLAP (multidimensional OLAP), ROLAP (Relational OLAP), ADO (Active X Data Object) for OLAP,...
2.1.3 Thuật toán Apriorid 2.1.3.1 Giới thiệu thuật toán 2.1.3.1 Giới thiệu thuật toán
Thuật toán Apriori do R.Agrawal và R.Srikant đƣa vào năm 1944, nó là nền tảng cho việc phát triển các thuật toán sau này.
Thuật toán Apriori sinh ra các tập mục ứng cử từ các tập mục phổ biến trƣớc đó, nghĩa tìm ứng cử của k- tập mục phổ biến dựa vào (k-1)- tập mục, (k-2)- tập,…trƣớc k trong khi duyệt cơ sở dữ liệu. Apriori dựa vào phƣơng pháp tỉa để bỏ đi các tập mục X có sup(X) < minsup cho trƣớc. Cơ sở của của kỹ thuật này là tính chất của các tập phổ biến: “Mọi tập con của tập phổ biến đều là tập phổ biến”. Vì vậy các các tập ứng cử (vào tập mục phổ biến) gồm k mục có thể đƣợc sinh ra bằng cách nối tất cả các tập mục đã đƣợc sinh ra trƣớc đó và loại bỏ các tập ứng cử viên nếu nó có chứa tập con không phổ biến.
Giả sử các mục trong các giao dịch đƣợc lƣu theo thứ tự từ điển. Ký hiệu
Lk là tập các tập phổ biến có k hạng mục (mỗi phần tử của nó đều hai đối tƣợng: là tập mục và độ hỗ trợ của tập mục đó.
Ck phần tử ứng cử viên hai đối tƣợng: là tập mục và độ hỗ trợ của tập mục đó.
Quá trình khai phá gồm hai bƣớc: kết nối và tỉa
Bước nối:
Để tìm Lk là tập các tập ứng cử viên có k mục đƣợc sinh ra bởi việc nối Lk-1 với chính nó. l1 và l2 Lk-1 đƣợc nối nếu:
l1[1] == l2[1] And l1[2]==l2[2] And… And l1[k-2] = l2[k-2]
And l1[k-1] < l2[k-1]
Dạng của tập mục nhận đƣợc bởi nối l1 và l2 là: l1[1] l1[2] …. l1[k-2] l1[k-1] l2[k-1]
Bước tỉa:
Giả sử Ck chứa Lk, tức là các thành phần của Ck có thể là phổ biến hoặc không, nhƣng tất cả các tập phổ biến k mục đều thuộc Ck điều này làm cho
Card(Ck) sẽ rất lớn nên khối lƣợng tính toán sẽ lớn. Dựa vào tính chất “Mọi tập con của tập phổ biến đều là tập phổ biến” chúng ta có thể bỏ đi ứng cử viên trong Ck nếu nó có tập mục mà tập mục này không có mặt trong Lk-1. Việc duyệt các tập có k-1 mục sẽ rất nhanh bởi thuật toán luôn duy trì cây băm của tất cả các tập mục phổ biến đã tìm đƣợc.
2.1.3.2 Thuật toán Apriori
Thuật toán tìm các tập mục phổ biến dựa trên cơ sở sinh ứng cử viên Input: CSDL D, độ hỗ trợ minsup.
Output: Tập các tập mục phổ biến L trong D. Method:
1. Tìm tập mục phổ biến 1 mục L1 = {Các tập phổ biến 1 mục}; 2. For (k=2 ; Lk-1 != ; k++)
3. Do Begin(1) {Ck = apriori_gen(Lk-1, minsup); //Sinh các ứng cử mới Ck từ Lk-1 4. For (Each t In D)
5. Do Begin(2)
6. Ct= Subset (Ck, t); // ứng cử viên đƣợc chứa trong giao dịch t 7. For (Each c In Ct) c.count ++ ; // tăng 1 cho số đếm c 8. End (2);
9. Lk = {c in Ck | c.count minsup);
10. End(1)
11. L = k Lk
//______Sinh ứng cử viên mới hàm apriori_gen ________ Input: Tập k-1 tập mục phổ biến Lk-1, minsup Output: Tập k các tập ứng cử viên Ck
Method:
Void apriori_gen(Lk-1, minsup) // Bƣớc nối
1. For (Each (k-1) itemset l1 In Lk-1 Do 2. For (Each (k-1) itemset l2 In Lk-1 Do
3. If l1[1] == l2[1] And l1[2]==l2[2] And… And l1[k-2] = l2[k-2]
And l1[k-1] < l2[k-1] Then
4. Ck {l1[1], l1[2], …, l1[k-2], l1[k-1], l2[k-1] ; // Bƣớc tỉa
5. For (Each c In Ck Do
6. For (Each subset s In c Do
7. if (s NotIn Lk-1 Then
8. delete c From Ck;
9. Return Ck
2.1.3.3 Giải thích và ví dụ minh họa thuật toán Apriori a. Giải thích
Lần duyệt đầu tiên, sẽ tính số lần xuất hiện của mỗi mục để xác định các 1- itemset phổ biến. Lần duyệt thứ k (k 2) sẽ bao gồm 2 giai đoạn:
* Giai đoạn 1:
Tập phổ biến Lk-1đã tìm thấy ở lần duyệt thứ k-1đƣợc sử dụng để sinh ra các tập ứng cử viên Ck bằng việc sử dụng hàm Apriori_gen.
* Giai đoạn 2:
Dựa vào cơ sở dữ liệu, tính độ hỗ trợ của các ứng của viên trong Ck. Các ứng cử viên trong Ck mà đƣợc chứa trong giao dịch t có thể đƣợc xác định một cách hiệu quả bằng việc sử dụng cây băm đƣợc mô tả nhƣ sau:
Trong giai đoạn 2 (giai đoạn sửa, tỉa): xoá bỏ các tập c Ck sao cho một vài (k-1) – tập con của c không nằm trong Lk-1. Thủ tục này là đầy đủ bởi đối với bất kì tập nào Lk với độ hỗ trợ tối thiểu thì các tập con kích cỡ (k-1) cũng có độ hỗ trợ tối thiểu, do đó nếu ta mở rộng mỗi tập trong Lk-1với tất cả các tập mục có thể và sau đó xoá tất cả các tập mà (k-1) – tập con của nó không nằm trong Lk-1, ta sẽ nhận đƣợc tất các tập trong Lk.
Việc kết nối là tƣơng đƣơng với việc mở rộng Lk-1 với mỗi mục nằm trong cơ sở dữ liệu và sau đó xoá bỏ các tập này mà đối với nó (k-1) – itemset nhận đƣợc bằng việc xoá đi mục thứ (k-1) không nằm trong Lk-1. Ở giai đoạn này Ck
Lk.Với lập luận nhƣ vậy, giai đoạn tỉa là giai đoạn ngƣời ta xoá khỏi Ck tất cả các tập mà các (k-1) tập con của nó không nằm trong Lk-1, cũng không xoá bất kỳ một tập nào có thể nằm trong Lk.
Hàm Subset: Các tập ứng cử viên Ck đƣợc lƣu trữ trong một cây băm. Một nút của cây này hoặc là chứa một danh sách của các tập (nút lá) hoặc bảng băm (một nút trong). Trong mỗi một nút trong, mỗi bucket của bảng băm chỉ đến một nút khác. Gốc của cây băm đƣợc xem ở độ sâu là 1. Một nút trong ở độ sâu d sẽ dẫn đến nút ở độ sâu d+1. Các tập đƣợc lƣu trữ trong các lá. Khi ta bổ sung thêm một tập c, ta bắt từ nút gốc và đi xuống cây cho đến khi ta chạm vào một lá. Tại một nút ở độ sâu d, ta quyết định sẽ đi theo cành nào bằng việc áp dụng hàm băm đối với mục thứ d của tập đó và theo con trỏ trong Bucket tƣơng ứng. Tất cả các nút ban đầu đƣợc tạo ra nhƣ là nút lá. Khi số các tập trong một nút lá vƣợt quá ngƣỡng đƣợc chọn, nút lá này đƣợc chuyển thành một nút trong.
Bắt đầu từ nút gốc, hàm Subset tìm tất cả các ứng cử viên đƣợc chứa trong giao dịch t nhƣ sau: Nếu ta bắt đầu tại một lá, ta tìm những tập trong nút lá này đƣợc chứa trong giao dịch t và bổ sung các mối quan hệ với chúng đối với tập kết quả mong muốn. Nếu ta đang ở một nút trong và ta đến đƣợc nó bằng việc băm mục i, ta băm trên mỗi mục đi sau i trong t và áp dụng một cách đệ quy thủ tục đó đối với nút này trong Bucket tƣơng ứng. Đối với nút gốc, ta băm theo mỗi mục trong t.
Để thấy đƣợc tại sao hàm Subset trả lại tập các tham khảo mong muốn hãy để ý đến những gì sẽ xảy ra tại nút gốc. Đối với bất kỳ tập c nào đƣợc chứa trong giao dịch t, mục đầu tiên cần phải có trong t. Tại nút gốc, việc băm mọi mục trong t đảm bảo đƣợc rằng ta chỉ không biết các tập mà nó bắt đầu với một mục không nằm trong t.
b. Ví dụ minh họa
Bảng 2.1. Các mặt hàng và nhãn
STT Tên mặt hàng Nhãn
1 Bột giặt B
2 Nƣớc sả vải N
3 Dầu gội đầu D
4 Xà phòng bánh X
5 Sữa tắm S
6 Kem đánh răng K
Ta có cơ sở dữ liệu giao dịch D trong bảng sau: Bảng 2.2. Các giao dịch
TID Nội dung giao dịch
T1 {K, B, D, N}
T2 {D, B, S, X, N}
T3 {S, B, N, X}
T4 {N, B, D}
Giả sử độ hỗ trợ tối thiểu cho trƣớc minsup = 60%. Các tập ứng cử viên C1 chỉ gồm 1 hạng mục và độ hỗ trợ tƣơng ứng trong bảng 2.3.
Lấy tích L1 L1 (nối L1và L1) để có C2 Bảng 2.5. Ứng viên C2 Bảng 2.6. Ứng viên C2 Tính độ hỗ trợ trong C2 để có L2 Bảng 2.7. Ứng viên C2 Bảng 2.8. Ứng viên L2 Lấy tích L2 L2 (nối L2 và L2) để có C3 Bảng 2.9. Ứng viên C3 Cuối cùng chúng ta có L = L1 L2 L3 = {{B}, {N}, {D}, {B, N}, {B, D}, {N, D}, {B, N, D}} Ta có các luật: B N; B D ; N D N B; D B ; D N B N, D; N B, D ; D B, N ; B, N D ; B, D D ; N, D B; 2-hạng mục {B, N} {B, D} {N, D} 2-hạng mục Độ hỗ trợ {B, N} 4/4 = 100% {B, D} 4/4 = 100% {N, D} 3/4 = 75% 3-hạng mục {B, N, D} 3-hạng mục {B, N, D} Bỏ các hạng mục có sup < minsup = 60% Bỏ các hạng mục có sup < minsup = 60%
2.1.4 Thuật toán AprioriTID 2.1.4.1 Giới thiệu 2.1.4.1 Giới thiệu
Thuật toán AprioriTID đƣợc cải tiến từ thuật toán Apriori nhằm cải tiến việc duyệt database quá nhiều lần để đếm số lần xuất hiện của các tập ứng viên trong các giao tác.
Thuật toán AprioriTID sử dụng tập Ck để tính độ ủng hộ cho các phần tử của
tập Ck khi k>1 thay cho việc duyệt CSDL. Mỗi phần tử của tập Ck có dạng <TID,
X> với X là tập các ứng viên thuộc Ck tƣơng ứng với giao tác t có mã TID hay ta có thể viết <t.TID, c Ck | c có trong t >. Nếu giao tác t không chứa một tập ứng viên nào (Xk = ) thì giao tác t không đƣợc đƣa vào Ck. Do đó, số phần tử của Ck có
thể nhỏ hơn số lƣợng các giao tác trong cơ sở dữ liệu, đặc biệt khi k lớn. Khi số phần