Phương pháp khai phá tập mục phổ biến không cần sinh ứng viên

Một phần của tài liệu Khai phá mẫu phổ biến, luật kết hợp và thước đo tương quan (Trang 28)

2.3.1. Một số bất cập trong phương pháp khai phá tập phổ biến sử dụng kỹ thuật sinh ứng viên

Có rất nhiều các nghiên cứu từ những năm 2000 trở về trước như: khai phá tập mục phổ biến đóng vai trò thiết yếu trong khai phá luật kết hợp ( Agrawal et al.,1993,1996; Agrawal and Srikant¸1994; Mannila et al.,1994), các mối tương quan ( Brin et al., 1997), thuyết nhân quả ( Silverstein et al.,1998), mẫu dãy ( Agarawal và Srikant, 1995), mẫu đa chiều ( Lent et, al.,1997),... và rất nhiều các nhiệm vụ khai phá khác, đa số đều sử dụng phương pháp Apriori – like dựa trên một thuyết đơn điệu Apriori (của Agrawal và Srikant, 1994) đó là: “Nếu trong CSDL có một mẫu có độ dài k không phổ biến thì mẫu cha của nó có độ dài (k+1) cũng không bao giờ phổ biến”.

Bản chất của thuyết này là sinh các mẫu ứng viên có độ dài ( k+1) dựa vào tập mẫu phổ biến có độ dài k ( k 1) và kiểm tra xem chúng có phổ biến trong CSDL hay không. Phương pháp sinh ứng viên này có ý nghĩa đặc biệt trong việc giảm kích thước tập ứng viên. Tuy nhiên, trong một số trường hợp khác như số lượng các mẫu phổ biến quá lớn, hoặc ngưỡng hỗ trợ tối thiểu thấp, phương pháp này gặp phải hai vấn đề lớn sau:

Phát sinh một số lượng lớn tập ứng viên.Ví dụ, nếu ở đó có 104 tập mục phổ biến có độ dài 1 (1-itemsets) , thuật toán Apriori sẽ cần sinh nhiều hơn 107 tập mục ứng viên độ dài 2 (2-itemsets). Thêm nữa, để tìm ra một mẫu phổ biến có độ dài là 100, như {a1,...,a100}, nó phải sinh ít nhất 2100-1 1030 ứng viên tất cả. Phải lặp lại nhiều lần việc duyệt CSDL và kiểm tra một lượng lớn các tập ứng

viên bằng các mẫu phù hợp (pattern matching). Vấn đề này đặc biệt đúng khi khai phá các mẫu dài (long patterns).

Để cải thiện những bất cập nêu trên, Jiawei Han, Jian Pei và Yiwen đề xuất thuật toán

cập về việc sinh các ứng viên, đồng thời sử dụng một cấu trúc dữ liệu mới dạng cây để giảm chi phí trong khai phá các mẫu phổ biến. Phương pháp này được gọi là khai phá tập mục phổ biến không cần sinh ứng viên, phương pháp này dựa trên 3 kỹ thuật chính sau:

Sử dụng kỹ thuật nén và tích hợp dữ liệu vào một cấu trúc cây, được gọi là cây mẫu phổ biến - frequent pattern tree viết tắt là FP-tree. Trong cây chỉ có các tập mục có độ dài bằng 1 (1-itemsets) và các node trên cây được sắp xếp sao cho các node xuất hiện thường xuyên hơn có thể dễ dàng chia sẻ với các node xuất hiện ít hơn. Như vậy CSDL lớn được nén chặt vào một cấu trúc dữ liệu nhỏ hơn (cây FP-tree). Việc khai phá mẫu phổ biến sẽ được thực hiện trên cây FP-tree này, thay vì làm việc với toàn bộ CSDL.

Phương pháp khai phá tăng trưởng từng đoạn (growth mining) dựa trên FP-tree được gọi là phương pháp FP-growth. Bắt đầu từ các mẫu có độ dài bằng 1 ( coi đó như một mẫu hậu tố - suffix pattern ban đầu). Xây dựng cơ sở mẫu phụ thuộc - conditional pattern base bao gồm tập đường dẫn tiền tố - prefix path

trong FP-tree xảy ra đồng thời với mẫu hậu tố, và coi chúng như một tập CSDL con – sub database. Từ đó xây dựng cây phụ thuộc FP-tree tương ứng với mỗi cơ sở mẫu phụ thuộc và thực hiện khai phá đệ quy trên cây này. Mẫu phát triển ( pattern growth)được hình thành bằng sự móc nối mẫu hậu tố với các mẫu phổ biến sinh ra từ một cây điều kiện FP-tree.

Chiến lược chia để trị ( divide-and-conquer): Phân rã nhiệm vụ khai phá thành các nhiệm vụ nhỏ hơn trên các mẫu được lưu trữ trong các CSDL phụ thuộc, từ đó làm giảm kích thước không gian tìm kiếm. Đầu tiên, biểu diễn tập mục phổ biến bởi một cây mẫu phổ biến – frequent pattern tree hay còn gọi là FP-tree.

Trong đó, thông tin liên kết tập mục được giữ lại. Sau đó chia CSDL đã được nén bởi cây FP-tree vào một tập CSDL phụ thuộc – conditional databases,

trong đó, mỗi tập CSDL được liên kết với một mục phổ biến hoặc “một đoạn mẫu – pattern fragment”, sau đó khai phá mỗi CSDL một cách tách biệt. Phương pháp này giúp giảm kích thước của cơ sở mẫu phụ thuộc, hơn nữa, thay vì phải tìm kiếm các mẫu phổ biến dài, ta chỉ cần tìm kiếm trong những tập mục ngắn hơn sau đó móc nối với phần hậu tố. Điều đó làm giảm đáng kể chi phí tìm kiếm!

Theo như nghiên cứu cho thấy, thuật toán FP-growth hiệu quả trong cả khai phá các mẫu phổ biến dài và các mẫu phổ biến ngắn và tốc độ xử lý của nó nhanh hơn thuật toán Apriori trước đây.

2.3.2. Thuật toán FP-growth

Thuật toán được thực hiện qua hai giai đoạn:

Giai đoạn 1: Xây dựng cây mẫu phụ thuộc FP-tree.

Giai đoạn 2: Sử dụng cây FP-tree để khai phá các mẫu phổ biến.

Để có cái nhìn trực quan về phương pháp này, chúng ta sẽ minh họa thuật toán dựa trên CSDL giao dịch D, của Bảng 2.1 trong ví dụ 2.1.

2.3.2.1.Giai đoạn 1: Xây dựng cây mẫu phụ thuộc FP-tree

Để xây dựng cây mẫu phụ thuộc FP-tree, thuật toán phải duyệt CSDL hai lần. -Lần duyệt CSDL đầu tiên:

Trong lần duyệt này, giống như thuật toán Apriori, bắt đầu từ tập mục phổ biến có độ dài 1 (1-itemsets) và tính độ hỗ trợ của chúng (Giả sử số đếm hỗ trợ tối thiểu min-sup count = 2). Sắp xếp tập mục phổ biến này theo thứ tự giảm dần của độ hỗ trợ. Ta có một danh sách L như sau: L= {{I2:7}, {I1:6}, {I3:6}, {I4:2}, {I5:2}}.

-Duyệt CSDL lần thứ hai:

Cây mẫu phổ biến FP-tree được xây dựng như sau. Đầu tiên, tạo gốc của cây, gán nhãn là “null”.

Duyệt CSDL lần thứ hai. Sắp xếp các mục trong mỗi giao dịch theo thứ tự trong L (ví dụ, sắp xếp theo thứ tự giảm dần của độ hỗ trợ) và loại bỏ những mục có số đếm hỗ trợ nhỏ hơn min-sup count. Đồng thời tạo một nhánh cây ứng với mỗi giao dịch.

Ví dụ: Sau khi duyệt CSDL lần hai, CSDL D sẽ có dạng như sau:

TID Các mục hàng đã mua Sắp xếp các mục theo thứ tự L

T01 I1, I2, I5 I2, I1, I5

T02 I2, I4 I2, I4

T03 I2, I3 I2, I3

T04 I1, I2, I4 I2, I1, I4 (adsbygoogle = window.adsbygoogle || []).push({});

T05 I1, I3 I1, I3

Bảng 2.2.

Duyệt CSDL và sắp xếp theo thứ tự L.

T06 I2, I3 I2, I3

T07 I1, I3 I1, I3

T08 I1, I2, I3, I5 I2, I1, I3, I5

T09 I1, I2, I3 I2, I1, I3

Nhận thấy không có mục nào bị loại bỏ khỏi giao dịch do chúng đều có độ hỗ trợ lớn hơn 2. Duyệt giao dịch đầu tiên trong CSDL D “ T01: I1, I2, I5”, chứa 3 mục ( I2, I1, I5 theo thứ tự L), từ đó tạo ra nhánh đầu tiên của cây với ba node <I2:1>, <I1:1>, và <I5:1>, trong đó I2 được kết nối như một con của gốc, I1 liên kết tới I2, và I5 kết nối với I1 (Hình 2.6a).

Ứng với giao dịch thứ hai, “T02: I2, I4” chứa các mục I2 và I4 theo thứ tự L. Thông thường, kết quả của nhánh này là I2 kết nối với gốc và I4 kết nối với I2. Tuy nhiên, nhánh này phải chia sẻ một tiền tố chung (a common frefix) I2, đã được thiết lập trong đường đi của nhánh ứng với giao dịch T01 trước đó. Do đó, số đếm của node I2 được tăng thêm 1, và tạo một node mới , <I4:1>, liên kết như một con của <I2:2>.

Hình 2.6 a,b . Tạo cây FP-tree

Nhìn chung, khi xét đến các nhánh ứng với mỗi giao dịch khi thêm vào cây, số đếm của mỗi node có tiền tố chung sẽ tăng thêm 1, và các node của các mục theo sau tiền tố được tạo ra và được liên kết cho phù hợp.

Để thuận tiện cho việc duyệt cây, một bảng header được xây dựng bao gồm ba trường: (1) ID-mục, (2) Độ hỗ trợ ứng với từng mục, (3)Node-link. Trong đó mỗi mục trong bảng chỉ đến sự kiện của nó trong cây theo một chuỗi Node-link. Cây thu được sau khi duyệt tất cả các giao dịch trong CSDL D được thể hiện trong Hình 2.7 có biểu diễn các liên kết với chuỗi node-links. Cây FP-tree thu được đã chứa toàn bộ thông tin về CSDL. Bằng cách này, vấn đề khai phá mẫu phổ biến trong CSDL được biến đổi hoàn toàn thành khai phá cây FP-tree.

Như vậy một cây mẫu phổ biến (FP-tree) có cấu trúc như sau:

I4:1 I5:1 I1:1 I2:1 Null{} I5:1 I1:1 I2:2 Null{}

1.Bao gồm một node gốc có nhãn là “null”, một tập các cây con tiền tố (item-prefix subtree) là con của node gốc, và một bảng frequent-item-header.

2.Mỗi node trong cây con tiền tố (item-prefix subtree) bao gồm 3 trường : item- name, count node-link. Trong đó, item-name là tên của node tương ứng với các mục trong CSDL. Count là số giao dịch được mô tả bởi một phần đường dẫn đến node này, và node-link liên kết tới node tiếp tiếp theo trong cây FP-tree có cùng tên với node (cùng item-name), hoặc bằng null nếu không có node nào cùng tên.

3.Mỗi mục trong bảng frequent-item-header bao gồm 3 trường: (1) Id_mục, (2)độ hỗ trợ và (3)node-link ( chỉ đến node đầu tiên trong cây FP-tree có item-name

trùng với Id_mục).

Từ những phân tích trên, cây FP-tree được xây dựng bằng thuật toán giả mã như sau:

Input:

CSDL giao dịch D,

Ngưỡng hỗ trợ tối thiểu min-sup.

Output: Cây mẫu phổ biến FP-tree tương ứng với CSDL giao dịch D.

Phƣơng pháp:

Cây FP-tree được xây dựng qua hai bước:

(a)- Quét CSDL lần đầu, tìm tập mục phổ biến F cùng với độ hỗ trợ của chúng. -Sắp xếp các mục trong F theo thứ tự giảm dần của độ hỗ trợ, ta có danh sách

tập mục phổ biến L đã sắp xếp.

(b)- Tạo gốc T của cây, gán nhãn T= “null”.

-Duyệt CSDL lần thứ hai, với mỗi giao dịch, loại bỏ những mục không phổ biến (độ hỗ trợ < min-sup), sắp xếp các mục phổ biến theo thứ tự L. (adsbygoogle = window.adsbygoogle || []).push({});

-Xét chuỗi [pP] là danh sách các mục đã sắp xếp của một giao dịch, trong đó, p là mục đầu tiên của danh sách, P là phần còn lại của danh sách. Gọi thủ tục

Insert_tree (string [pP],T), với T là gốc của cây FP-tree đang cần tạo. Chi tiết về thủ tục Insert_tree (string [pP],T) mô tả dưới dạng giả mã như sau:

Procedure Insert_tree ( string [pP], T);

1.If T có node con N mà N.ItemName = p Then N.Count ++; 2.Else

4. N.ItemName := p; N.Count:=1; 5. Kết nối node gốc T với N;

6. Node-link của node N kết nối tới các node có cùng tên thông qua cấu trúc node-link.

7.If P <> Then Call Insert_tree ( P, N);

Hình 2.7.Một cây FP-tree đã đƣợc nén thông tin. 2.3.2.2. Giai đoạn 2: Khai phá cây FP-tree để tìm mẫu phổ biến

x Cơ sở mẫu phụ thuộc Cây FP-tree Sinh các mẫu phổ biến

I5 {{I2,I1:1},{I2,I1,I3:1}} <I2:2,I1:2> {I2,I5:2},{I1,I5:2},{I2,I1,I5:2} I4 {{I2,I1:1},{I2:1}} <I2:2> {I2,I4:2}

I3 {{I2,I1:2},{I2:2},{I1:2}} <I2:4,I1:2>,<I1:2> {I2,I3:4},{I1,I3:4},{I2,I1,I3:2}

I1 {{I2:4}} <I2:4> {I2,I1:4}

Bảng 2.2 : Khai phá cây FP-tree bằng cách tạo các cơ sở mẫu phụ thuộc

FP-tree được khai phá như sau. Bắt đầu từ mẫu phổ biến có độ dài 1 (được coi như là một mẫu hậu tố - suffix pattern ban đầu), cấu trúc của cây được xây dựng dựa trên sở mẫu phụ thuộc - conditional pattern base (được coi như là một “CSDL con – subdatabase”, bao gồm tập đường dẫn tiền tố - prefix path trong FP-tree cùng xảy ra với mẫu hậu tố), sau đó xây dựng chính cây FP-tree của nó, và thực hiện khai phá đệ quy trên một cây. Mẫu phát triển (pattern growth) hình thành bằng cách móc nối mẫu hậu tố với các mẫu phổ biến sinh ra từ một cây điều kiện FP-tree.

Khai phá FP-tree được tổng hợp trong Bảng 2.2 và chi tiết như sau. Đầu tiên chúng ta xét I5, đây là mục cuối cùng trong L. I5 xuất hiện ở hai nhánh của FP-tree trong

Hình.2.7. (Sự hiện diện của I5 trên cây FP-tree có thể dễ dàng tìm thấy bằng chuỗi

node-links của nó). Đường dẫn hình thành bởi các nhánh là <I2, I1, I5:1> và <I2, I1, I3, I5 :1>. Do đó, coi I5 như một hậu tố, bản thân nó tương ứng với hai đường dẫn tiền tố là <I2, I1 : 1> và <I2, I1, I3 : 1>, được gán cho cơ sở mẫu phụ thuộc của I5. Cây điều kiện FP-tree của nó chỉ bao gồm một đường dẫn đơn, <I2:2, I1:2>; không bao gồm I3 bởi vì số đếm hỗ trợ của nó bằng 1, ít hơn so với số đếm hỗ trợ tối thiểu (min- sup count = 2). Đường dẫn đơn sinh tất cả các liên kết (combinations) của các mẫu phổ biến : {I2, I5:2},{I1, I5:2},{I2,I1, I5:2}.

Đối với I4, hai cơ sở mẫu phụ thuộc được tạo ra dựa trên cơ sở mẫu hậu tố là {{I2 I1:1}, {I2:1}}, từ đó tạo ra cây điều kiện FP-tree chỉ có một node đơn <I2:2>, do đó nhận một mẫu phổ biến, {I2,I1:2}.

Hình 2.8. Cây điều kiện FP-Tree ứng với node I3

Giống như phân tích ở trên, cơ sở mẫu phụ thuộc của I3 là {{I2,I1:2}, {I2:2}, {I1:2}}. Cây điều kiện FP-tree của nó bao gồm hai nhánh, < I2:4, I1:2> và <I1:2>, như được thể hiện trong Hình.2.8, từ đó sinh được tập các mẫu phổ biến là , {{I2,I3:4}, {I1,I3:4}, {I2, I1,I3:2}}. Chú ý rằng mặc dầu I5 đứng ngay sau I3 trong nhánh đầu tiên, nhưng ta thấy không có I5 trong phân tích ở đây, bởi vì một vài mẫu phổ biến đã chứa I5 được phân tích ứng với lần xét I5.

Cuối cùng thì cơ sở mẫu điều kiện của I1 là {{I2:4}}, trong đó FP-tree chỉ bao gồm một node, <I2:4>,và sinh ra một mẫu phổ biến, {I2, I1:4}. Thuật toán khai phá này được tổng hợp trong Bảng 2.2.

Như vậy, để khai phá tập mục phổ biến từ cây FP-tree, ta sẽ gọi thủ tục viết dưới dạng giả mã như sau:

// là mẫu hậu tố ứng với cây Tree.

1.IfTree chứa một đường dẫn đơn PThen

2. For mỗi tổ hợp (ký hiệu bởi ) của các node trong đường P.

3. Sinh mẫu   với support-count = Min (support-count của các node trong );

4.Else Với mỗi mục ai trong bảng header của Tree {

5. Sinh mẫu  : = ai  với support_count = ai. support_count

6. Xây dựng cơ sở mẫu phụ thuộc của , từ đó xây dựng cây phụ thuộc FP- tree của  gọi là Tree.

7.IfTree <>ThenFP-growth (Tree, ) } (adsbygoogle = window.adsbygoogle || []).push({});

2.3.2.3. Ƣu điểm của phƣơng pháp FP-growth.

Phương pháp FP-growth biến đổi vấn đề tìm kiếm trên các mẫu phổ biến dài bằng tìm kiếm những mẫu ngắn hơn một cách đệ quy và sau đó móc nối thêm hậu tố. Nó sử dụng các mục phổ biến cuối cùng như một hậu tố, để đề xuất một sự lựa chọn tốt. Cách thức này thực sự đã làm giảm chi phí tìm kiếm.

Khi CSDL lớn, đôi khi xây dựng cây FP-tree dựa trên cơ sở một bộ nhớ chính là không thực tế. Một thay thế thú vị khác là đầu tiên phân chia CSDL thành một tập CSDL dự án (project databases), sau đó xây dựng một FP-tree và khai phá nó trong mỗi CSDL dự án . Áp dụng đệ quy với CSDL dự án nếu cây FP-tree của nó chưa vừa vặn trong bộ nhớ chính.

Qua nghiên cứu cho thấy phương pháp FP-growth hiệu quả đối với cả khai phá mẫu phổ biến ngắn và khai phá mẫu phổ biến dài là tốc độ xử lý nhanh hơn thuật toán Apriori.

2.4. Giới thiệu một số thuật toán khai phá tập mục phổ biến khác 2.4.1. Thuật toán Apriori-TID 2.4.1. Thuật toán Apriori-TID

Như đã biết, thuật toán Apriori quét toàn bộ CSDL trong mỗi giai đoạn để tính độ hỗ trợ. Việc quét toàn bộ CSDL có thể không cần thiết trong mọi giai đoạn. Với ý tưởng này, Agrawal đã đề xuất thuật toán Apriori-TID. Tương tự như thuật toán Apriori, thuật toán này cũng sử dụng hàm Apriori-gen() để xác định các tập mục ứng viên

trước khi bắt đầu mỗi giai đoạn. Điểm khác nhau chủ yếu của thuật toán này so với Apriori là nó không sử dụng CSDL để tính độ hỗ trợ trong các giai đoạn ( với k>1).

Một phần của tài liệu Khai phá mẫu phổ biến, luật kết hợp và thước đo tương quan (Trang 28)