Thuật toán FP_growth

Một phần của tài liệu Phương pháp luật kết hợp và ứng dụng luận văn thạc sĩ (Trang 42 - 49)

7. forall các tập mục phổ biến lt ∈ Lt do begin

3.6. Thuật toán FP_growth

- Như ta đã biết thuật toán Apriori là một bước đột phá về khai thác các tập mục thường xuyên bằng cách sử dụng kỹ thuật tỉa để rút gọn kích thước của các tập mục ứng cử. Tuy nhiên, trong trường hợp số tập mục nhiều, tập mục dài hoặc ngưỡng độ hỗ trợ nhỏ thì thuật toán gặp phải hai chi phí lớn:

+ Sinh ra số lượng khổng lồ các tập mục ứng cử. Ví dụ nếu có 104 tập mục 1- mục thường xuyên thì sẽ sinh ra hơn 107 tập mục 2- mục ứng cử và thực hiện kiểm tra xem tập mục nào thường xuyên. Hơn nữa, để phát hiện ra các tập mục thường xuyên có kích thước n, thuật toán phải kiểm tra 2n-2 các tập mục thường xuyên tiềm ẩn.

+ Phải duyệt qua cơ sở dữ liệu nhiều lần. Số lần duyệt cơ sở dữ liệu của thuật toán Apriori bằng độ dài của tập mục thường xuyên dài nhất tìm được. Trong trường hợp tập mục thường xuyên dài và cơ sở dữ liệu lớn thì không thể thực hiện được. Thuật toán Apriori phù hợp với cơ sở dữ liệu thưa, còn với cơ sở dữ liệu dàythì thuật toán kém hiệu quả.

- Để khắc phục những chi phí lớn của thuật toán Apriori năm 2000 Jiawei Han, Jian pei và Yiwen Yin đã đưa ra thuật toán mới được gọi là FP_growth để tìm tập mục thường xuyên bằng cách không sinh các tập mục ứng cử từ các tập mục thường xuyên trước mà vẫn hiệu quả bằng cách sử dụng ba kỹ thuật sau:

+ Th nht, thuật toán sử dụng cấu trúc cây mẫu thường xuyên FP_Tree để nén dữ liệu. Cấu trúc FP_Tree là mở rộng của cấu trúc cây prefix. Những nút trong cây là các mục có độ dài là 1, được gán nhãn bởi tên mục và được sắp xếp theo tần suất xuất hiện của các mục để các mục có số lần xuất hiện nhiều thì sẽ chia sẻ nhiều hơn.

+ Th hai, khai thác phát triển từng đoạn mẫu dựa trên FP_Tree, bắt đầu từ mẫu thường xuyên có kích thước 1 và chỉ kiểm tra trên cơ sở mẫu phụ

thuộc (conditional pattern base), khởi tạo FP_Tree của mẫu phụ thuộc, thực hiện khai thác đệ quy trên cây này. Mẫu kết quả nhận được qua việc kết nối mẫu hậu tố với mẫu mới được sinh ra từ FP_Tree phụ thuộc.

+ Th ba, dùng kỹ thuật tìm kiếm phân hoạch không gian tìm kiếm và chia để trịđể chia nhiệm vụ khai thác thành những nhiệm vụ nhỏ hơn và giới hạn lại các mẫu làm giảm không gian tìm kiếm.

* Cây mu thường xuyên

Cây mẫu thường xuyên là cây có cấu trúc được định nghĩa như sau: Định nghĩa: FP_Tree bao gồm nút gốc có nhãn “Null”, tập các cây non prefix như là cây con của nút gốc và một bảng tiêu đề các mục thường xuyên.

- Mỗi nút của cây con prefix có 3 trường: Item_name, count, nút liên kết (node link); với item_name là nhãn của nút, count là số giao tác mà mục này xuất hiện, node_link dùng để liên kết với nút tiếp theo trong cây nếu có cùng Item_name hay Null nếu không có.

- Mỗi lối vào trong bảng tiêu đề có hai trường: Item_name và node_link, node_link trỏ tới nút đầu tiên trong FP_Tree có chứa nhãn Item_name.

Ví d: Cho cơ sở dữ liệu với các giao tác và các mục thường xuyên trong mỗi giao tác được sắp xếp giảm dần theo độ hỗ trợ (minsup = 3/5) được thể hiện trong bảng sau:

TID Các mục trong giao tác Các mục thường xuyên được sắp xếp

T100 f, a, c, d, g, i, m, p f, c, a, m, p T200 a, b, c, f, l, m, o f, c, a, b, m T300 b, f, h, j, o f, b T400 b, c, k, s, p c, b, p T500 a, f, c, l, p, m, n f, c, a, m, p Bng 3.7.Các giao tác cơ s d liu

- Từ định nghĩa trên chúng ta có thuật toán xây dựng cây mẫu thường xuyên

FP_Tree như sau:

* Thuật toán xây dựng cây FP_Tree

Input: Cơ sở dữ liệu và ngưỡng độ hỗ trợ minsup

Output: Cây mẫu thường xuyên FP_Tree

Method:

Bước 1: Duyệt qua cơ sở dữ liệu để đếm số lần xuất hiện của các mục trong giao tác và xác định mục thường xuyên và độ hỗ trợ của chúng, sắp xếp các mục thường xuyên giảm dần theo độ hỗ trợ, ta được danh sách các mục được sắp xếp L.

Bước 2: Xây dựng FP_Tree. Đầu tiên tạo nút gốc, sau đó với mỗi giao tác t chọn và sắp xếp các mục thường xuyên theo thứ tự trong danh sách L, thực hiện thêm vào cây FP_Tree bằng cách gọi hàm insert_tree(p|T), thay đổi trường count cho phù hợp.

Ví d: Với cơ sở dữ liệu trình bày trong bảng 2.2 ta có:

Hình 3.1. Mt cây mu thường xuyên

- Duyệt qua cơ sở dữ liệu để tìm tập mục thường xuyên và sắp xếp giảm dần theo độ hỗ trợ:

Mục Số lần xuất hiện F 4 C 4 A 3 B 3 M 3 P 3 Khi to cây T, gc có nhãn Null

- Duyệt qua cơ sở dữ liệu lần thứ hai, với mỗi giao tác loại bỏ các mục không thường xuyên, các mục còn lại sắp xếp giảm dần theo số lần xuất hiện, dãy các mục phổ biến đó được thêm vào cây và thay đổi sốđếm cho phù hợp.

- Kết quả thu được FP_Tree đầy đủ như sau:

Hình 3.2. Cây FP_Tree ca cơ s d liu trong bng 2.2

Thủ tục thêm các mục thường xuyên vào cây FP_Tree: Procedure Insert_Tree(string[p|P], Tree T)

//Trong đó p là mục đầu tiên của dãy và P là phần còn lại của dãy {If cây T có nút con N mà N.Item_name = p Then N.count++ Else

Tạo nút mới N;

N.Item_name:= p; N.count:=1; Thay đổi nút liên kết cho p; If p≠∅ then

Insert_Tree (p,N): }

* Khai thác tập mục thường xuyên

Sau khi xây dựng xong cây FP_Tree cho cơ sở dữ liệu việc 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 cơ sở dữ liệu.

Tính cht: Khi tìm các mẫu có chứa mục ai chỉ cần tính toán cho các nút của cây con tiền tố P của ai số lần xuất hiện của các nút trong đường dẫn tiền tố bằng số lần xuất hiện của nút ai.

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

- Bắt đầu từ dưới lên trên của bảng header và cây, 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 có n.Item_name = A tìm tất cả các đường dẫn của các nút N đó xuất phát từ gốc của cây tới nút N. Từ các đường dẫn đó ta xây dựng cây mẫu (partten tree) phụ thuộc cho A. Sau đó tìm các mục thường xuyên có chứa A từ cây mẫu phụ thuộc này. Ví dụ lần lượt xét mục theo thứ tự từ dưới lên p, m, .., f như sau:

- Xuất phát từ mục p:chiếu vào cây FP_Tree hình 3.9 ta có hai đường dẫn có chứa p là: f:4, c:3, a:3, m:2, p:2 và c:1, b:1, p:1.

- Theo các đường dẫn trên ta có tập mục fcam và xuất hiện 2 lần cùng với p, cb xuất hiện 1 lần cùng với p. Số lần xuất hiện của mục p là 2+1= 3 lần. Vì vậy ta tìm các mục thường xuyên có chứa p mà có cùng tần suất xuất hiện như p.

- Từ đó ta có hai tiền đường dẫn của p là: {(f:2, c:2, a:2, m:2)}, {(c:1, b:1)} và là cơ sở mẫu phụ thuộc. Khởi tạo cây mẫu thường xuyên trên cơ sở mẫu phụ thuộc ta được FP_Tree phụ thuộc và thực hiên khai thác đệ quy trên cây này ta thu được kết quả, trong cây này chỉ có một nhánh (c:3) nên ta chỉ có tập mục thường xuyên (cp) thỏa mãn ngưỡng minsup=3/5.

- Mục m có tần suất xuất hiện là 3, có hai đường dẫn có chứa mục m là (f:4, c:3, a:3, m:2) và (f:4, c:3, b:1, m:1) (Ta không cần xét mục p vì tất cả các tập mục thường xuyên có chứa p đã được tìm thấy khi xử lý với mục p)

- Từ hai đường dẫn trên ta có hai cơ sở mẫu phụ thuộc {(f:2, c:2, a:2), f:1, c:1, a:1, b:1}. Khởi tạo cây điều kiện trên đó ta được một đường dẫn đơn <f:3, c:3, a:3> sau đó thực hiện khai thác đệ quy trên cây mẫu thường xuyên này. Hình 3.8 thể hiện quá trình khai thác các tập mục thường xuyên. Bắt đầu thực hiện khai thác lần lượt với các nút có nhãn a, c, f thu được một tập mục thường xuyên am, cm, fm, tiếp đến thực hiện với mẫu thường xuyên (am:3) là <f:3, c:3|cm> thu được tập mục cam, fam và fcm. Thực hiện với <f:3|cam> được fcam. Như vậy với đường dẫn đơn thì kết quả khai thác có thể là tổ hợp của tất cả các mục trong đường dẫn.

Hình 3.3. Các FP_Tree ph thuc

Thuật toán FP_Growth

Procedue FP_Growth(tree, α)

{ If (cây chứa một đường đơn P) then

Sinh mẫu α∪β với support = độ hỗ trợ nhỏ nhất của các nút trong β

Else

For mỗi ai trong header của cây Do {Sinh mẫu β =αi∪α

support= αi .support

Tìm cơ sở mẫu phụ thuộc của β và khởi tạo cây FP_Tree phụ thuộc Treeβ

If Treeβ ≠∅ Then FP_Growth(Treeβ, β) }

- Thuật toán FP_growth hiệu quả ở chỗ là chỉ duyệt qua cơ sở dữ liệu hai lần để xác định các mục thường xuyên và tạo cây FP_Tree. Nhờ sử dụng cấu trúc FP_Tree mà trong quá trình khai thác các mẫu thường xuyên không cần phải duyệt lại cơ sở dữ liệu mà chỉ cần xuất phát từ các mục ai trong bảng tiêu đề, sinh ra những cơ sở mẫu phụ thuộc, những ai đã được xử lý thì sẽ không xem xét trong xử lý các ai sau đó.

- Thuật toán phân hoạch không gian tìm kiếm để thu nhỏ không gian tìm kiếm, dùng phương pháp chia để trị để phân rã ra thành những nhiệm vụ nhỏ tạo nên hiệu quả. Sắp xếp các mục giảm dần theo tần suất xuất hiện của các mục dẫn đến các mục thường xuyên hơn thì được chia sẻ nhiều hơn.

- Thuật toán phù hợp với cả dữ liệu thưa, dày và mẫu dài. Đồng thời thuật toán cũng loại bỏ ngay những mục không phổ biến từđầu.

Một phần của tài liệu Phương pháp luật kết hợp và ứng dụng luận văn thạc sĩ (Trang 42 - 49)

Tải bản đầy đủ (PDF)

(61 trang)