Một số thuật toán khai phá tập phổ biến khác

Một phần của tài liệu 28042_1712202001920798LVNguyenHoangNhat (Trang 32 - 34)

7. Bố cục luận văn

1.2.5. Một số thuật toán khai phá tập phổ biến khác

Thuật toán Apriori-Tid [2, 4]:

Như đã đề cập ở phần trên, thuật toán Apriori quét toàn bộ CSDL trong mỗi giai đoạn để tính độ hỗ trợ. Việc quét toàn bộ CSDL có thể là không cần thiết đối với tất cả các giai đoạn. Với ý tưởng đó, Agrawal et al. đã đề xuất một thuật toán khác, gọi là thuật toán Apriori-TID.

Tương tự thuật toán Apriori, thuật toán Apriori-TID cũng sử dụng hàm

apriori_gen() để xác định các tập ứng viên trước khi bắt đầu mỗi giai đoạn. Điểm

khác nhau chủ yếu của thuật toán này so với thuật toán Apriori là nó không sử dụng CSDL để tính độ hỗ trợ trong các giai đoạn k > 1. Thay vào đó nó sử dụng một tập hợp Ck , mỗi phần tử của Ck có dạng <TID, {Xk}>, Xk là một tập large k-itemset mà giao dịch có mã TID chứa đựng. Nhiều thí nghiệm trên nhiều CSDL chỉ ra rằng thuật toán Apriori cần ít thời gian hơn giải thuật Apriori-TID trong các giai đoạn đầu, nhưng mất nhiều thời gian cho các giai đoạn sau.

Thuật toán:

INPUT: Tập các giao dịch D, ngưỡng hỗ trợ minsup OUTPUT: Tập Answer bao gồm các tập phổ biến trên D

(1) L1 = {large 1-itemsets}; (2) C1= database D;

(3) For (k = 2; Lk-1 ≠ ∅; k ++) do begin

(4) Ck = appriori-gen(Lk-1); //New candidates (5) Ck ∅

(6) Forall entries tCk1do begin

(7) Ct = { c  Ck | (c – c[k])  t.set-of-itemsets ⋀ (c – c[k-1])  t.set-of-itemsets }

(8) For all candidate cCtdo (9) c.count++;

(11) end

(12) Lk = { c  Ck | c.count >= minsup}; (13) end

(14) Answer =kLk

Mỗi thành viên của tập Ck tương ứng với một giao dịch t là <t.TID, { c  Ck | c chứa trong t}>. Nếu một giao dịch t không chứa bất kỳ tập k-itemset nào thì dữ liệu của giao dịch đó trong tập Ck bằng ∅, do đó tập Ck sẽ nhỏ hơn rất nhiều so với CSDL

D ban đầu. Đặc biệt k càng lớn thì tập Ck càng nhỏ vì có ít các tập ứng viên được chứa trong các giao dịch, tuy nhiên nếu k nhỏ thì tập Ck sẽ lớn hơn CSDL D ban đầu vì có rất nhiều các ứng viên được chứa trong các giao dịch. Điều này giải thích tại sao khi k càng lớn Apriori-Tid hiệu quả hơn Apriori.

Thuật toán Apriori-Hybrid [2]:

Kết quả chạy thực nghiệm của R. Agrawal cho thấy với k nhỏ, thuật toán Apriori chạy nhanh hơn thuật toán AprioriTid, ngược lại với k lớn, thuật toán AprioriTid chạy nhanh hơn. Khi k nhỏ, số lượng phần tử của Ck không ít hơn số giao tác của CSDL nên việc tính độ hỗ trợ dựa trên Ck không nhanh hơn so với dựa trên CSDL nguyên thủy. Ngoài ra mỗi phần tử của Ck có tập X lớn nên mất thời gian để tính toán Ck , tập Ck cũng chiếm bộ nhớ lớn nên có thể vượt khả năng lưu trữ ở bộ nhớ trong máy tính và phải sử dụng đến bộ nhớ ngoài nên mất thêm thời gian đọc và ghi đĩa. Do đó, thuật toán AprioriTid chạy chậm khi k nhỏ. Khi k lớn, số lượng phần tử của Ck nhỏ hơn số giao tác của CSDL nên viêc tính độ ủng hộ dựa trên Ck nhanh hơn so với dựa trên CSDL, tập Ck nhỏ lại, không cần sử dụng đến bộ nhớ ngoài. Do đó, thuật toán AprioriTid chạy nhanh khi k lớn.

Một phần của tài liệu 28042_1712202001920798LVNguyenHoangNhat (Trang 32 - 34)

Tải bản đầy đủ (PDF)

(101 trang)