Thuật toán do Agrawal đề nghị năm 1994, được Cheung đánh giá mang tính chất lịch sử trong lĩnh vực khám phá luật kết hợp, vì đã vượt xa tầm của các thuật toán quen
Lương Trí Quân Trang 31
thuộc trong lĩnh vực này. Thuật toán dựa trên một nhận xét khá đơn giản là bất kỳ tập hợp con nào của tập xuất hiện – thường xuyên cũng là tập xuất hiện – thường xuyên. Do đó, trong quá trình đi tìm các tập ứng cử viên, nó chỉ cần dùng đến các tập ứng cử viên vừa xuất hiện ở bước ngay trước đó, chứ không cần dùng đến tất cả các tập ứng cử viên (cho đến thời điểm đó). Nhờ vậy, bộ nhớ được giải phóng đáng kể.
Lương Trí Quân Trang 32
Nhận xét: Khi ghép Baskets với chính nó, mỗi giỏ ta có 45 cách chế ra các cặp ứng viên [do (10*9)/2=45], và do có 10 triệu giỏ mua hàng, nên ta phải xét 45x107
trường hợp để lọc ra các cặp – thường xuyên.
Trong khi đó nếu sử dụng Thuật toán Apriori, trước hết ta giảm được đáng kể kích thước của Baskets, vì ở bước 1 ta đi tìm các phần tử (mặt hàng) xuất hiện – thường xuyên.
SELECT * FROM Baskets GROUP BY item
HAVING COUNT (*) >= s;
Sự giảm kích thước của Baskets chưa phải là điểm cốt yếu. Điểm cốt yếu là khi ta kết hợp để tìm cặp, ta sẽ giảm được bình phương lần.
Cốt lõi của thuật toán Apriori là hàm apriori_gen() do Agrawal đề nghị năm 1994. Hàm này hoạt động theo 2 bước, bước 1- tập hợp Lk-1 tự kết nối (join) với chính nó để tạo ra tập ứng cử viên Ck. Sau đó hàm apriori_gen() loại bỏ các tập hợp có một hợp con (k-1) phần tử không nằm trong Lk-1 (vì chúng không thể là tập hợp xuất hiện – thường xuyên, theo như nhận xét ban đầu).
Lương Trí Quân Trang 33
Hàm sau đây có nhiệm vụ rà soát từng tính chất và đo đếm xem giá đỡ của nó bằng bao nhiêu. Nói cách khác, ở bước đầu tiên Agrawal dùng hàm count() để tìm ra các tập hợp xuất hiện – thường xuyên có 1 phần tử.
Lương Trí Quân Trang 34
Lương Trí Quân Trang 35
Dùng thuật toán Apriori tính ra các tập hợp xuất hiện – thường xuyên
Bản thân Agrawal đưa ra nhận xét: thuật toán Apriori hiệu quả hơn so với AIS và SETM. Trong một ví dụ minh họa, ở bước thứ tư, thuật toán Apriori lược bỏ hết, chỉ còn giữ lại một tập ứng cử viên duy nhất, trong khi cả hai thuật toán kia vẫn đề nghị tới 5 ứng cử viên. Do đó, để đạt được kết quả như Apriori, hai thuật toán kia chắc chắn phải cần đến những tính toán bổ trợ.
Thuật toán Apriori cải tiến cũng giải quyết 2 tình huống “xấu”, đó là khi Ck hoặc Lk-1 to quá, không chứa đủ trong bộ nhớ tính toán. Khi đó, cần tu chỉnh lại hàm apriori_gen()
một chút.
Lương Trí Quân Trang 36
Thuật toán Apriori nhị phân sử dụng các vector bit cho các thuộc tính, vector nhị phân n chiều ứng với n giao tác trong cơ sở dữ liệu. Có thể biểu diễn cơ sở dữ liệu bằng một ma trận nhị phân trong đó dòng thứ I tương ứng với giao tác (bản ghi) ti và cột thứ j tương ứng với mục (thuộc tính ) ij. Ma trận biểu diễn cơ sở dữ liệu ví dụ cho bảng dưới:
Ma trận biểu diễn cơ sở dữ liệu
Các vector biểu diễn nhị phân cho các tập 1 thuộc tính có dạng sau:
Vector biểu diễn nhị phân cho tập 1 thuộc tính
Lương Trí Quân Trang 37
Vector biểu diễn nhị phân cho các tập 2 thuộc tính
Các vector biểu diễn cho thấy {A,C}, {C,D} có độ hỗ trợ 33% nhỏ hơn độ hỗ trợ tối thiểu MinSupp=50% (cho trước) nên bị loại. Các vector biểu diễn nhị phân cho các tập 3 thuộc tính có dạng:
Vector biểu diễn nhị phân cho các tập 3 thuộc tính
Các vector biểu diễn nhị phân cho các tập 4 thuộc tính có dạng:
Lương Trí Quân Trang 38