Thuật toán Apriori [18, 21, 22]

Một phần của tài liệu KHAI PHÁ DỮ LIỆU VÀ THUẬT TOÁN KHAI PHÁ LUẬT KẾT HỢP SONG SONG (Trang 40 - 44)

, x ik }→ {x ik

2.3.1.1Thuật toán Apriori [18, 21, 22]

25

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên htt p ://www.lr c - tnu. ed u. v n

Apriori là thuật toán khai phá luậ t kết hợp do RaKesh Agrawal, Tomasz Imielinski, Anin Sawami đưa ra vào năm 1993, làền tảng cho việc phát triển những thuật toán sau này. Thuật toán sinh tập mục ứng cử từ những tập mục phổ biến ở bước trước, sử dụng kĩ thuật “tỉa” để bỏ đi tập mục ứng cử không thỏa mãn ngưỡng hỗ trợ cho trước.

Các ký hiệu sử dụng trong thuật toán:

Lk = {l1, l2,…, li, …} tập các k-itemset phổ biến.

Ck = {c1, c2,…, ci, …} ật p các k -itemset ứng cử, mỗi c i có 2 trường itemset count dùng để chứa tập mục và số đếm hỗ trợ của tập mục đó trong cơ sở dữ liệu.

Nội dung thuật toán

Dữ liệu vào: Tập các giao dịch D, ngưỡng hỗ trợ minsup

Dữ liệu ra: Tập Answer bao gồm các tập mục phổ biến trên D Phương pháp:

L1 = {large 1-itemset};

for (k = 2; Lk-1 ≠ ; k++) do begin

Ck = apriori_gen(Lk-1); // sinh tập mục ứng cử mới Ck;

forall giao dịch t ∈ D do begin

Ct = subset(Ck, t); // các tập mục ứng cử chứa trong t;

forall tập mục ứng cử ci ∈ Ct do ci.count ++ ; end; end; Lk = {ci ∈ Ck ci.count ≥ minsup} Answer = ∪kLk ; Giải thích thuật toán

Trong thuật to án này, giai đoạn đầu đơn giản chỉ là việc tính độ hỗ trợ của các mục. Để xác định L1, ta chỉ giữ lại các mục có độ hỗ trợ lớn hơn hoặc bằng minsup.

Trong các giai đoạn thứ k sau đó (k > 1), mỗi giai đoạn gồm có 2 pha: Pha thứ 1: Các (k -1)-itemset phổ biế n trong tập L k-1 tìm được trong giai đoạn thứ k-1 được dùng để sinh ra các tập mục ứng cử C k bằng cách thực hiện hàm apriori_gen().

26

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên htt p ://www.lr c - tnu. ed u. v n

Pha thứ 2: CSDL D sẽ được quét để tính độ hỗ trợ cho mỗi tập mục ứng cử trong Ck. Các tập mục ứng cử 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.

Hàm apriori_gen() thực hiện hai bước:

Bước kết nối (Join step): Bước này kết nối các phấn tử trong Lk-1. Trong này, giả sử rằng các mục của các tập mục đã được sắp xếp theo thứ tự từ điển. Nếu có k-2 item đầ u tiên (gọi là phần tiền tố) của hai (k -1)-itemset l1, l2 nào đó mà giống nhau thì ta khởi tạo một k -itemset ứng cử cho Ck bằng cách lấy phần tiền tố này hợp với 2 item thứ k-1 của l1 và l2 (có thể phải sắp lại thứ tự cho các item này). Điều kiện l 1[k-1] < l2[k-1] nhằm tránh trường hợp 2 tập mục l1 và l2 giống nhau kết nối với nhau.

Bước cắt tỉa (Prune step): Trong bước này, ta cần loại bỏ tất cả các k- itemset ci ∈ Ck mà tồn tại một (k-1)-itemset s, s ⊂ ci và s ∉ Lk-1. Giải thích điều này như sau: một (k-1)-itemset s, s ⊂ ci và s ∉ Lk-1. Khi đó, sup(s) < minsup vì s không phải là tập phổ biến, mặt khác do ci ⊃ s nên sup(ci) ≤ sup(s) < minsup. Vậy ci không thể là tập phổ biến, nó cần được loại bỏ ra khỏi Ck.

Ví dụ: Cho tập các mục phổ biến L3 = {{a; b; c}; {a; b; d}; {a; c; d}; {a; c; e} ; {b; c; d}}.

Chúng ta kết nối tập mục phổ biến l 1 = {a; b; c} và ậtp mục phổ biến l2 = {a; b; d}, ta được tập mục ứng cử c 1 ={a; b; c; d}. Cả 3 tập con ( {a; b; c};

{a; b; d} ; {b; c; d}) s ⊂ c1 đều thuộc L3 do đó c1 được giữ lại và C4 ← c1. Cũng tương tự, ta kết nối tập mục phổ biến l 3 = {a; c; d} vàậpt mục phổ biến l4 = {a; c; e}, ta sinh ra đợưc tập mục ứng cử c 2 = {a; c; d; e}. Ta có ậtp mục s = {a; d; e} ⊂ c2 mà s ∉ L3 nên tập mục ứng cử c2 bị loại.

Hàm subset và cấu trúc cây băm (hash-tree)

27

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên htt p ://www.lr c - tnu. ed u. v n

28

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên htt p ://www.lr c - tnu. ed u. v n

băm để lưu trữ các tập mụ c ứng cử Ck. Mỗi nút của cây băm hoặc chứa một danh sách của các tập mục (nếu là nút lá) hoặc một băm (hash table) (nếu là nút trong). Tại mỗi nút trong, mỗi phần tử (bucket) của bảng băm trỏ đến một nút khác. Gốc của cây được định nghĩa có độ sâu bằng 1. Nút ở độ sâu d thì trỏ đến nút ở độ sâu (d + 1). Các tập mục được lưu trữ trong các nút lá tạo thành một danh sách liên kết và đã được sắp xếp. Khi số tập mục lưu trong nút lá vượt quá ngưỡng thì nút lá chuyển thành nút trong. Khi thêm một tập mục ci vào cây, ta bắt đầu duyệt từ nút gốc trên cây cho đến khi tìm được nút lá phù hợp, cách thực hiện như sau: ở mỗi nút trong độ sâu d, chúng ta quyết định đi theo nhánh nào bằng cách sử dụng hàm băm đối với mục thứ d (ci[d] lưu mục thứ d) của tập mục ci.

Hàm subset(Ck, t): Hàm này dùng để tìm tất cả các tập mục ứng cử

trong Ck có chứa trong giao dịch t. Để tìm tập mục ứng cử ta bắt đầu từ nút gốc: nếu nút gốc là nút lá thì ta xem các tập mục trong nút lá đó có chứa trong giao dịch t hay không. Trường hợp nút trong, và là kết quả của việc áp dụng hàm băm cho mục thứ i của giao dịch t , thì ta tiếp tục thực hiện hàm băm cho mục thứ (i +1) của giao dịch t, cho đến khi tìm gặp nút lá. Thủ tục tìm này được thực hiện đệ quy.

Một phần của tài liệu KHAI PHÁ DỮ LIỆU VÀ THUẬT TOÁN KHAI PHÁ LUẬT KẾT HỢP SONG SONG (Trang 40 - 44)