2.2 Tổng quan về luật kết hợp
2.2.3 Mô tả thuật toán Apriori dưới dạng giả mã
Đầu vào:
- Cơ sở dữ liệu giao dịch D = {t|t : giao dịch}. - Độ hỗ trợ tối thiểu min_sup > 0
Đầu ra: Tập hợp tất cả các tập phổ biến.
Phương pháp:
(0) mincount = min_sup * |D|;
(1) F1 = {tất cả các tập mục phổ biến có độ dài bằng 1}; (2) For (k=2; Fk-1 , k++){
(3) Ck = Apriori-gen (Fk-1); //Sinh mọi ứng viên có độ dài k. (4) For ( mỗi giao dịch t D) { // quét CSDL D để đếm
(5) Ct = ( c Ck| c t); //tất cả các ứng viên c thuộc Ck với c là tập con của giao dịch t. (6) For (mỗi ứng viên cCt)
(7) c.Count++;
(8) } // kết thúc lặp các giao dịch t D
(10) } //kết thúc vòng lặp. (11) } Return kFk
Thuật toán Apriori được trình bày dưới dạng giả mã và các thủ tục liên quan. Bước 1 của Apriori là tìm tất cả các tập mục phổ biến F1 có độ dài bằng 1. Từ bước 2 đến bước 10, Fk-1 được sử dụng để sinh ứng viên Ck theo trình tự để tìm Lk với k ≥ 2. Thủ tục Apriori_gen sinh các ứng viên và sử dụng tính chất Apriori để loại trừ những tập con không phổ biến (bước 3). Thủ tục này được mô tả phía dướị Một khi tất cả các ứng viên đã được sinh ra, CSDL sẽ được quyét (bước 4). Với mỗi giao dịch, một hàm con được sử dụng để tìm tất cả các tập con của giao dịch đã được ứng cử (bước 5), và số ứng viên của mỗi giao dịch được tính (bước 6 và 7). Cuối cùng, tất cả các ứng viên đáp ứng độ hỗ trợ tối thiểu (bước 9) cấu thành lên tập mục phổ biến kF
k (bước 11). Thủ tục được gọi sau đó để sinh luật kết hợp từ tập mục phổ biến.
Thủ tục Apriori_gen thực hiện kết nối và cắt tỉạ Trong thành phần kết nối, Fk-1 được kết nối với Fk-1 để sinh các ứng viên tiềm năng (bước 1 đến bước 4). Thành phần tỉa (bước 5 đến bước 7) dựa vào tính chất Apriori để loại bỏ các ứng viên mà có tập con không phổ biến. Thủ tục has_infrequent_subset dùng để kiểm tra các tập con không phổ biến.
Procedure Apriori_gen (Fk-1 : tập mục phổ biến có độ dài k-1) (1) For (mỗi tập mục l1 Fk-1)
(2) For (mỗi tập mục l2 Fk-1)
(3) If ( l1[1] = l2[1] l1[2] = l2[2] … l1[k-2] = l2[k-2] l1[k-1] = l2[k-1] ) then { (4) c = l1⋈ l2 ; // bước kết nối: sinh ứng viên
(5) If has_infrequent_subset (c, Fk-1) then
(6) delete c; //bước tỉa: loại bỏ các ứng viên không có lợi (7) Else thêm c vào Ck;
(8) }
Procedure has_infrequent_subset (c: ứng viên, Fk-1: tập các tập phổ biến có độ dài (k-1));
(1) For (mỗi (k-1) – tập con s của c) (2) If s Fk-1 then
(3) Return TRUE;
(4)Return FALSE;