Thuật toán khắc phục nhược điểm thuật toán Apriori Thuật toán FP-growth

Một phần của tài liệu Tìm hiểu luật kết hợp và kỹ thuật gom cụm trong khai phá dữ liệu – chương trình demo thuật toán Apriori và K-means (Trang 36)

III. MỘT SỐ THUẬT TOÁN PHÁT HIỆN LUẬT KẾT HỢP

2.Thuật toán khắc phục nhược điểm thuật toán Apriori Thuật toán FP-growth

growth.

2.1. Ý tưởng thuật toán

Thuật toán kinh điển Apriori tìm tập mục phổ biến thực hiện tốt bởi rút gọn kích thước các 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, các thuật toán Apriori gặp phải 2 chi phí lớn:

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, để khám phá được một số mẫu phổ biến kích thước (độ dài) là l, thuật toán phải kiểm tra (2l-2 ) các mẫu phổ biến tiềm năng. Ví dụ l=100, chẳng hạn là {a1,a2,....,a100}, nó phải sinh ra tổng số 2100 ≈ 1030 các ứng cử (đây chính là số tập con của tập có 100 phần tử)

Đòi hỏi lặp lại nhiều lần duyệt CSDL để kiểm tra tập rất lớn 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 hơn và CSDL lớn, có nhiều bản ghi, điều này là không thể thực hiện được. Thuật toán Apriori chỉ

thích hợp cho các CSDL thưa (sparse), với các CSDL dày (dense) thì thuật toán thực hiện kém hiệu quả hơn.

Thuật toán mới xuất hiện gần đây có tên là FP-growth được giới thiệu bởi Jiawei Hai Jian Pei và Yiwen Yin năm 2000, sẽ khắc phục được các nhược điểm nêu trên. Thuật toán tìm các tập phổ biến hiệu qủa hơn

thuật toán Apriori bằng việc sử dụng một kỹ thuật khác không cần sinh các ứng cử. Sự hiệu quả của khai phá nhận được với 3 kỹ thuật chính:

Thứ nhất nó mở rộng của cấu trúc cây prefix (prefix tree), được gọi là cây mẫu phổ biến (frequent pattern tree hoặc gọi tắt là FP- tree) dùng để nén dữ liệu thích hợp. Chỉ có các mục độ dài l (l-item) ở trong cây và 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 chặt tới cấu trúc dữ liệu nhỏ hơn (FP-tree), tránh được chi phí lặp lại duyệt qua CSDL.

Thứ hai, phương pháp khai phá phát triển (growth) từng đoạn dựa trên Fp-tree gọi là phương pháp FP – growth đã được thực hiện. Bắt đầu từ mẫu phổ biến độ dài 1, FP-growth chỉ xem xét cơ sở mẫu phụ thuộc của nó (condition pattern base) như là CSDL con (sub-database) bao gồm tập các mục phổ biến cùng xuất hiện với mẫu hậu tố (suffix pattern), xây dựng condition FP-tree tương ứng của nó và thực hiện khai phá đệ qui trên cây này. Mẫu phát triển là nhận được qua việc nối mẫu hậu tố (suffix pattern) với một đoạn mẫu được sinh ra từ condition FP-tree. Khai phá dựa trên FP-tree được thực hiện theo cách phát triển (growth) các đoạn mẫu để tránh chi phí cho việc sinh ra số lượng lớn các tập ứng cử.

Thứ ba, kỹ thuật tìm kiếm được dùng ở đây là dựa vào sự phân chia và

chế ngự (divide-and-conquer method) để 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 FP-growth đã chứng tỏ được tính hiệu quả của nó và thể hiện khai phá cho cả các mẫu ngắn và dài, nhanh hơn thuật toán Apriori, luôn chỉ cần duyệt CSDL 2 lần

2.2. Thuật toán FP-growth.

Đầu tiên, thuật toán duyệt CSDL lần thứ nhất để tính độ hỗ trợ của các tập 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.

Duyệt CSDL lần thứ 2, với mỗi tác vụ 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 đưa vào cây FP-tree.

Phần tiếp theo thuật toán khai phá tìm các mẫu phổ biến trên cây FP-tree đã xây dựng mà không cần duyệt lại CSDL nữa.

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 phổ biế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 tác vụ vào cây thực hiện đệ quy như sau:

Procedure insert_tree(string [p|P], tree có gốc T)

(Ở đó 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 tác vụ t, gọi thủ tục insert_tree(t’,T), ở đó t’ là nội dung của tác vụ t sau khi đã bỏ các mục không phổ biến và sắp theo thứ tự giảm dần của độ hỗ trợ, T là gốc của cây)

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 (adsbygoogle = window.adsbygoogle || []).push({});

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 tập mục phổ biến:

Sau khi xây dựng xong FP-tree cho CSDL, việc khai phá tìm các mẫu phổ biến chỉ thực hiện trên cây FP-tree mà không cần duyệt CSDL nữa.

Ý tưởng thuật toán FP-growth:

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 liên kết duỵê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 mà n.itemname=A, xác định các tập phổ biế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.

Thuật toá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:

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β,β)}

2.3. Đánh giá thuật toán FP-growth.

Thuật toán này như đã phân tích ở trên, nó thực hiện hiệu quả hơn thuật toán Apriori, thực hiện tốt cho mẫu phổ biến ngắn cũng như dài. Ta có một số nhận xét về thuật toán như sau:

Độ phức tạp về thời gian:

• Thời gian xây dựng cây là o(n), ở đó n là số các tác vụ của CSDL. Tức là tuyến tính với số các tác vụ.

Độ phức tạp về không gian:

• O(n), n là số các tác vụ của CSDL

• Độ cao của cây được giới hạn bởi kích thước của tác vụ lớn nhất

Ưu điểm:

Thuật toán không bao giờ bị ngắn bởi một mẫu dài nào của mọi tác vụ. Cây FP-tree duy trì đầy đủ thông tin cho khai phá các mẫu phổ biến. Đồng thời thuật toán cũng 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 không phổ biế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 phổ biế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.

Một phần của tài liệu Tìm hiểu luật kết hợp và kỹ thuật gom cụm trong khai phá dữ liệu – chương trình demo thuật toán Apriori và K-means (Trang 36)