Tải bản đầy đủ (.pdf) (87 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 (1.7 MB, 87 trang )

BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƢỜNG ĐẠI HỌC SƢ PHẠM HÀ NỘI 2
======

NGUYỄN VĂ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

HÀ NỘI, 2015


BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƢỜNG ĐẠI HỌC SƢ PHẠM HÀ NỘI 2
======

NGUYỄN VĂ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

HÀ NỘI, 2015



LỜI CẢM ƠN
Để 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 Đại học Sư phạm Hà Nội 2.
Tôi xin chân thành cảm ơn 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


LỜI CAM ĐOAN
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


i

MỤC LỤC

MỤC LỤC ...................................................................................................................... i

Danh mục các ký hiệu, các chữ viết tắt .......................................................................iii
Danh mục các bảng .......................................................................................................iv
Danh mục các hình......................................................................................................... v
MỞ ĐẦU........................................................................................................................ 1
Chƣơng 1: TỔNG QUAN VỀ KHAI PHÁ TẬP MỤC THƢỜNG XUYÊN .. 4
1.1. Các khái niệm cơ bản ................................................................................. 4
1.1.1. Cơ sở dữ liệu giao tác.............................................................................. 4
1.1.2. Tập mục thường xuyên và luật kết hợp................................................... 6
1.1.3. Các tính chất cơ bản của tập mục thường xuyên .................................... 7
1.1.4. Bài toán khai phá luật kết hợp................................................................. 7
1.2. Một số thuật toán cơ bản khai phá tập mục thường xuyên ........................ 8
1.2.1. Thuật toán Apriori ................................................................................... 9
1.2.2. Thuật toán FP-growth ........................................................................... 14
1.3. Kết luận .................................................................................................... 21
Chƣơng 2: KHAI PHÁ TẬP MỤC THƢỜNG XUYÊN CÓ TRỌNG SỐ ...22
2.1. Thuật toán MINW L theo tiếp cận Apriori ............................................ 22
2.1.1. Các khái niệm cơ bản ............................................................................ 22
2.1.2. Thuật toán MINW L ............................................................................ 25
2.1.3. V dụ minh họa ...................................................................................... 28
2.2. Thuật toán WFIM theo tiếp cận FP-Growth ............................................ 50
2.2.1. Các khái niệm cơ bản ............................................................................ 51
2.2.2. Thuật toán WFIM ............................................................................................ 55
2.2.3. Ví dụ minh họa ................................................................................................ 56
2.3. THUẬT TOÁN FSM ......................................................................................... 60


ii

2.3.1. Cơ sở lý thuyết của thuật toán FSM............................................................. 60
2.3.2. Thuật toán FSM ............................................................................................... 61

2.3.3. Nhận xét thuật toán FSM ............................................................................... 63
2.4. Kết luận................................................................................................................. 64
Chương 3: THỬ NGHIỆM VÀ ĐÁNH GIÁ CÁC THUẬT TOÁN.............. 65
3.1. Chuẩn bị số liệu thử nghiệm ............................................................................. 66
3.2. Kết quả thử nghiệm và đánh giá các thuật toán ....................................... 66
3.2.1. Đánh giá thuật toán WFIM với thuật toán FP-Growth ......................... 66
3.2.2. Đánh giá các thuật toán WFIM, FP-Growth và MINWAL .................. 68
KẾT LUẬN .................................................................................................................71
TÀI LIỆU THAM KHẢO .......................................................................................72
PHỤ LỤC


iii

DANH MỤC CÁC KÝ HIỆU, CÁC CHỮ VIẾT TẮT
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


iv

Danh mục các bảng
Bảng 1.1. Biểu diễn ngang của cơ sở dữ liệu giao tác ..................................... 4
Bảng 1.2. Biểu diễn dọc của cơ sở dữ liệu giao tác.......................................... 5
Bảng 1.3. Ma trận giao tác của cơ sở dữ liệu bảng 1.1 ................................... 5
Bảng 1.4. CSDL giao tác minh họa thực hiện thuật toán Apriori .................. 12
Bảng 1.5. CSDL giao tác minh họa cho thuật toán FP- growth..................... 15
Bảng 2.1. CSDL giao tác................................................................................. 24
Bảng 2.2. Trọng số của các mục ..................................................................... 24
Bảng 2.3. CSDL giao tác D............................................................................. 28
Bảng 2.4. Trọng số của các mục ..................................................................... 29
Bảng 2.5. CSDL giao tác................................................................................. 51
Bảng 2.6. Ví dụ các mục với các khoảng trọng số khác nhau ........................ 52
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


v

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
Hình 1.3. Cây FP-tree của CSDL DB trong bảng ......................................... 17
Hình 1.4. FP-tree phụ thuộc của m ................................................................ 19
Hình 1.5. Các FP-tree phụ thuộc của am, cm và cam ................................... 20

Hình 2.1. Cây FP-Tree tổng quát của thuật toán FP-Tree ............................ 57
Hình 2.2. Cây FP-Tree con với tiền tố {r} ..................................................... 59
Hình 3.1. Số lượng tập mục thường xuyên của thuật toán WFIM so với FPGrowth (tập dữ liệu Connect) ......................................................................... 67
Hình 3.2. Thời gian thực hiện của thuật toán WFIM so với FP-Growth (tập
dữ liệu Connect) .............................................................................................. 67
Hình 3.3. Số lượng tập mục thường xuyên của các thuật toán FP-Growth,
WFIM và MINWAL (tập dữ liệu Connect) ...................................................... 69
Hình 3.4. Thời gian thực hiện của các thuật toán FP-Growth, WFIM và
MINWAL (tập dữ liệu Connect) ...................................................................... 70


1

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


grawal đề 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ê,


2

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.
Để đá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


3

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ý 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.


4

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
Apriori [4] và thuật toán FP-Growth [6].
1.1. Các khái niệm cơ bản
1.1.1. Cơ sở dữ liệu giao tác
Định nghĩa 1.1. 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 giao tác 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 .
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
T1
T2

T3
T4
T5
T6
T7
T8
T9
T10
T11

Mục dữ liệu
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
A, E
A, B, C


5

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
này.
Bảng 1.2. Biểu diễn dọc của cơ sở dữ liệu giao tác

Định danh giao tác

Mục dữ liệu

A
T3, T6, T7, T8, T9, T10, T11
B
T1, T2, T3, T7, T9, T11
C
T1, T2, T4, T5, T6, T7, T8, T11
D
T1, T2, T3, T4, T5
E
T9, T10
F
T4, T7
Ma trận giao tác: Cơ sở dữ liệu giao tác DB  T1 , T2 ,..., Tm  trên tập các mục
(item) I  i1 , i2 ,..., in  được biểu diễn bởi ma trận nhị phân M  (mpq )mn , ở đó:
1 khi iq  Tp
mpq  
0 khi iq  Tp

Ví dụ 1.2. Cơ sở dữ liệu bảng 1.1 biểu diễn ở dạng ma trậ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
TID

A

B


C

D

E

F

T1

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

T10

1

0

0

0

1

0

T11


1

1

1

0

0

0


6

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  I. 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  DB | T  X }
DB

Ta có: 0 ≤ sup(X) ≤ 1 với mọi tập mục X  I.
Định nghĩa 1.3. Cho tập mục X  I và ngưỡng hỗ trợ tối thiểu (minimum
support) minsup 0,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 minsup 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 I, X  Y= Ø ; 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  Y ) , là độ hỗ trợ của tập mục X  Y , sup(X  Y) = sup(X  Y) .

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.
Ta có: 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  Y và số giao tác

chứa X trong cơ sở dữ liệu DB.
conf(X  Y ) =

sup(X  Y )
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/X):


7

P(Y / X ) 

{T  DB | X  T  Y  T } {T  DB | X  Y  T } sup(X  Y )


{T  DB | X  T }
{T  DB | X  T }
sup(X )


và ta có 0  conf(X  Y )  1.
Các luật thoả mãn cả hai ngưỡng độ hỗ trợ tối thiểu (minsup) và độ tin
cậy tối thiểu (minconf),
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) Nếu X, Y là các tập mục và X  Y thì sup( X )  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à conf(X  Y)  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


8


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 Y  X , 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 First Search – DFS).


9


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 trướ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
phải kiểm tra độ hỗ trợ của tất cả Cnk 

n!
tập mục ứng viên có k mục.
k !(n  k )!

Duyệt theo chiều sâu là duyệt qua cơ sở dữ liệ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ả 2n tập
con, rõ ràng đây là bài toán NP khó, do vậy cần phải có phươ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 phươ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 phương pháp không
sinh ra tập mục ứng viên, cơ sở dữ liệ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 thường xuyên do R. Agrawal và
R. Srikant đề xuất vào năm 1993 [4]. Ý tưở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 thường xuyên
khác về sau.
Ý tưởng chính của thuật toán như sau: sinh ra các tập mục ứng viên từ
các tập mục thường xuyên ở bước trướ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 ngưỡng hỗ trợ cho trướ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ể được sinh ra bằng cách kết nối các tập mục thường xuyên có (k-


10

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:
Tập k

Chức năng

mục

Tập các k-tập mục thường xuyên (với độ hỗ trợ tối thiểu
Lk

minsup). Mỗi phần tử của tập này có 2 trường:
i)

Tập mục (itemsets)

ii)

Độ hỗ trợ (count)
Tập các k-tập mục ứng viên (các tập mục thường xuyên

Ck


tiềm năng). Mỗi phần tử của tập này có 2 trường:
i)

Tập mục (itemsets)

ii)

Độ hỗ trợ (count)

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-1)-tập mục để sinh ra k-tập mục, sử dụng tính chất

priori để 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-1 với chính nó. Hai tập mục l1 và l2 của Lk-1 đượ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 l1 nhỏ
hơn của l2:
(l1[1] = l2[1])  (l1[2] = l2[2])  … (l1[k-2] = l2[k-2])  (l1[k-1] <
l2[k-1])
Dạng của tập mục nhận được bởi nối l1 và l2 là:
l2[k-1].

l1[1] l1[2] … l1[k-2] l1[k-1]


11


Bước tỉa: 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

priori để rút gọn tập Ck. Nếu có một (k-1)-tập

mục con nào đó của k-tập mục ứng viên mà không có mặt trong Lk-1 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-1)-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) Tìm các 1-tập mục thường xuyên, nhận được L1;
(2)

For (k=2; Lk-1≠ ; k++) do begin

(3)

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

(4)

For (each T DB) do begin

Lk-1


(5)

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

(6)

For (each c C)

T
c.count++; // tăng số đếm c lên một đơn vị

(7)
(8)

end;

(9)

Lk = { c Ck / c.count ≥ minsup};

(10) End;
(11) L= Lk ;
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-1


12

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-1)-tập mục l1  Lk-1) do
(2)

For (each (k-1)-tập mục l2  Lk-1) do
if (l1[1] = l2[1]) and (l1[2] = l2[2]) and ….. and

(3)

(l1[k-2] = l2[k-2]) and (l1[k-1] < l2[k1])
then
Ck { l1[1], l1[2], … l1[k-2],l1[k-1] l2[k-1]};

(4)

// kết nạp k-tập mục mới vào Ck
// Bước tỉa
(5) For (each ciCk) do
(6)

If exist (s  ci) and (sLk-1) then

(7)

delete ci from Ck;

(8) Return Ck;
Ví dụ minh hoạ thuật toán Apriori:
Ta minh họa thực hiện thuật toán


priori 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
TID

Các mục dữ liệu

T01

A, C, D

T02

B, C, E

T03

A, B, C, E

T04

B, E


13

- Duyệt CSDL lần thứ nhất: t nh độ hỗ trợ cho các 1-tập mục được kết
quả như sau:


C1

1-tập mục
{A}
{B}
{C}
{D}
{E}

Count
2
3
3
1
3

L1

Loại bỏ các 1-tập mục có
count < 2

Kết nối L1 với L1 được C2:

1-tập mục
{A}
{B}
{C}
{E}


Count
2
3
3
3

C2
2-tập mục
{A, B}
{A, C}
{A, E}
{B, C}
{B, E}
{C, E}

- Duyệt CSDL lần thứ 2: t nh độ hỗ trợ cho các 2-tập mục.
C2
2-tập mục
{A, B}
{A, C}
{A, E}
{B, C}
{B, E}
{C, E}

Count
1
2
1
2

3
2

L2

Loại bỏ các 2-tập mục có
count < 2

Kết nối L2 với L2 được C3:

2-tập mục
{A, C}
{B, C}
{B, E}
{C, E}

Count
2
2
3
2

C3
3-tập mục
{B, C, E}

- Duyệt CSDL lần thứ 3: t nh độ hỗ trợ cho các 3-tập mục.
C3
L3
3-tập mục

{B, C, E}

Count
2

Loại bỏ các 3-tập mục có
count < 2

3-tập mục
{B, C, E}

Count
2


14

Nối L3 với L3 được L4=, 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=L1  L2  L3  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 – 1)/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ả.
Để 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.


15

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 đượ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 được khối lượng t nh toán lớn. Phương pháp FP- growth đã chứng tỏ
đượ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 priori, 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 đượ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ứ 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 như xuất hiện trong L (tức là thứ tự
giảm dần theo độ hỗ trợ) đượ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 thườ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.
Để hiểu phươ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
TID

Các mục dữ liệu

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

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

f , c, a, m, p

T2 a, b, c, f, l, 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, l, m, n, p

f, c, a, m, p


16

Bước 1: Duyệt CSDL, đế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 được danh sách L sau:
Mục

Sô lần xuât hiện

f
4
c
4
b
3
m
3
p
3
Bước 3: Duyệt CSDL lần thứ 3 và xây dựng cây FP-tree Cây FP-tree
được xây dựng như 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 thườ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 như 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.


×