Tải bản đầy đủ (.docx) (58 trang)

Khai phá tập mục thường xuyên có trọng số

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (615.7 KB, 58 trang )

Bộ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC sư PHẠM HÀ NỘI 2
===#r)tBoa===

NGUYỄN YĂN PHÓNG

KHAI PHÁ TẬP MỤC THƯỜNG XUYÊN
CÓ TRỌNG SỐ

LUẬN VĂN THẠC sĩ MÁY TÍNH


Bộ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC sư PHẠM HÀ NỘI 2
===#r)tBoa===

NGUYỄN YĂN PHÓNG

KHAI PHÁ TẬP MỤC THƯỜNG XUYÊN
CÓ TRỌNG SỐ

Chuyên ngành: Khoa học máy tính
Mã sổ: 60 48 01 01

LUẬN VĂN THẠC sĩ MÁY TÍNH

Ngưòi hướng dẫn khoa học: TS. NGUYỄN LONG GIANG


Để hoàn thành luận văn này tôi đã nhận được sự giúp đỡ tận tình của thầy hướng dẫn khoa học, của các thầy cô trường
CẢM


Đại học Sư phạm Hà Nội 2. Tôi xin chân thành cảm ơnLỜI
các thầy
cô trường Đại học Sư phạm Hà Nội 2 đã tạo điều kiện học tập,
nghiên cứu và giúp đỡ tôi rất nhiều trong quá trình làm luận văn. Đặc biệt tôi xin cảm ơn thầy TS Nguyễn Long Giang ở Viện
Công Nghệ Thông Tin đã tận tình hướng dẫn, chỉ bảo tôi trong suốt quá trình học tập, nghiên cứu đề tài và giúp đỡ tôi hoàn
thành bản luận văn này.

Vĩnh Phúc, ngày 01 tháng 10 năm 2015
Học viên *

Nguyễn Văn Phóng
Tôi xin cam đoan đây là kết quả nghiên cứu của tôi dưới sự hướng dẫn khoa học của TS Nguyễn Long Giang.
Các số liệu, kết quả nêu trong luận văn là trung thực và chưa từng được ai công bố trong bất kỳ công trình nào khác.

Học viên *

Nguyễn Văn Phóng


4
MỤC LỤC

PHỤ LỤC


5
DANH MỤC CÁC KÝ HIỆU, CÁC CHỮ VIẾT TẮT
TV • Ã » 7 •
Ký hiệu, chữ viết tắt
Diên giải

CSDL

Cơ sở dữ liệu

TID

Transction Identifcation

w

Tập các trọng số của các mục

L

Tập tất cả các mục thường xuyên

ck

Tập các k-tập mục ứng viên

Lk

Tập các k-tập mục thường xuyên

SC(X)

Số đếm hỗ trợ của các tập mục X

WFIk


Tập các k-tập mục thường xuyên có trọng số

WFI

Tập tất cả các tập mục thường xuyên có trọng số

MaxW

Trọng số có giá trị lớn nhất trong CSDL giao tác

MinW

Trọng số có giá trị nhỏ nhất trong tập mục điều kiện

min_weight

Ngưỡng trọng số tối thiểu

min_sup

Ngưỡng hỗ trợ tối thiểu

support

Độ hỗ trợ của các tập mục

conf

Độ tin cậy


minconf

Độ tin cậy cực tiếu

BFS

Breadth First Search

DFS

Depth First Search

WFIM

Weighted Frequent Itemset Mining


6
Danh mục các bảng

Bảng 2.7. Tập các tập mục thường xuyên với các khoảng trọng sổ khác nhau
.....................................................................................................................................54
Bảng 2.8. Mục thường xuyên có trọng sổ (sẳp xếp tăng dần theo trọng sổ)..
57


Danh mục các hình •
Hình 1.2. Cây FP-tree được xây dựng dần khi thêm các giao tác ti, t2, t3. .. 16



8
MỞ ĐẦU

1. Lý do chọn đề tài
Khai phá luật kết họp được giới thiệu bởi Agrawal [4] vào năm 1994 khi phân
tích cơ sở dữ liệu bán hàng của siêu thị, phân tích sở thích mua của khách hàng bằng
cách tìm ra những mặt hàng khác nhau được khách hàng mua cùng trong một lần mua.
Những thông tin như vậy sẽ giúp ngưòi quản lý kinh doanh tiếp thị chọn lọc và thu
xếp không gian bày hàng họp lý hơn, giúp cho kinh doanh hiệu quả hơn. Bài toán khai
phá luật kết họp bao gồm hai bài toán con. Bài toán thứ nhất là tìm các tập mục
thường xuyên (Frequent itemset) thỏa mãn ngưỡng hỗ trợ tối thiểu cho trước, bài toán
thứ hai là sinh ra các luật kết hợp (Association rule) thỏa mãn ngưỡng tin cậy cho
trước từ tập mục thường xuyên tìm được. Mọi khó khăn của bài toán khai phá luật kết
họp tập trung ở bài toán thứ nhất, đó là khai phá tất cả các tập mục thường xuyên thỏa
mãn ngưỡng độ hỗ trợ cho trước, và các nghiên cứu về khai phá luật kết hợp phần lớn
tập trung vào bài toán khai phá tập mục thường xuyên.
Kể từ khi Agrawal đề xuất, khai phá tập mục thường xuyên đã thu hút được sự
quan tâm của nhiều nhà nghiên cứu, đã có hàng trăm kết quả nghiên cứu được công bố
giói thiệu các thuật toán mới hay đề xuất các giải pháp nâng cao hiệu quả các thuật
toán đã có. Tập mục thường xuyên đã có vai trò quan trọng trong nhiều ứng dụng thực
tế như quản lý quan hệ khách hàng, nâng cao hiệu quả của thương mại điện tử, trong
lĩnh vực sinh tin học, phân tích cấu trúc Protein và DNA, mở rộng truy vấn, hỗ trợ tư
vấn tuyển sinh trong đào tạo, phát hiện xâm nhập mạng...
Bài toán khai phá luật kết hợp kinh điển do Agrawal và các cộng sự đề xuất [4]
được gọi là bài toán khai phá luật kết họp nhị phân vì giá trị của mỗi mục dữ liệu
trong một giao tác là 0 hoặc 1, tức là chỉ quan tâm mục dữ liệu có xuất hiện trong giao
tác hay không. Do đó, nó chỉ mang ngữ nghĩa thống kê, không phản ánh được vai trò
khác nhau của các thuộc tính cũng như đặc tính dữ liệu vốn có của chúng trong cơ sở
dữ liệu.



9
Để đáp ứng yêu cầu của thực tiễn, bài toán khai phá tập mục thường xuyên đã có
nhiều cách thức mở rộng và ứng dụng. Một trong những hướng mở rộng quan trọng là
xem xét mức độ quan trọng khác nhau của các mục dữ liệu bằng cách gán cho mỗi
mục dữ liệu một giá trị được gọi là trọng số [5,10]. Số lượng của tập mục hoặc giá trị
của tập mục là các trọng số được các nhà nghiên cứu quan tâm vì chúng có nhiều ứng
dụng trong thực tiễn. Ví dụ, vói bài toán bán hàng trong siêu thị, trọng số của tập mục
có thể là số lượng mặt hàng đã bán hoặc đơn giá (giá trị) của mặt hàng đã bán. Khi đó,
bài toán khai phá luật kết họp kinh điển trở thành bài toán khai phá luật kết hợp có
trọng số.
Như đã trình bày ở trên, khai phá luật kết họp có trọng số là hướng nghiên cứu
quan trọng trong khai phá dữ liệu và học máy, có ý nghĩa khoa học và thực tiễn cao.
Do đó, tôi chọn đề tài “Khai phá tập mục thường xuyên có trọng số”

2. Mục đích nghiên cứu
Nắm bắt được kiến thức tổng quan về các phương pháp khai phá tập mục thường
xuyên kinh điển và một số phương pháp khai phá tập mục thường xuyên có trọng số,
trên cơ sở đó cài đặt, thử nghiệm và đánh giá các thuật toán trên các bộ số liệu mẫu.

3. Nhiệm vụ nghiên cứu
Là các cơ sở dữ liệu mẫu (cơ sở dữ liệu giao tác).

4. Đối tượng và phạm vi nghiên cứu
Tìm hiểu và thử nghiệm các thuật toán khai phá tập mục thường xuyên có trọng
số trên cơ sở dữ liệu giao tác.

5. Những đóng góp mới của đề tài
Trình bày được hai thuật toán khai phá tập mục thường xuyên có trọng số: thuật
toán MINWAL dựa trên thuật toán Apriori và thuật toán WFIM dựa trên thuật toán

FP-Growth. Tổng họp các kết quả nghiên cứu về khai phá luật kết họp có trọng số.

6. Phương pháp nghiên cứu
Luận văn là nghiên cứu lý thuyết và nghiên cứu thực nghiệm, về nghiên cứu lý


1
thuyết: tìm hiểu các khái niệm, các thuật toán đã công bố về khai phá tập mục thường
xuyên có trọng số. về nghiên cứu thực nghiệm, luận văn thực hiện cài đặt các thuật
toán, chạy thử nghiệm và đánh giá kết quả thực hiện các thuật toán.

7. Bố cục luận văn
Luận văn được chia làm 3 chương.
Chương 1: trình bày tổng quan về bài toán khai phá tập mục thường xuyên, bao
gồm các khai niệm cơ bản và hai thuật toán kinh điển: thuật toán nhị phân Apriori và
thuật toán sử dụng cấu trúc cây FP-Growth.
Chương 2: trình bày hai thuật toán khai phá tập mục thường xuyên có trọng số:
thuật toán MINWAL dựa trên thuật toán Apriori và thuật toán WFIM dựa trên thuật
toán FP-Growth.
Chương 3: trình bày phần cài đặt, thử nghiệm và đánh giá thuật toán trên một
số bộ dữ liệu mẫu.


Chương 1: TỔNG QUAN VỀ KHAI PHÁ TẬP MỤC THƯỜNG XUYÊN
Chương này trình bày một số khái niệm cơ bản trong khai phá luật kết hợp trong
[4] và hai thuật toán khai phá tập mục thường xuyên kinh điển: thuật toán Apñori [4]
và thuật toán FP-Growth [6].

1.1.
1.1.1.


Các khái niêm cơ bản
Cơ sở dữ liệu giao tác

Định nghĩa 1.1. Cho tập các mục (item) / = {^,¿2,...,^}. Một giao tác (transaction) T là
một tập con của I, TŒ I. Cơ sở dữ liệu giao tác là một tập các giao tác DB =
{TvT2,...,Tm}. Mỗi giao tác được gán một định danh TID. Một tập mục con X e / , 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 e
T.
Biểu diễn cơ sở dữ liệu giao tác', cơ sở dữ liệu giao tác thường được biểu diễn ở dạng
biểu diễn ngang, biểu diễn dọc và biểu diễn bỏi ma trận giao tác. Biểu diễn ngang'. Cơ
sở dữ liệu là một danh sách các giao tác. Mỗi giao tác có một định danh TID và một
danh sách các mục dữ liệu trong giao tác đó.
Ví dụ 1.1. Bảng 1.1 sau đây biểu diễn ngang của cơ sở dữ liệu giao tác.
Bảng 1.1. Biểu diễn ngang của cơ sở dữ liệu giao tác
TID

Mục dữ liệu

TI
T2
T3
T4
T5
T6
T7
T8
T9
T10
Tll


B, c, D
B, C, D
A. B.D
C, D, F
C,D
A, c
A. B. c. F
A. c
A, B, E
Ả7Ẻ
A.B.C

Biểu diễn dọc: Cơ sở dữ liệu là một danh sách các mục dữ liệu, mỗi mục dữ liệu có
một danh sách tất cả các định danh của các giao tác chứa mục dữ liệu


Bảng 1.2. Biếu diễn dọc của cơ sở dữ liệu giao tác
Mục dữ liệu
Định danh giao tác
A
B

T3, T6, T7, T8, T9, T10, TU
Tỉ, T2, T3, T7, T9, Tll
Tl, T2, T4, T5, T6, T7, T8, TU
Tỉ, T2, T3, T4, T5
T9, T10
T4, T7


c
D
E
F

Ma trận giao tác: Cơ sở dữ liệu giao tác DB {7Ị,:r2,...,:rm} hên tập các mục (item) I - {ilti2,...,in}
được biểu diễn bởi ma trận nhị phân M - (rnpq)mxn, ở
đó:
fl khi iq e Tp
TO = -Í
_
pq [0 khi iq í Tp
Ví dụ 1.2. Cơ sở dữ liệu bảng 1.1 biểu diễn ở dạng ma hận giao tác là: Bảng
1.3. Ma trận giao tác của cơ sở dữ liệu bảng 1.1
TI
D
TI

A

B

c

D

E

F


0

1

1

1

0

0

T2

0

1

1

1

0

0

T3

1


1

0

1

0

0

T4

0

0

1

1

0

1

T5

0

0


1

1

0

0

T6

1

0

1

0

0

0

T7

1

1

1


0

0

1

T8

1

0

1

0

0

0

T9

1

1

0

0


1

0

T1
0
T
U

1

0

0

0

1

0

1

1

1

0

0


0


1.1.2.

Tập mục thường xuyên và luật kết hợp

Định nghĩa 1.2. Cho tập mục X Œ ỉ. Ta gọi độ hỗ trợ (Support) của X trong cơ sở dữ
liệu giao tác DB, ký hiệu sup(X), là tỷ lệ phần trăm các giao tác chứa
X trên tổng số các giao tác trong DB, tức là: sup(X) =

\{T sDB \ T
^X}\

Ta có: 0 < sup(X) < 1 với mọi tập mụcXc/.
Định nghĩa 1.3. Cho tập mục X ŒI và ngưỡng hỗ trợ tối thiểu (minimum support)
minsup e [o, 1] (được xác định trước bởi người sử dụng). X được gọi
là tập mục thường xuyên (frequent itemset hoặc large itemset) với độ hỗ trợ tối thiểu
mỉnsup nếu sup(X) > minsup, ngược lại X gọi là tập mục không thường xuyên.
Định nghĩa 1.4. Một luật kết họp là một biểu thức dạng X -»y, trong đó X và Y là các
tập con của /, X n Y= 0 ; X gọi là tiền đề, Y gọi là kết luận của luật. Luật kết họp có hai
thông số quan trọng là độ hỗ trợ và độ tin cậy.
Định nghĩa 1.5. Độ hỗ trợ (Support) của một luật kết họp X ->Y, ký hiệu là sup(X —
>7), là độ hỗ trợ của tập mục X u y , sup(X ->Y) = sup(X uy).
Như vậy độ hỗ trợ của luật kết họp X —»y chính là xác suất P(XÚY) của sự xuất hiện
đồng thời của X và y trong một giao tác.
Tacó: 0 < sup(X —»y) < 1.
Định nghĩa 1.6. Độ tin cậy (Confidence) của một luật X —»y, ký hiệu conf(X —>y),
là tỷ lệ phần trăm giữa số giao tác chứa X uy và số giao tác chứa X trong cơ sở dữ liệu

DB.

canf(X^y)=sup(Xur) sup(X )

Độ tin cậy của luật kết họp X —»y chính là xác suất có điều kiện P(y/y):


1

)

\{TSDB\XCZTAYCZT}\_\{TSDB\X\{TSDB\XŒT}\
\ { T S D B \ X ΠT } \ sup(X)
và ta có 0 < conf(Y ->y) < 1.
Các luật thoả mãn cả hai ngưỡng độ hỗ trợ tối thiểu (mỉnsup) và độ tin cậy tối

thiểu (minconý),
tức thỏa mãn sup(X —> Y ) > minsup và conf(X ->Y) > minconf , được gọi là luật
kết họp mạnh.

1.1.3.

Các tính chất cơ bản của tập mục thường xuyên

Cho cơ sở dữ liệu giao tác DB và ngưỡng độ hỗ trợ tối thiểu minsup. Các tập mục
thường xuyên có các tính chất sau:

(1) Neu X, Y là các tập mục và X e Y thì sup(Y) > sup(y).
(2) Nếu một tập mục là không thường xuyên thì mọi tập cha của nó cũng không thường

xuyên.

(3) Nếu một tập mục là thường xuyên thì mọi tập con khác rỗng của nó cũng là tập mục
thường xuyên.
Tính chất (3) được gọi là tính chất Apriori, tính chất này là cơ sở để rút gọn
không gian tìm kiếm các tập mục thường xuyên.

1.1.4.

Bài toán khai phá luật kết hợp
Cho cơ sở dữ liệu giao tác DB, ngưỡng độ hỗ trợ tối thiểu minsup và ngưỡng độ

tin cậy tối thiểu minconf.
Yêu cầu: Tìm tất cả các luật kết họp X —»y trên cơ sở dữ liệu DB sao cho sup(X
—»y ) > minsup và coníỴY —>yj > minconf.
Bài toán khai phá luật kết hợp này được gọi là bài toán cơ bản hay bài toán nhị
phân, vì ở đây giá trị của mục dữ liệu trong cơ sở dữ liệu là 0 hoặc 1 (xuất hiện hay
không xuất hiện).
Bài toán khai phá luật kết hợp được chia thành hai bài toán con. Bài toán thứ nhất là
tìm tất cả các tập mục thỏa mãn độ hỗ trợ tối thiểu cho trước, tức
là tìm tất cả các tập mục thường xuyên. Bài toán thứ hai là sinh ra các luật kết họp từ


các tập mục thường xuyên đã tìm được thỏa mãn độ tin cậy tối thiểu cho trước.
Bài toán thứ hai được giải quyết như sau: giả sử đã tìm được X là tập mục
thường xuyên, ta sinh ra các luật kết họp bằng cách tìm v y c l , kiểm tra độ tin cậy của
luật X \ Y - > Y có thỏa mãn độ tin cậy tối thiểu không. Bài toán thứ hai này đơn giản,
mọi khó khăn nằm ở bài toán thứ nhất, hầu hết các nghiên cứu về luật kết họp đều tập
trung giải quyết bài toán thứ nhất là tìm các tập mục thường xuyên.
Phần tiếp theo sau đây sẽ trình bày chi tiết về khai phá tập mục thường xuyên.


1.2.

Một số thuật toán cơ bản khai phá tập mục thường xuyên
Các nghiên cứu về khai phá tập mục thường xuyên tập trung vào tìm các thuật

toán mới hoặc đề xuất giải pháp nâng cao hiệu quả các thuật toán đã có. Phần này sẽ
trình bày khái quát các kỹ thuật chính để khai phá tập mục thường xuyên.
Bài toán khai phá tập mục thường xuyên có thể chia thành hai bài toán nhỏ: tìm
các tập mục ứng viên và tìm các tập mục thường xuyên. Tập mục ứng viên là tập mục
mà ta hy vọng nó là tập mục thường xuyên, phải tính độ hỗ trợ của nó để kiểm tra. Tập
mục thường xuyên là tập mục có độ hỗ trợ lớn hơn hoặc bằng ngưỡng hỗ trợ tối thiểu
cho trước. Đã có rất nhiều thuật toán tìm tập mục thường xuyên được công bố, ta có
thể phân chúng theo hai tiêu chí sau:

-

Phương pháp duyệt qua không gian tìm kiếm.

-

Phương pháp xác định độ hỗ trợ của tập mục.

Phương pháp duyệt qua không gian tìm kiếm được phân làm hai cách: duyệt
theo chiều rộng (Breadth First Search - BFS) và duyệt theo chiều sâu (Depth Fữst
Search - DFS).
Duyệt theo chiều rộng là duyệt qua cơ sở dữ liệu gốc để tính độ hỗ trợ của tất cả
các tập mục ứng viên có (k-1) mục truớc khi tính độ hỗ trợ của các tập mục ứng viên
có k mục. Với cơ sở dữ liệu có n mục dữ liệu, lần lặp thứ k
k


phải kiểm tra đô hỗ trơ của tất cả c n ----------—----tâp muc ứng viên có k muc.
k\{n-k)\
Duyệt theo chiều sâu là duyệt qua cơ sở dữ liệu đã đuợc chuyển đổi thành cấu


trúc cây, quá trình duyệt gọi đệ quy theo chiều sâu của cây.
Với cơ sở dữ liệu có n mục dữ liệu, không gian tìm kiếm có tất cả 2" tập con, rõ
ràng đây là bài toán NP khó, do vậy cần phải có phuơng pháp duyệt thích họp, tỉa
nhanh các tập ứng viên.
Phần tiếp sau mô tả chi tiết nội dung hai thuật toán tiêu biểu và là cơ sở để trình
bày các thuật toán khai phá luật kết họp có trọng số. Thuật toán Apriori điển hình cho
phuơng pháp sinh ra các tập mục ứng viên và kiểm tra độ hỗ trợ của chúng; Thuật toán
FP-growth đại diện cho phuơng pháp không sinh ra tập mục ứng viên, cơ sở dữ liệu
đuợc nén lên cấu trúc cây, sau đó khai phá bằng cách phát triển dần các mẫu trên cây
này.

1.2.1.

Thuật toán Apriori
Apriori là thuật toán khai phá tập mục thuờng xuyên do R. Agrawal và R.

Srikant đề xuất vào năm 1993 [4], Ý tuởng của thuật toán Apriori còn là nền tảng cho
việc phát triển nhiều thuật toán khai phá tập mục thuờng xuyên khác về sau.
Ý tuởng chính của thuật toán nhu sau: sinh ra các tập mục ứng viên từ các tập
mục thuờng xuyên ở buớc truớc, sử dụng kỹ thuật “tỉa” để bỏ đi những tập mục ứng
viên không thoả mãn nguỡng hỗ trợ cho truớc. Cơ sở của kỹ thuật này là tính chất
Apriori: Bất kỳ tập con nào của tập mục thường xuyên cũng phải là tập mục thường
xuyên. Vì vậy các tập mục ứng viên gồm k mục có thể đuợc sinh ra bằng cách kết nối
các tập mục thuờng xuyên có (k-



Tập k

1) mục và loại bỏ tập mục ứng viên nếu nó có chứa bất kỳ một tập con nào không phải là
thường xuyên.
Giả sử các mục dữ liệu trong mỗi giao tác được lưu theo trật tự từ điển. Thuật
toán sử dụng các ký hiệu sau đây:
Thuật toán duyệt cơ sở dữ liệu nhiêu lân. Mỗi lân duyệt, thuật toán thực hiện hai
bước: bước kết nổi và bước tỉa. Trong lần lặp thứ k, thuật toán nối hai (k-l)-tập mục để
sinh ra k-tập mục, sử dụng tính chất Apriori để tỉa các tập ứng viên. Bước nối và bước
tỉa như sau:
Bước kết nối (tìm ck): Tập các k-tập mục ứng viên ck được sinh ra bởi việc kết
nối Lk_! vói chính nó. Hai tập mục li và 12 của Lk_i được nối nếu chúng có (k-2) mục
dữ liệu đầu bằng nhau, mục dữ liệu thứ (k-1) của li nhỏ hơn của 12:
(li[l] = 12[1]) A 0i[2] = h [ 2 ] ) A ...A (li[k-2] = l2[k-2]) A (ltík-1] < l2[k-l])
Dạng của tập mục nhận được bởi nối li và 12 là:
l2[k-l].

li[1] li[2] ... li[k-2] li[k-l]


Bước tũt: Tập ck chứa tập Lk, tức là tất cả các k-tập mục thường xuyên đều
thuộc tập ck. Tập ck có thể là rất lớn dẫn đến khối lượng tính toán lớn. Thuật toán áp
dụng tính chất Apriori để rút gọn tập ck. Nếu có một (k-l)-tập mục con nào đó của ktập mục ứng viên mà không có mặt trong Lk_i thì ứng viên đó không thể là thường
xuyên, có thể loại bỏ khỏi ck. Việc kiểm tra các (k-l)-tập mục con có thể thực hiện
nhanh bỏi duy trì một cây băm của tất cả các tập mục thường xuyên đã tìm thấy.
Thuật toán Apriori (tìm các tập mục thường xuyên)
Input: Cơ sở dữ liệu DB, ngưỡng độ hỗ trợ minsup
Output: Tập các tập mục thường xuyên L trong DB

Method:

(1)
(2)

Tìm các 1-tập mục thường xuyên, nhận được Li;
For (k=2; Lk_i^ 0; k++) do begin

(3)

ck = apriori_gen(Lk_i, minsup); // Sinh tập ứng viên mới từ Lk-1

(4)

For (each T eDB) do begin

(5)

c = subset(Ck,7); // Các tập mục ứng viên chứa trong T

(6)
(7)
(8)
(9)
(10)
(11)

For (each ceC)
c.count++; // tăng số đếm c lên một đơn vị
end;

Lk= { c eCk / c.count > minsup};
End;
L=u ;

Sinh các tập mục ứng viên của thuật toán Apriori: hàm Apriori_gen() Function
Apriori_gen()
Input: Tập các (k-1)- tập mục thường xuyên Lk_i


Output: Tập các k- tập mục ứng viên ck
Method:
// Bước kết nổi

(1) For (each (k-l)-tập mục li e Lk_i) do
(2) For (each (k-l)-tập mục 12 e Lk_i) do
(3) if Oi[l] = 12[1]) and 0i[2] = 12[2]) and...........................................and
(li[k-2] = l2[k-2]) and ( h [ k - l ] < 12[k1])
then
ck... li[k-2],li[k-l] l2[k-l]};
(
// kết nạp k-tập mục mới vào Ck
H Bước tỉa

(5)
(6)
(7)
(8)

For (each Ci e ck) do

If exist (s c= Ci)and (sếLk_i) then
delete Ci ữom ck;
Return ck;

Ví dụ minh hoạ thuật toán Apriori:
Ta minh họa thực hiện thuật toán Apriori trên cơ sở dữ liệu trong bảng 1.4 với
minsup=50%, tức xuất hiện ít nhất 2 lần.
Bảng 1.4. CSDL giao tác minh họa thực hiện thuật toán Apriori
TI
Các mục dữ liệu
D
TOI
A, c, D
T02

B,C,E

T03

A, B, c, E

T04

B, E


- Duyet CSDL lan thu nhat: tinh do ho trg cho cac 1-tap muc dirge ket
Ket noi Li voi Li duoc C2:

qua nhu sau:

L2
2-tap muc
u
1-tap muc
{A,B}
1-tap muc
{A, C}
Count
Loai bo cac 1-tap muc
{A,E}
{A}
2
{B,
C}
co count < 2
{B}
{B,E}
3
{C,E}
{C}
- Duyet CSDL lan thu 2: tinh do ho trg cho cac 2-tap muc. C2
Ket noi L2 voi L2 dugc C3:
c3
2-tap muc

3-tap muc
{B.C.E}

L


2-tap muc
botrg
caccho
2-tap
Duvet CSDL lan thu 3: tinhLoai
do ho
cacmuc
3-tap muc.
Count
co
{A,
‘C3
L3 C}
2
count < 2
{B, C}
2
count <
{B,E}

Loai bo cac 3-tap muc
co


Nối L3 với L3 được 1-4=0, thuật toán dừng.
Các tập mục thường xuyên tìm được theo thuật toán Apriori là:
L=Lj UL2UL3 = {A, B, c, E, AC, BC, BE, CE, BCE}
Nhận xét: Thuật toán duyệt cơ sở dữ liệu nhiều lần, số lần duyệt bằng độ dài
của tập mục thường xuyên dài nhất tìm được.


1.2.2.

Thuật toán FP-growth
Thuật toán Apriori gặp phải hai chi phí lớn:

-

Chi phí sinh ra số lượng khổng lồ các tập ứng viên. Giả sử ban đầu có 104 mục thường
xuyên có độ dài băng 1 thì quá trình kết nối sẽ tạo ra 107 các tập mục có độ dài bằng 2
(chính xác là 104(104- l)/2 tập mục). Rõ ràng một tập mục có độ dài k thì phải cần đến
ít nhất 2k - 1 tập mục dự tuyển trước đó. Một nhược điểm khác nữa là giải thuật
Apriori phải kiểm tra tập dữ liệu nhiều lần, dẫn tới chi phí lớn khi kích thước các tập
mục tăng lên. Nếu tập mục có độ dài k được sinh ra thì cần phải kiểm tra tập dữ liệu
k+1 lần.

-

Lặp nhiều lần duyệt cơ sở dữ liệu, 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. Thuật toán Apriori chỉ thích
họp cho các cơ sở dữ liệu thưa (sparse), với các cơ sở dữ liệu dày (dense) thì thuật
toán thực hiện kém hiệu quả.
Đe khắc phục nhược điểm trên của thuật toán Apriori, J. Han, J Pei, Y. Yin và R.
Mao đề xuất thuật toán FP-growth [6], Thuật toá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 toán FP-growth do nén toàn bộ cơ sở dữ liệu lên một cấu trúc dữ liệu nhỏ


hơn là cây FP-tree nên tránh đuợc việc duyệt nhiều lần cơ sở dữ liệu (thuật toán chỉ
duyệt cơ sở dữ liệu 2 lần). Tiếp theo thuật toá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 đuợc khối luợng tính toán
lớn. Phuơng pháp FP- growth đã chứng tỏ đuợ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 toán Apriori, luôn chỉ cần
duyệt CSDL 2 lần.
Thuật toán FP- growth thực hiện như sau:
Đầu tiên, thuật toá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 đuợ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 đuợc danh sách L các mục đã sắp.
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 nhu xuất hiện trong L (tức là thứ tự giảm dần theo
độ hỗ trợ) đuợc cất vào cây FP-tree.
Phần tiếp theo thuật toán khai phá tìm các mẫu thuờ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.
Đe hiểu phuơ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 = 3 / 5 .
Bảng 1.5. CSDL giao tác minh họa cho thuật toán FP- growth
TI
D
TI


Các mục dữ liệu

Các mục thuờng xuyên đã sắp xếp

a, c, d, f, g, i, m, p

f, c, a, m, p

T2

a, b, c, f, 1, m, o

f, c , a, b, m

T3

b, f, h, j, o

f,b

T4

b, c, k, p, s

c, b, p

T5

a, c, e, f, 1, m, n, p


f, c, a, m, p


Bước 1: Duyệt CSDL, Mục
đế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
đuợc danh sách L sau:
Bước 3: Duyệt CSDL lân thứ 3 và xây dựng cây FP-tree Cây FP-tree đuợc xây
dựng nhu 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 thuờ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, Quá trình xây dựng cây
nhu hình 1.1 sau:
Hình 1.2. Cây FP-tree được xây dựng dần khi thêm các giao tác ti, t2, t3.


__
A
Từ tập dữ liệu ban đâu, ta xây dựng header table của cây FP nhu sau:

-

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: v' Tên mục
(item identifier)

s Count: số đếm
v' 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 thuờ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 nhu sau:
Procedure insert_tree(string [p I 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 giao tác t, gọi thủ tục inserttree (t\ T), ở đó 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.)


Procedure insert_tree (string [p I P], tree có gốc T)
1. Nếu T có nút con N mà N.itemname = p thì N.count++
2. Ngược lại
3. Tạo một nút mới N;
4. N.itemname := p; thì N.count :=1;
5. Thay đổi nút liên kết cho p bao gồm N;
6. Nếu p khác rỗng gọi thủ tục insert_tree(P, N);

Tìm các tâp muc 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 toá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ụ 1.3. đầu tiên xét mục p, sau đó đến m, như sau:
- Mục p:
+ Có 2 đường:

- f: 4, c : 3, a : 3, m : 2, p : 2

-

c : 1, b : 1, p : 1

(Tức là: fcam xuất hiện hai lần với p và cb chỉ một lần. số lần xuất hiện của p
là 2+1=3.)
+ Từ đó suy ra co sở mẫu phụ thuộc (conditional pattern base) của p là:

-

f: 2, c : 2, a : 3, m : 2

-

c : 1, b : 1

Các tập mục thưong xuyên chứa p là được xác định bởi co sở mẫu phụ thuộc
này.
+ Xây dựng đệ quicây FP-tree cho

cơ sở phụ thuộc (condition base) và



×