Thuật toán tạo cây FP-tree [4]

Một phần của tài liệu 27888 (Trang 37)

Cấu trúc cây

- Gốc cây đƣợc tạo với nhãn là null

- Các liên kết trên cây: Liên kết giữa nút có tên mục giống nhau. - Cấu trúc của một nút (trừ nút gốc) gồm các thành phần:

+ Tên mục

+ Bộ đếm (Counter)

+ Liên kết (node link) đến nút tiếp theo trên cây có cùng tên mục.

- Quét CSDL lần thứ nhất, tìm tất cả các mục và tần suất (counts) của nó. Sau đó chèn các mục có độ hỗ trợ  độ hỗ trợ tối thiểu minsup cùng với tần xuất (counts) của nó vào bảng Header theo thứ tự giảm dần của tần xuất.

- Nếu phần đầu của tập mục giao tác này không trùng với bất cứ phần đầu của tập mục giao tác đã xét thì tập hợp các mục đó đƣợc chèn vào cây nhƣ một nhánh của cây và bộ đếm của mỗi nút ban đầu là 1. Tạo liên kết từ bảng Header đến các mục tƣơng ứng.

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

- Nếu tập mục của giao tác đang xét, có phần đầu trùng với phần đầu tập mục của một giao tác nào đó, mà giao tác này đã đƣợc tạo nhánh trên cây, thì phần đầu tập mục của giao tác đang xét sẽ đƣợc chia sẻ với phần đầu nhánh thể hiện giao tác đã xét, với mỗi nút trên đoạn nhánh chia sẻ bộ đếm đƣợc tăng lên 1 đơn vị, phần còn lại với mỗi mục sẽ đƣợc tạo một nút và đƣợc nối liền với nhánh đƣợc chia sẻ ở phần đầu.

Bộ đếm lƣu trữ số giao tác đƣợc thể hiện bởi nhánh cây xuất phát từ nút gốc đến nút đó.

Chú ý: Trên cây FP-tree có thể có nhiều nút có tên cùng một mục. Tần xuất của i là tổng tất cả các số trên bộ đếm của các nút có tên mục là i và tần xuất của một tập mục bằng giá trị nhỏ nhất của tần xuất của các mục trong nó.

Ví dụ: Cấu trúc cây FP-tree nhƣ trên chứa đựng tất cả các thông tin về tần xuất của các mục CSDL. Việc khai phá CSDL bây giờ trở thành khai phá trên cây FP-tree.

Phƣơng pháp FP-tree dựa trên nguyên tắc: Nếu tập X và Y là hai tập mục, số lƣợng các tập mục X Y trong CSDL có thể xác định bằng số tập mục X Y trong phần CSDL mà các giao tác chỉ chứa tập Y. Phần CSDL này đƣợc gọi là “Cơ sở phụ thuộc mẫu” (Conditional patterns base) của X. Cây FP-tree đƣợc xây dựng từ cơ sở phụ thuộc mẫu đƣợc gọi là cây FP-tree phụ thuộc của X, ký hiệu là Tx. Nhƣ vậy ta có thể xem cây FP-tree lần đầu đƣợc xây dựng là cây FP-tree phụ thuộc của tập .

Chú ý: Bất kỳ một tập mục Y nào mà nó thƣờng xuyên trong cơ sở phụ thuộc mẫu của X thì tập X Y cũng là tập mục thƣờng xuyên trong CSDL gốc.

Thuật toán:

Input: CSDL giao tác D Output: Cây FP-tree

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

Thủ tục giả mã (proseudo code) tạo cây FP-tree

Procedure INSERT_TREE (string[p|P], Tree có gốc T) 1. If T có nút con N mà N.itemname = p Then N.Count++ 2. Else 3. Tạo nút mới N 4. N.Itemname = p, N.Count = 1; 5. Liên kết bảng Hearder từ p đến N 6. If P ≠  Then 7. Insert_tree(N,P);

Trong thủ tục trên p là mục đầu tiên trong danh sách các tập mục P của giao tác đang xét.

Để tạo cây, lần đầu tiên ta gọi thủ tục với cây T = null

Ví dụ minh hoạ tạo cây FP-tree

Cho CSDL giao tác trong bảng

TID Danh sách các mục T01 I1, I2, I5 T02 I2, I4 T03 I2, I3 T04 I1, I2, I4 T05 I1, I3 T06 I2, I3, I6 T07 I1, I3

T08 I1, I2, I3, I5

T09 I1, I2, I3

Bảng 3.4: CSDL giao tác minh hoạ xây dựng cây FP-tree Cho độ hỗ trợ tối thiểu minsup = 22%

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

Với độ hỗ trợ tối thiểu minsup = 22% thì tần xuất tối thiểu của các tập mục thƣờng xuyên là 2.

Quá trình tạo cây FP-tree nhƣ sau: (adsbygoogle = window.adsbygoogle || []).push({});

Duyệt CSDL lần thứ nhất: Xác định tần xuất của các mục trong CSDL.

Tên mục I1 I2 I3 I4 I5 I6

Tần xuất (frequent) 6 7 6 2 2 1

Bảng 3.5: Thống kê tần xuất của các mục trong CSDL Tạo bảng Header của cây

Hình 3.1: Bảng Header của cây FP-tree của CSDL bảng 3.5 Tạo gốc với nhãn null

Duyệt CSDL lần thứ 2, với mỗi giao tác loại bỏ các thuộc tính có độ hỗ trợ nhỏ hơn độ hỗ trợ cực tiểu minsup, sắp xếp các mục theo thứ tự tăng dần của tần xuất. Thực hiện chèn các mục của giao tác vào cây.

CSDL giao tác sau khi loại bỏ các mục có độ hỗ trợ nhỏ hơn độ hỗ trợ cực tiểu minsup và các mục đƣợc sắp xếp theo thứ tự tần xuất giảm dần:

Item Header of Node-Linked I2:7  I1:6  I3:6  I4:2  I5:2  Null

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn TID Danh sách các mục T01 I2, I1, I5 T02 I2, I4 T03 I2, I3 T04 I2, I1, I4 T05 I1, I3 T06 I2, I3 T07 I1, I3

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

Bảng 3.6: CSDL giao tác sau khi loại bỏ các mục không thƣờng xuyên và sắp xếp các mục theo thứ tự giảm dần của tần xuất.

- Xét giao tác với TID = T01 (tập mục {I2, I1, I5}, với mỗi mục tạo một nút tƣơng ứng và gán số đếm của nút là một, ta có cây

Hình 3.2: Cây FP-tree sau khi xét giao tác với TID = T01

null

I2:1

I1:1

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

- Xét giao tác với TID = T02 (tập mục {I2, I4})

Hình 3.3: Cây FP-tree sau khi xét giao tác với TID = T02

- Xét giao tác với TID = T03 (tập mục {I2, I3})

Hình 3.4: Cây FP-tree sau khi xét giao tác với TID = T03

null I2:2 I1:1 I5:1 I4:1 null I2:3 I1:1 I5:1 I4:1 I3:1

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

- Xét giao tác TID = 04 (tập mục {I2, I1, I4})

Hình 3.5: Cây FP-tree sau khi xét giao tác với TID = T04

- Xét giao tác TID = T05 (tập mục {I1, I3})

Hình 3.6: Cây FP-tree sau khi xét giao tác với TID = T05

null I2:4 I1:2 I5:1 I4:1 I3:1 I4:1 null I2:4 I1:2 I5:1 I4:1 I3:1 I4:1 I1:1 I3:1

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

- Xét giao tác TID = T06 (tập mục {I2, I3}) (adsbygoogle = window.adsbygoogle || []).push({});

Hình 3.7: Cây FP-tree sau khi xét giao tác với TID = T06

- Xét giao tác TID = 07 (tập mục {I1, I3})

Hình 3.8: Cây FP-tree sau khi xét giao tác với TID = T07

null I2:5 I1:2 I5:1 I4:1 I3:2 I4:1 I1:1 I3:1 null I2:5 I1:2 I5:1 I4:1 I3:2 I4:1 I1:2 I3:2

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

- Xét giao tác TID = 08 (tập mục {I2, I1, I3, I5})

Hình 3.9: Cây FP-tree sau khi xét giao tác với TID = T08

- Xét giao tác TID = 09 (tập mục {I2, I1, I3})

Hình 3.10: Cây FP-tree sau khi xét giao tác với TID = T09

null I2:6 I1:3 I5:1 I4:1 I3:2 I4:1 I1:2 I3:2 I3:1 I5:1 null I2:7 I1:4 I5:1 I4:1 I3:2 I4:1 I1:2 I3:2 I3:2 I5:1

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

Cây FP-Tree thu đƣợc sau khi xét giao tác cuối cùng

Header table

Hình 3.11: Cây FP-tree CSDL bảng 3.4

3.3.2. Duyệt cây FP-tree để sinh cá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 cây FP-tree mà không cần duyệt cơ sở dữ liệu. Khi duyệt các mẫu ai chỉ cần tính toán cho các nút của cây 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:

Với mỗi mục i trong bảng header của cây FP-tree Tx, dọc theo danh sách liên kết bắt đầu từ i, thăm tất cả các nhánh của cây Tx có chứa mục i. Các nhánh này tạo thành cơ sở phụ thuộc mẫu của X  {i}, vì vậy thăm các nút nhƣ trên sẽ đạt đƣợc tất cả các mục thƣờng xuyên trong cơ sở mẫu này.

Item Header of Node-Linked I2:7  I1:6  I3:6  I4:2  I5:2  null I2:7 I1:4 I5:1 I4:1 I3:2 I4:1 I1:2 I3:2 I3:2 I5:1

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

Phƣơng pháp FP-growth thực hiện xây dựng cơ sở phụ thuộc mẫu FP-tree TX  {i} bằng cách, khởi đầu từ các mục thƣờng xuyên trong bảng header và thăm các nhánh của cây Tx dọc theo danh sách liên kết của i một lần hoặc hơn một lần và chèn các tập mục tƣơng ứng đó vào TX  {i}. Lƣu ý thứ tự của các mục trong Tx và TX  {i} có thể khác nhau. Thủ tục trên gọi là đệ quy và quá trình đệ quy dừng lại khi một cây FP-tree mới tạo ra chỉ có một đƣờng đơn (single path). Thực hiện sinh tất cả các tập mục thƣờng xuyên từ tập mục trên đƣờng đơn này, tần xuất của tập mục là số đếm nhỏ nhất của mục có chứa trong tập mục. Toàn bộ các tập mục thƣờng xuyên đƣợc sinh ra từ cả các cây FP-tree chỉ có đƣờng đơn.

Thuật toán

Input: Cây FP-tree, tập mục X

Output: Toàn bộ tập mục thƣờng xuyên

Thủ tục giả mã của thuật toán khai phá tập mục bằng phƣơng pháp FP- growth

Procedure FP-growth(T : FP-tree, X: Tập mục); 1. If cây T chỉ chứa một đƣờng đơn P then 2. For (mỗi một tổ hợp Y các nút trên đƣờng P)

3. Sinh tập mục thƣờng xuyên là X  Y và tần xuất của nó là số đếm nhỏ nhất trong các nút tạo Y.

4. Else For (Với mỗi mục ai trong bảng Header của cây T) { 5. Sinh ra mẫu Z = X  {ai} với tần xuất là ai.count

6. Xây dựng cây cơ sở phụ thuộc mẫu Tz của Z 7. If Tz ≠  Then

8. FP-growth (Tz,Z) } (adsbygoogle = window.adsbygoogle || []).push({});

Ví dụ: Sinh các tập mục thƣờng xuyên từ Hình 3.11 cây FP-growth

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

- Xuất phát từ mục I5 ta có 2 đƣờng dẫn có chứa I5 là: {I2:7, I1:4, I5:1} và {I2:7, I1:4, I3:2, I5:1}

Ta có số lần xuất hiện của I5 = 1 + 1 = 2 do đó ta tìm những tập mục thƣờng xuyên chứa I5 mà có cùng tần xuất xuất hiện nhƣ I5.

Cơ sở mẫu phụ thuộc {I2:2, I1:2}

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ả {I2, I5:2}; {I1, I5:2}; {I2, I1, I5:2} thoả mãn minsup=22%

- Mục I4 có tần suất xuất hiện là 2, có hai đƣờng dẫn có chứa mục I4 là {I2:7, I1:4, I4:1} và {I2:7, I4:1}

Cơ sở mẫu phụ thuộc {I2:2}. Khởi tạo cây mẫu thƣờng xuyên trên cơ sở mẫu phụ thuộc trên đó đƣợc đƣờng dẫn đơn {I2:2}. Kết quả tập mục thƣờng xuyên là {I2, I4:2}

- Mục I3 có tần suất xuất hiện là 6, có hai đƣờng dẫn có chứa mục I3 là {I2:7, I1:4, I3:2}, {I2:7, I3:2}, {I1:2, I3:2}

Cơ sở mẫu phụ thuộc {I2:4, I1:2}, {I1:2}

Khởi tạo cây mẫu thƣờng xuyên trên cơ sở mẫu phụ thuộc. Kết quả tập mục thƣờng xuyên là {I2, I3:4}, {I1, I3:4}, {I2, I1, I3:2}

- Mục I1 có tần suất xuất hiện là 6, có hai đƣờng dẫn chứa mục I1 là {I2:7, I1:4}, {null, I12}

Cơ sở mẫu phụ thuộc {I2:4}

Khởi tạo cây mẫu thƣờng xuyên trên cơ sở mẫu phụ thuộc. Kết quả tập mục thƣờng xuyên là {I2, I1:4}

Nhận xét:

- Thuật toán FP-growth nén toàn bộ CSDL lên 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. Tiếp theo khai phá

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

cây FP-tree 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 đó đã giảm đƣợc khối lƣợng tính toán.

- Thuật toán FP-grow 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 thƣờng xuyên ngay từ đầu. 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.

- Tuy nhiên, quá trình khai phá cây FP-tree thuật toán FP-growth sử dụng phƣơng pháp đệ qui, đòi hỏi khối lƣợng tính toán lớn và cần nhiều bộ nhớ để xử lý.

3.4. Khai phá tập mục cổ phần cao

Năm 1997 Hilderman đề xuất bài toán khai phá tập mục cổ phần cao, đánh giá sự đóng góp của tập mục trong tổng số các mục dữ liệu của cơ sở dữ liệu [5]. Trong mô hình này, giá trị của mục dữ liệu trong giao tác là một số, số đó có thể là số nguyên (nhƣ số lƣợng đã bán hàng của mặt hàng). Cổ phần (hay đóng góp) của một tập mục là số đo tỷ lệ đóng góp của tập mục trong cơ sở dữ liệu. Khai phá tập mục cổ phần cao là khám phá tất cả các tập mục có cổ phần không nhỏ hơn ngƣỡng quy định bởi ngƣời sử dụng.

Định nghĩa của một số thuật ngữ, khái niệm khai phá tập mục cổ phần cao (theo [5, 9]):

Cho tập các mục (item) I = {i1, i2,…,in}. Một giao tác (transaction) T là một tập con của I, T I. Cơ sở dữ liệu là một tập các giao tác DB = {T1, T2,…,Tm}. Mỗi giao tác đƣợc gán một định danh TID. Một tập mục con X  I, gồm k mục phân biệt đƣợc gọi là một k – tập mục. Giao tác T gọi là chứa tập mục X nếu X  T.

Ký hiệu giá trị của mục ip(measure value) trong giao tác Tq là mv(ip, Tq), mv(ip,Tq) có giá trị là số tự nhiên (nhƣ số lƣợng đã bán của một mặt hàng trong giao tác) tức là mv(ip,Tq) = 0 nếu ipTq và mv(ip,Tq)≥1 nếu ipTq

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

Giá trị của giao tác Tq (transaction measure value) là tổng giá trị các mục dữ liệu trong giao tác, ký hiệu là tmv(Tq) tức là 

  q p T i q p q mv i T T tmv( ) ( , ).

Tổng giá trị (total measure value) các mục dữ liệu trong cơ sở dữ liệu DB, ký hiệu là Tmv,      q p q i T q p db T T i mv

Tmv ( , ). Tƣơng tự với CSDL con dbDB,      q p q i T q p db T T i mv db Tmv( ) ( , ) (adsbygoogle = window.adsbygoogle || []).push({});

Ví dụ: Cho bảng CSDL, mv(A,T01)=1, mv(A,T04)=3, tmv(T01)=6, tmv(T05)=10, tmv(DB)=48 TID A B C D E F G tmv T01 1 1 1 0 1 1 1 6 T02 0 0 1 1 0 0 3 5 T03 0 0 3 4 3 0 0 10 T04 3 0 0 5 0 0 0 8 T05 2 0 2 3 5 0 0 12 T06 0 3 0 0 2 2 0 7 lmv 6 4 7 13 11 3 4 48 Bảng 3.7: Cơ sở dữ liệu ví dụ

Ký hiệu dbx là tập các giao tác chứa tập mục X, dbx ={Tq|TqDBXTq}.

Định nghĩa 3.1: Cho giao tác Tq chứa các tập mục X. Giá trị của tập mục X (itemset measure value) trong Tq, ký hiệu imv(X,Tq), là tổng giá trị của các mục ip trong Tq thuộc X,    X i q p q p T i mv T X imv( , ) ( , ), với XTq.

Định nghĩa 3.2: Cho tập mục X, dbx là tập các giao tác chứa X. Giá trị của tập mục X (local measure value), ký hiệu lmv(X), là tổng giá trị của tập mục X tại các giao tác trong dbx, tức là:

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn         x db q p x q T i X q p db T q mv i T T X imv X lmv( ) ( , ) ( , )

Định nghĩa 3.3: Cổ phần (share value) hay đóng góp của tập mục X, ký hiệu là Sh(X), là tỉ số giữa giá trị của tập mục X và tổng giá trị của tất cả các mục trong cơ sở dữ liệu :

Tmv X lmv X

Sh( ) ( )

Sh(X) cho biết trong tổng giá trị của tất cả các mục dữ liệu trong CSDL thì giá trị của tập X chiếm bao nhiêu phần trăm.

Ví dụ với CSDL giao tác bán hàng có Sh(X)=30% tức là trong tổng số

Một phần của tài liệu 27888 (Trang 37)