Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Lập Trình

Thuật toán Apriori (Apriori Algorithm) là gì?

Apriori là thuật toán gốc do R. Agrawal và R. Srikant phát triển năm 1994 để khai thác tập mục thường xuyên (frequent itemsets) cho quy tắc liên kết Boolean (Boolean association rules). Thuật toán phụ thuộc vào trường hợp thuật toán cần kiến thức trước thuộc tính tập mục thường xuyên.

Apriori dùng phương pháp lặp gọi là tìm kiếm theo cấp (level-wise search), nơi k-tập mục khám phá (k+1)-tập mục. Trước hết, tập tập mục thường xuyên 1-itemset khám phá bằng cách duyệt database để gom số lượng cho mỗi mục, và nhận những mục thỏa mãn hỗ trợ tối thiểu (minimum support). Tập kết quả ký hiệu L1.

Tiếp theo, L1 tìm L2, tập tập mục thường xuyên 2-itemset, tìm L3, v.v., cho đến khi không tìm thấy thêm k-tập mục thường xuyên. Việc tìm mỗi Lk cần một quét hoàn chỉnh database.

Để tăng hiệu quả tạo cấp tập mục thường xuyên, thuộc tính thiết yếu gọi là thuộc tính Apriori (Apriori property). Nó giảm không gian tìm kiếm.

Thuộc tính Apriori (Apriori property) – Một số tập con không rỗng của tập mục thường xuyên cũng nên thường xuyên.

Thuộc tính Apriori dựa trên quan sát sau. Theo định nghĩa, nếu tập mục I không thỏa mãn ngưỡng hỗ trợ tối thiểu min_sup, thì I không thường xuyên; tức P(I) < min_sup.

Nếu mục A chèn vào tập mục I, tập mục kết quả (I ∪ A) không xuất hiện thường xuyên hơn I. Do đó, I∪A không thường xuyên như P(I ∪ A) < min_sup.

Thuộc tính này thuộc họ thuộc tính gọi là antimonotone (nghịch đơn điệu) vì nếu tập không vượt qua bài test, một số siêu tập sẽ thất bại bài test tương tự. Gọi là antimonotone vì thuộc tính đơn điệu trong bối cảnh thất bại bài test.

Quy trình hai bước được theo dõi, bao gồm join (kết hợp) và prune (cắt tỉa):

Bước join (The join step) – Để tìm Lk, tập ứng viên k-tập mục tạo bằng cách join Lk-1 với chính nó. Tập ứng viên này ký hiệu Ck. Cho L1 và L2 là tập mục trong Lk-1. Ký hiệu Li[j] định nghĩa mục thứ j trong Li (ví dụ: L1[k-2] định nghĩa mục倒数第二在 L1).

Bước prune (The prune step) – Ck là siêu tập của Lk, tức là thành viên có thể không thường xuyên, nhưng một số k-tập mục thường xuyên liên quan trong Ck. Quét database quyết định số lượng mỗi ứng viên trong Ck dẫn đến xác định Lk (tức là một số ứng viên có số lượng không nhỏ hơn min support count là thường xuyên theo định nghĩa, do đó thuộc Lk). Ck có thể lớn và bao gồm tính toán lớn.