Thủ tục Ap_GenRules

Một phần của tài liệu (LUẬN VĂN THẠC SĨ) Một số phương pháp khai phá dữ liệu sinh luật kết hợp Luận văn ThS Công nghệ thông tin 1.01.10 (Trang 41 - 43)

Input: Tập k-mục phổ biến lk dùng để sinh luật, tập các m-mụcHm dùng làm vế phải của luật, ngưỡng tin cậy cực tiểu minconf.

Output: Tập luật ứng với lk.

Thực hiện: Ap_GenRules(lk, Hm, minconf)

(1) Foreach (hm in Hm) {

(2) conf = sup(lk) / sup(lk\hm); (3) If (conf  minconf)

(4) OutputRule((lk\hm) => hm, sup(lk), conf); (5) Else (6) Hm = Hm \ {hm}; (7) } (8) If (Hm != null & k > m+1) { (9) Hm+1 = Apriori_Gen(Hm); // Sinh tập ứng cử từ Hm. (10) Ap_GenRules(lk, Hm+1, minconf); (11) } (12) Return;

Thuật toán nhanh hơn này sử dụng thủ tục Apriori_Gen mô tả ở Bảng 3.4. Ta có thể thấy thuật toán vừa đưa ra nhanh hơn thuật toán đơn giản ban đầu vì thủ tục Apriori_Gen đã sử dụng tính chất Apriori để loại các ứng cử (của Hm+1) có tập con không nằm trong tập những mục đang xét (Hm).

Cụ thể: xét tập mục ABCDE và giả sử rằng chỉ có các luật ACDE=>BABCE=>D

là các luật có 1-mục ở phần kết luận thoả mãn độ hỗ trợ cực tiểu minconf.

Trong thuật toán đơn giản, thủ tục GenRules(ABCDE, ACDE, minconf) sẽ kiểm tra tất cả 4 luật với 2-mục ở phần kết luận (vế phải) là: ACD=>BE, ACE=>BD, ADE=>BC

CDE=>BA.

Còn trong thuật toán sau, nhờ thủ tục Apriori_Gen với Hm={B,D} ta có Hm+1={BD} và do vậy chỉ cần xét duy nhất luật ACE=>BD là đủ.

Độ phức tạp của các thuật toán sinh luật trong trường hợp xấu là O(n*2lmax) trong đó n

3.2. Thuật toán FP-Growth

3.2.1. Giới thiệu

Thuật toán kinh điển Apriori tìm tập mục phổ biến như trình bày ở trên thực hiện khá tốt bởi việc thu gọn không gian tập ứng cử nhờ kỹ thuật tỉa. Tuy nhiên trong tình huống mà số các mẫu nhiều, mẫu dài hoặc độ hỗ trợ cực tiểu thấp thì thuật toán này gặp phải 2 chi phí lớn là:

+ Chi phí cho số lượng khổng lồ các tập ứng cử. Ví dụ: nếu có 104 tập 1-mục phổ biến thì thuật toán Apriori sẽ cần sinh ra hơn 107 các ứng cử 2-mục và thực hiện kiểm tra sự xuất hiện của chúng. Hơn nữa, để khai phá được một mẫu phổ biến kích thước là l thì thuật toán phải sinh và kiểm tra (2l-1) mẫu phổ biến tiềm năng. Ví dụ nếu l = 100 thì nó phải sinh ra tổng số 2100 tức là khoảng 1030 ứng cử (khổng lồ).

+ Đòi hỏi lặp quá nhiều lần duyệt CSDL (bộ nhớ ngoài) để tìm độ hỗ trợ của các ứng cử. Số lần duyệt CSDL của thuật toán Apriori bằng độ dài của mẫu phổ biến dài nhất tìm được. Trong trường hợp mẫu phổ biến dài và CSDL lớn thì điều này là không thể thực hiện được. Và vì vậy thuật toán Apriori chỉ thích hợp với các CSDL thưa (sparse), với các CSDL dày (dense) thuật toán này tỏ ra rất kém hiệu quả.

Năm 2000, Jian Pei, Jiawei Han và Yin đã đề xuất thuật toán FP-Growth giúp giải quyết cơ bản các vấn đề trên [106]. Đây là một thuật toán không sinh ứng cử và hiệu quả hơn thuật toán Apriori với 3 kỹ thuật chính sau:

+ Thực hiện mở rộng cấu trúc cây prefix, được gọi là cây mẫu phổ biến (Frequent pattern tree hay gọi tắt là FP-tree) dùng để nén CSDL. Các nút của cây được sắp đặt để các nút xuất hiện thường xuyên hơn có thể dễ dàng chia sẻ với các nút xuất hiện ít hơn. CSDL lớn được nén trong cấu trúc dữ liệu nhỏ hơn này giúp tránh việc duyệt CSDL trên bộ nhớ ngoài, không những vậy quá trình duyệt cũng ít hơn.

+ Phương pháp thực hiện khai phá phát triển (growth) từng đoạn dựa trên FP-tree. Bắt đầu từ mỗi mẫu phổ biến độ dài 1, FP-Growth chỉ xem xét CSDL phụ thuộc mẫu (conditional pattern base) tương ứng mà thôi. Thực hiện xây dựng conditional FP-tree từ CSDL con này và thực hiện khai phá đệ quy cây cho đến khi cây suy biến. Mẫu phát triển nhận được qua việc nối một đoạn mới (prefix pattern) được sinh ra từ conditional FP-tree với mẫu đang xét (suffix pattern). Khai phá dựa trên FP-tree thực hiện theo cách phát triển các đoạn mẫu để tránh chi phí trong việc sinh ra số lớn các ứng cử.

+ Kỹ thuật tìm kiếm được dùng ở đây là dựa trên chiến lược chia để chế ngự (divide and conquer), phân rã nhiệm vụ khai phá thành tập các nhiệm vụ nhỏ hơn với giới hạn các mẫu trong các CSDL nhằm thu gọn không gian tìm kiếm.

Phương pháp này đã chứng tỏ được tính hiệu quả của nó và có thể được thực hiện để khai phá cho các mẫu ngắn và cả các mẫu dài, và luôn chỉ cần duyệt CSDL 2 lần.

Thuật toán FP-Growth được thực hiện như sau:

(1) Duyệt CSDL để tìm độ hỗ trợ của từng mục và bỏ những mục không thoả minsup. (2) Sắp các mục còn lại theo thứ tự giảm dần của độ hỗ trợ ta thu được danh sách L. (3) Duyệt CSDL lần thứ 2, với mỗi giao dịch t ta chỉ xét các mục thuộc L và sắp xếp các mục trong t theo thứ tự như xuất hiện trong L và lưu kết quả vào cây FP-tree.

(4) Tìm các mẫu phổ biến trên cây FP-tree (không cần duyệt lại CSDL nữa). Xét ví dụ sau với ngưỡng độ hỗ trợ cực tiểu minsup = 3 (3/5 hay 60%) ta có:

TID Các mục Độ hỗ trợ L Các mục phổ biến đã sắp 1 a, c, d, f, g, i, m, p a:3, b:3, c:4, d:1, e:1, f:4, g:1, h:1, i:1, j:1, k:1, l:2, m:3, n:1, p:3, o:2. f:4, c:4, a:3, b:3, m:3, p:3. f, c, a, m, p 2 a, b, c, f, l, m, o f, c, a, b, m 3 b, f, h, j, o f, b 4 b, c, k, p, s c, b, p 5 a, c, e, f, l, m, n, p f, c, a, m, p

Một phần của tài liệu (LUẬN VĂN THẠC SĨ) Một số phương pháp khai phá dữ liệu sinh luật kết hợp Luận văn ThS Công nghệ thông tin 1.01.10 (Trang 41 - 43)