Để khắc phục nhược điểm trên của thuật tốn Apriori, J. Han, J Pei, Y. Yin đề xuất thuật tốn FP-Growth [10]. Thuật tốn FP-Growth được xây dựng với 3 kỹ thuật chính:
(1) Nén dữ liệu thích hợp vào một cấu trúc cây gọi là cây FP-Tree. Chỉ cĩ các 1 – tập mục (1-item) ở trong cây và các nút của cây được sắp xếp để 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.
(2) Thực hiện phương pháp khai phá phát triển (growth) từng đoạn dựa trên cây FP-tree gọi là phương pháp FP-Growth.
(3) Kỹ thuật tìm kiếm được dùng ở đây là dựa vào sự phân chia, “chia để trị”, phân rã nhiệm vụ khai phá thành các nhiệm vụ nhỏ hơn.
Thuật tốn FP-Growth do nén tồn bộ CSDL lên một cấu trúc dữ liệu nhỏ hơn là cây FP-Tree nên tránh được việc duyệt nhiều lần CSDL (thuật tốn chỉ duyệt CSDL 2 lần). Tiếp theo thuật tốn khai phá cây bằng cách phát triển dần các mẫu mà khơng sinh các tập mục ứng viên, do đĩ tránh được khối lượng tính tốn lớn. Phương pháp FP-Growth đã chứng tỏ được tính hiệu quả của nĩ và cĩ thể thực hiện khai phá cho cả các mẫu ngắn và dài, nhanh hơn thuật tốn Apriori, luơn chỉ cần duyệt CSDL 2 lần.
Thuật tốn FP-Growth thực hiện như sau:
Đầu tiên, thuật tốn duyệt CSDL lần thứ nhất để tính độ hỗ trợ của từng mục (đếm số lần xuất hiện của từng mục).
Tiếp đến, những mục khơng đủ độ hỗ trợ bị loại. Các mục cịn lại được sắp theo thứ tự giảm dần của độ hỗ trợ (cũng tức là giảm dần theo số lần xuất hiện trong CSDL), ta nhận được danh sách L các mục đã sắp xếp.
Số hóa bởi Trung tâm Học liệu http://lrc.tnu.edu.vn/ Duyệt CSDL lần thứ hai, với mỗi giao tác t, loại các mục khơng đủ độ hỗ trợ, các mục cịn lại theo thứ tự giống như xuất hiện trong L (tức là thứ tự giảm dần theo độ hỗ trợ) được cất vào cây FP-tree.
Phần tiếp theo thuật tốn khai phá tìm các mẫu thường xuyên trên cây FP-Tree đã xây dựng mà khơng cần duyệt lại CSDL nữa.
Phương pháp dựa trên cây FP-Tree
Cây FP-tree là cấu trúc cây với một số đặc điểm sau:
- Cĩ một nút cha được đánh nhãn NULL, những nút con nối với nút cha là những thành phần chung của nhiều giao dịch được nén lại với nhau (item prefix
subtree), bên cạnh cũng cĩ một mảng các mục đơn thường xuyên (frequent- item header table).
- Mỗi nút trong item prefix subtree cĩ ba trường dữ liệu: mã mục, số tích lũy và con trỏ liên kết. Mã mục tương ứng mục mà nút này đại diện, số tích lũy là số giao dịch cĩ chứa chung phần mục này, con trỏ liên kết dùng để liên kết 2 nút đại diện chung một mã mục ở hai item prefix subtree khác nhau. Giá trị con trỏ liên kết mang giá trị rỗng khi là nút cuối cùng trong chuỗi liên kết.
- Mỗi phần tử trong frequent-item header table gồm 2 trường: mã mục và con trỏ liên kết đến đầu nút của chuỗi liên kết các nút cùng đại diện chung cho một mục.
Phép chiếu trên cây FP-tree
Sau khi xây dựng cấu trúc FP-tree cho tồn bộ CSDL chỉ gồm những mục đơn thỏa ngưỡng hỗ trợ, ta phải duyệt cây để tìm ra những tập thường xuyên thỏa
minsup. Hiệu quả của quá trình khai thác phụ thuộc nhiều vào phương pháp duyệt.
Phương pháp duyệt phải thỏa những yêu cầu:
- Đảm bảo kết quả tập thường xuyên là đầy đủ. - Kết quả các tập thường xuyên khơng bị trùng lặp - Những tập thường xuyên tạo ra thỏa ngưỡng minsup.
Số hóa bởi Trung tâm Học liệu http://lrc.tnu.edu.vn/
Phép chiếu từ dưới lên:
- Dựa trên thứ tự của f-list, chọn mục hạt giống bắt đầu từ mục cĩ độ hỗ trợ nhỏ nhất thỏa minsup cho đến mục cĩ độ hỗ trợ lớn nhất.
- Trên cây FP-tree, duyệt từ những nút chứa mục hạt giống tiến dần đến nút gốc để xây dựng f-list cục bộ và FP-tree cục bộ của mục hạt giống.
- Nếu duyệt hết mục trong f-list thì quay lui một bước và thực hiện tiếp.
Phép chiếu từ trên xuống:
- Dựa trên thứ tự của f-list, chọn mục hạt giống bắt đầu từ mục cĩ độ hỗ trợ lớn nhất cho đến mục cĩ độ hỗ trợ nhỏ nhất thỏa minsup.
- Trên cây FP-tree, duyệt từ nút chứa mục hạt giống tiến dần xuống nút lá của cây và xây dựng f-list cục bộ của mục hạt giống. Ghi nhận vị trí của nút con trực tiếp của những nút chứa mục hạt giống trong f-list cục bộ.
- Nếu f-list cục bộ khơng cịn mục nào thì quay lui một bước và thực hiện tiếp Để hiểu phương pháp này làm việc thế nào, ta xét khai phá CSDL giao tác DB sau với độ hỗ trợ tối thiểu minsup = 2.
TID Các mục dữ liệu Các mục thƣờng xuyên đã sắp xếp T1 A, C, T, W C, W, A, T T2 C, D, W C, W, D T3 A, C,T, W C, W, A, T T4 A, C, D, W C, W, A, D T5 A, C, D, T, W C, W, A, D, T T6 C, D, T C, D, T
Bảng 1.5: CSDL giao tác minh họa cho thuật tốn FP-Growth
- Bước 1: Duyệt CSDL, đếm số lần xuất hiện của từng mục, loại các mục khơng đủ
độ hỗ trợ.
- Bước 2: Sắp các mục đủ độ hỗ trợ theo thứ tự giảm dần của độ hỗ trợ, ta nhận
Số hóa bởi Trung tâm Học liệu http://lrc.tnu.edu.vn/ Mục Số lần xuất hiện C 6 W 5 A 4 D 4 T 4
- Bước 3: Duyệt lại CSDL lần thứ hai và xây dựng FP-tree.
Cây FP-tree được xây dựng như sau: Khởi tạo cây T, gốc của cây cĩ nhãn null.
Khi duyệt CSDL lần thứ hai, với mỗi giao tác, loại các mục khơng thường xuyên, các mục cịn lại sắp theo thứ tự giảm dần của số lần xuất hiện, dãy các mục thường xuyên đĩ được thêm vào cây cùng với thay đổi số đếm của các mục trên cây cho phù hợp. Quá trình xây dựng cây như hình sau:
Hình 1.4: Cây FP-tree được xây dựng dần khi thêm các giao tác t1 ÷ t6
T:2 Root Root C:1 T:1 W:1 A:1 Root C:2 T:1 W:2 A:1 D:1 Root C:3 T:2 W:3 A:2 D:1 Root C:4 W:4 A:3 D:1 D:1 Root C:5 T:2 W:5 A:4 D:1 D:2 T:1 Root C:6 T:2 W:5 A:4 D:1 D:2 T:1 D:1 T:1
Số hóa bởi Trung tâm Học liệu http://lrc.tnu.edu.vn/ Từ tập dữ liệu ban đầu, ta xây dựng header table của cây FP như sau:
Hình 1.5: Cây FP-tree của CSDL DB trong bảng 1.5
Cấu trúc cây FP-tree như sau:
Gốc của cây nhãn null, các đường đi trên cây biểu diễn item prefixs Các liên kết trên cây: Liên kết các mục xuất hiện cĩ tên giống nhau. Mỗi nút (trừ nút gốc) bao gồm:
+ Tên mục (item identifier) + Count: Số đếm
+ Node link: Liên kết đến nút tiếp theo trên cây cĩ cùng tên.
Bảng các đầu mục thường xuyên (header table): Bắt đầu cho các liên kết.
Thủ tục thêm một dãy các mục (đã sắp giảm dần theo độ hỗ trợ) của một giao tác vào cây thực hiện đệ qui như sau:
Procedure insert_tree (string [p | P] , tree cĩ gốc T)
(Trong đĩ: P là mục thứ nhất của dãy các mục và P là phần cịn lại. Trong lần duyệt thứ hai, với mỗi giao tác t, gọi thủ tục insert_tree (t’, T), với t’ là nội dung của giao tác t sau khi đã bỏ các mục khơng thường xuyên và sắp theo thứ tự giảm dần của độ hỗ trợ, T là gốc của cây).
Mục dữ liệu
Con trỏ
đầu danh sách liên kết C W A D T Root C:6 T:2 W:5 A:4 D:1 D:2 T:1 D:1 T:1
Số hóa bởi Trung tâm Học liệu http://lrc.tnu.edu.vn/
Procedure insert_tree (string [p | P], tree cĩ gốc T
Nếu T cĩ nút con N mà N.itemname = p thì N.count++ Ngược lại
Tạo một nút mới N;
N.itemname:=p; N.count:=1;
Thay đổi nút liên kết cho p bao gồm N;
Nếu p khác rỗng gọi thủ tục insert_tree (P, N); Tìm các tập mục thường xuyên:
Sau khi xây dựng xong FP_tree cho CSDL, việc khai phá tìm các tập mục thường xuyên chỉ thực hiện trên FP_tree mà khơng cần duyệt CSDL nữa.
Thuật tốn FP_Growth như sau:
Bắt đầu từ dưới lên của bảng header và cây, với mỗi mục A: Dùng nút liên kết duyệt qua tất cả các nút trên cây mà xuất hiện A, với mỗi nút N mà N.itemname = A, xác định các tập mục thường xuyên cĩ xuất hiện A, thực hiện bằng cách chỉ cần tìm các đường đi từ gốc tới N. Ví dụ: Đầu tiên xét mục T, sau đĩ đến D, ... như sau:
Mục T: + Cĩ 3 đường:
. C:6, W:5, A:4, T:2 . C:6, W:5, A:4, D:2, T:1 . C:6, W:5, A:4, D:2, T:1 . C:6, D:1, T:1
(Tức là: CWAT xuất hiện 2 lần với T, CWAD 1 lần, CDT 1 lần. Số lần xuất hiện của T là 2 + 1 + 1 = 4).
+ Từ đĩ suy ra cơ sở mẫu phụ thuộc (conditional pattern base) của T là: . C:2, W:2, A:2
. C:1, W:1, A:1, D:1 . C:1, D:1 . C:1, D:1
Số hóa bởi Trung tâm Học liệu http://lrc.tnu.edu.vn/ + Xây dựng đệ quy cây FP_tree cho cơ sở phụ thuộc (condition base) và tìm các tập mục thường xuyên ở trên cây đĩ, sau đĩ thêm T vào tất cả chúng.
Ở đây, cơ sở phụ thuộc là: . C:2, W:2, A:2 . C:1, W:1, A:1, D:1 . C:1, D:1
Trong đĩ chỉ cĩ C, W, A, D là thường xuyên (xuất hiện ≥ 2 lần) do đĩ tập mục thường xuyên tìm được là CT, WT, AT, DT.
Mục D: - Cĩ 3 đường:
. C:6, W:5, A:4, D:2 . C:6, W:5, D:1 . C:6, W:5, D:1 . C:6, D:1
(Bây giờ ta bỏ qua T vì các tập mục thường xuyên chứa nĩ đã tìm rồi). - Cơ sở mẫu phụ thuộc của D là:
. C:2, W:2, A:2 . C:1, W:1 . C:1, W:1 . C:1
- FP_tree phụ thuộc của m là chỉ cĩ 1 đường: . C:4
- Tìm theo cách đệ qui các tập mục thường xuyên trên FP_tree phụ thuộc, đầu tiên cho C, sau đĩ cho W và A.
Ta làm tương tự. Cuối cùng cấu trúc cây FP-tree cục bộ tương ứng với CSDL{C} : tree{C}=Ø
Thuật tốn FP_Growth:
Khai phá FP_tree được thực hiện bởi gọi lần đầu FP_Growth (FP_tree, null) thực hiện như sau:
Số hóa bởi Trung tâm Học liệu http://lrc.tnu.edu.vn/
Procedure FP_Growth (Tree, )
Nếu cây tree chứa một đường đơn P thì
Với tất cả các tổ hợp (kí hiệu ) của các nút trong đường đi P
Sinh ra mẫu với support = độ hỗ trợ nhỏ nhất của các nút trong Ngược lại: Với mỗi mục ai trong header table của tree{
Sinh ra ai với support = ai.count;
Xây dựng cơ sở mẫu phụ thuộc của và sau đĩ FP_tree phụ thuộc của là
Tree ;
Nếu Tree thì gọi FP_Growth(Tree , )}
Tập thường xuyên thu được khi thực hiện thuật tốn FP-Growth là:
{T, TD, TDC, TA, TAW, TAC, TAWC, TW, TWC, TC, D, DA, DW, DWA, DC, DAC, DWC, DAWC, A, AW, AC, ACW, W, WC, C}
Nhận xét:
Thuật tốn FP-Growth khá hiệu quả vì sử dụng cấu trúc cây FP-tree và duyệt theo chiều sâu với mơ hình chia để trị. Nĩ thực hiện hiệu quả hơn thuật tốn Apriori, thực hiện tốt cho tập mục thường xuyên ngắn cũng như dài. Ta cĩ một số nhận xét về thuật tốn như sau:
- Về thời gian: Chỉ duyệt CSDL 2 lần.
- Về khơng gian: Độ cao của cây được giới hạn bởi độ dài của giao tác dài nhất.
Cây FP-tree duy trì đầy đủ thơng tin cho khai phá các tập thường xuyên, rút gọn hợp lý các thơng tin khơng cần thiết bởi cách là các mục dữ liệu khơng thường xuyên đã bị loại bỏ ngay từ đầu.
Dùng kỹ thuật sắp theo trật tự giảm dần của tần số xuất hiện, điều đĩ dẫn đến các mục thường xuyên hơn được chia sẻ nhiều hơn. Cây FP-tree khơng bao giờ lớn hơn CSDL gốc.
Số hóa bởi Trung tâm Học liệu http://lrc.tnu.edu.vn/