i
LỜI CAM ĐOAN
Tôi xin cam đoan đây là công trình nghiên cứu của tôi dưới sự hướng dẫn của
TS Nguyễn Long Giang.
Các số liệu, kết quả nghiên cứu trong luận văn là trung thực và mọi trích dẫn
trong báo cáo đều được ghi rõ nguồn gốc. Nếu có sử dụng bất hợp pháp kết quả
công trình nghiên cứu của người khác trong báo cáo tôi xin hoàn toàn chịu trách
nhiệm.
Tác giả
Nguyễn Tú Nam
ii
LỜI CẢM ƠN
Lời đầu tiên tôi muốn bày tỏ lòng biết ơn sâu sắc và kính trọng của mình tới
thầy giáo, TS Nguyễn Long Giang. Trong quá trình tìm hiểu nghiên cứu để hoàn
thành luận văn tôi gặp không ít khó khăn, nhưng những lúc như vậy tôi luôn nhận
được sự động viên khích lệ của thầy. Thầy đã giúp đỡ tôi rất nhiều trong quá trình
nghiên cứu, hướng dẫn tận tình trong cách thức và phương pháp nghiên cứu khoa
học cũng như hỗ trợ tôi trong việc tìm tài liệu.
Để có được những kết quả trong luận văn này, tôi xin gửi lời cảm ơn sâu sắc
đến Thầy, Cô Trường Đại học Công nghệ thông tin và Truyền thông Thái Nguyên
đã tạo điều kiện cho tôi được học hỏi kiến thức thông qua các môn học cũng như
hoàn thành khóa học.
Cuối cùng tôi xin bày tỏ lòng cảm ơn chân thành đến gia đình, người thân và
bạn bè đồng nghiệp đã khích lệ và động viên tôi hoàn thành luận văn này.!
iii
MỤC LỤC
LỜI CAM ĐOAN ..................................................................................................... i
LỜI CẢM ƠN ......................................................................................................... ii
MỤC LỤC .............................................................................................................iii
Danh mục các ký hiệu, các chữ viết tắt .................................................................... v
Danh mục các bảng ................................................................................................ vi
Danh mục các hình ................................................................................................ vii
MỞ ĐẦU ................................................................................................................ 1
Chương 1: TỔNG QUAN VỀ KHAI PHÁ DỮ LIỆU .............................................. 3
1.1. Các khái niệm cơ bản trong khai phá luật kết hợp .......................................... 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. Bài toán khai phá luật kết hợp ................................................................. 8
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. Cách tiếp cận khai phá tập mục thường xuyên ......................................... 8
1.2.2. Thuật toán Apriori ................................................................................. 10
1.2.3. Thuật toán FP-growth............................................................................ 14
1.3. Một số hướng mở rộng bài toán khai phá tập mục thường xuyên. ................ 23
1.4. Kết luận chương .......................................................................................... 23
Chương 2: KHAI PHÁ TẬP MỤC THƯỜNG XUYÊN CÓ TRỌNG SỐ.............. 24
2.1. Thuật toán khai phá tập mục thường xuyên có trọng số MINWAL .............. 24
2.1.1. Các khái niệm cơ bản ............................................................................ 24
2.1.2. Thuật toán MINWAL khai phá tập mục thường xuyên có trọng số dựa
trên thuật toán Apriori ..................................................................................... 28
2.1.3. Ví dụ minh họa thuật toán MINWAL .................................................... 31
iv
2.2. Thuật toán khai phá tập mục thường xuyên có trọng số WFIM .................... 35
2.2.1. Các khái niệm cơ bản ............................................................................ 36
2.2.2. Thuật toán WFIM dựa trên thuật toán Apriori ....................................... 40
2.2.3. Thuật toán WFIM dựa trên thuật toán FP-Growth ................................. 42
2.2.4. Ví dụ thuật toán WFIM ......................................................................... 44
2.3. Kết luận chương .......................................................................................... 47
Chương 3: ĐÁNH GIÁ CÁC THUẬT TOÁN VÀ ỨNG DỤNG........................... 48
3.1. Đánh giá các giải thuật ................................................................................ 48
3.2. Kiểm tra tập dữ liệu và môi trường thí nghiệm ............................................ 49
3.3. So sánh WFIM với các thuật toán khác........................................................ 50
3.4. Kiểm tra khả năng phát triển........................................................................ 54
3.5. Ứng dụng chương trình ............................................................................... 56
KẾT LUẬN ........................................................................................................... 60
TÀI LIỆU THAM KHẢO ..................................................................................... 62
PHỤ LỤC.............................................................................................................. 64
v
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
vi
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 ............................................. 5
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 ........................................... 6
Bảng 1.4. CSDL giao tác minh họa thực hiện thuật toán Apriori ........................... 13
Bảng 1.5. CSDL giao tác minh họa cho thuật toán FP- growth ............................. 16
Bảng 2.1. CSDL giao tác ....................................................................................... 26
Bảng 2.2. Trọng số của các mục ........................................................................... 27
Bảng 2.3. CSDL giao tác D ................................................................................... 31
Bảng 2.4. Trọng số của các mục ........................................................................... 31
Bảng 2.5. CSDL giao tác ....................................................................................... 36
Bảng 2.6. Ví dụ các mục với các khoảng trọng số khác nhau ................................ 37
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 ....... 39
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ố) ........... 44
Bảng 3.1. Tổng hợp số liệu thực tế ........................................................................ 49
Bảng 3.2. Hiệu năng đối với các ngưỡng trọng số khác nhau ................................ 53
vii
Danh mục các hình
Hình 1.1. Phân loại các thuật toán khai phá tập mục thường xuyên ...................... 10
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. Từ tập dữ
liệu ban đầu, ta xây dựng header table của cây FP như sau: ................................. 17
Hình 1.3. Cây FP-tree của CSDL DB trong bảng ................................................. 18
Hình 1.4. FP-tree phụ thuộc của m ....................................................................... 21
Hình 1.5. Các FP-tree phụ thuộc của am, cm và cam............................................ 21
Hình 2.1. Cây FP-Tree tổng quát của thuật toán FP-Tree .................................... 45
Hình 2.2. Cây FP-Tree con với tiền tố {r} ............................................................. 46
Hình 3.1. Số lượng tập mục thường xuyên so với FP-Growth (Tập dữ liệu Connect)
.............................................................................................................................. 50
Hình 3.2. Thời gian thực hiện so với FP-Growth (Tập dữ liệu Connect) ............... 50
Hình 3.3. Số lượng tập mục thường xuyên so với các thuật toán khác (Tập dữ liệu
Connect) ................................................................................................................ 51
Hình 3.4. Thời gian thực hiện so với các thuật toán khác (Tập dữ liệu Connect)... 51
Hình 3.5. Thời gian thực hiện so với các thuật toán khác (Tập dữ liệu Mushroom)
.............................................................................................................................. 52
Hình 3.6. Thời gian thực hiện so với các thuật toán khác (Tập dữ liệu Mushroom)
.............................................................................................................................. 53
Hình 3.7. Khả năng phát triển của WFIM với các ngưỡng hỗ trợ khác nhau (tập dữ
liệu T10I4DxK) ...................................................................................................... 54
Hình 3.8. Khả năng phát triển so với các thuật toán khác (Tập dữ liệu T10I4DxK
và ngưỡng hỗ trợ = 0,1%) ..................................................................................... 55
Hình 3.9. Khả năng phát triển so với các thuật toán khác (Tập dữ liệu T10I4DxK
và ngưỡng hỗ trợ = 0,5%) ..................................................................................... 55
1
MỞ ĐẦU
Lý do chọn đề tài
Khai phá dữ liệu và khám phá tri thức (Data mining and Knowledge
discovery) là một lĩnh vực quan trọng của ngành Công nghệ thông tin. Đây là lĩnh
vực đã thu hút đông đảo các nhà khoa học trên thế giới và trong nước tham gia
nghiên cứu. Khai phá luật kết hợp (Mining association rules) là bài toán có vai trò
quan trọng trong nhiều nhiệm vụ khai phá dữ liệu và có nhiều ứng dụng thực tiễn
trong các lĩnh vực khác nhau của đời sống, đặc biệt là trong lĩnh vực kinh doanh.
Khai phá luật kết hợp được giới thiệu bởi Agrawal vào năm 1993 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 tập trung
vào bài toán khai phá tập mục thường xuyên.
Xuất phát từ những lợi ích thực tế trên tác giả đã mạnh dạn chọn đề tài
“KHAI PHÁ TẬP MỤC THƯỜNG XUYÊN CÓ TRỌNG SỐ TRÊN CƠ SỞ
DỮ LIỆU GIAO TÁC” làm đề tài nghiên cứu cho luận văn tốt nghiệp của mình.
Mục tiêu đề tài tiếp tục nghiên cứu và đề xuất các thuật toán khai phá tập mục
thường xuyên có trọng số trong CSDL giao tác
Xây dựng và đề xuất một số giải thuật khai phá tập mục thường xuyên có
trọng số.
2
Lập trình, thử nghiệm các giải thuật khai phá tập mục thường xuyên có trọng số.
Đối tượng nghiên cứu các cơ sở dữ liệu giao tác được cập nhật từ kho dữ liệu
mẫu UCI
Phạm vi nghiên cứu nghiên cứu và thử nghiệm bài 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.
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: các định lý, mệnh đề trong luận văn được
chứng minh dựa vào các kiến thức cơ bản và các kết quả nghiên cứu đã công bố. 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
thuật toán.
Bố cục luận văn
Luận văn được chia làm 3 chương:
Chương 1: TỔNG QUAN VỀ KHAI PHÁ DỮ LIỆU
Chương 2: KHAI PHÁ TẬP MỤC THƯỜNG XUYÊN CÓ TRỌNG SỐ
Chương 3: ĐÁNH GIÁ CÁC THUẬT TOÁN VÀ ỨNG DỤNG
3
Chương 1: TỔNG QUAN VỀ KHAI PHÁ DỮ LIỆU
Khai phá tập mục thường xuyên đóng vai trò quan trọng trong nhiều nhiệm vụ
khai phá dữ liệu. Khai phá tập mục thường xuyên xuất hiện như là bài toán con của
nhiều lĩnh vực khai phá dữ liệu như khám phá luật kết hợp, khám phá mẫu tuần tự,
phân tích tương quan, phân lớp, phân cụm dữ liệu, khai phá Web,…. Bài toán khai
phá tập mục thường xuyên được giới thiệu lần đầu bởi Agrawal vào năm 1993 khi
phân tích cơ sở dữ liệu bán hàng của siêu thị [6] trong mô hình của bài toán khai
phá luật kết hợp. Khai phá luật kết hợp là phát hiện những mối quan hệ giữa các giá
trị dữ liệu trong cơ sở dữ liệu, các mối quan hệ đó chính là các luật kết hợp.
Khai phá dữ liệu bằng luật kết hợp là một phương pháp quan trọng trong khai phá
dữ liệu. Nó được ra đời và phát triển mạnh mẽ trong những năm gần đây. Lần đầu
tiên được Rakesh Agrawal, Tomasz Imielinski, Arun Swami đề xuất năm
1993[6]. Sau đó năm 2013 được A.KrishnaKumar, D.Amrita, N.Swathi Priya [11]
tiếp tục phát triển và cải tiến. Đến nay những nghiên cứu về luật kết hợp tập trung
xây dựng thuật toán khai phá luật kết hợp mới, hiệu quả hoặc cải tiến, phát triển
các thuật toán để hiệu quả hơn.
Khai phá luật kết hợp có hai bước: bước thứ nhất, tìm các tập mục thường
xuyên thỏa mãn ngưỡng độ hỗ trợ tối thiểu minsup cho trước, bước thứ hai, từ các
tập mục thường xuyên tìm được, sinh ra các luật kết hợp thỏa mãn ngưỡng độ tin
cậy minconf cho trước. Mọi khó khăn của bài toán khai phá luật kết hợp tập trung ở
bước 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.
Ứng dụng điển hình là trong siêu thị, người ta muốn biết rằng trong giỏ hàng
mua hàng của khách hàng th́ ì thường mua những món hàng nào đi cùng với nhau.
Nếu nhà kinh doanh siêu thị biết được thông tin này thì họ sẽ có chiến lược kinh doanh
phù hợp để tăng thêm lợi nhuận. Ví dụ nếu một luật được khám phá rằng “đa số người
mua dao cạo râu th́ ì sẽ mua kem cạo râu”. Lúc đó nhà kinh doanh có thể sẽ đưa tủ
chứa kem cạo râu lại gần với dao cạo râu hoặc có những h́ ình thức khuyến mãi như
4
mua nhiều kem cạo râu sẽ được tăng dao cạo râu…Không chỉ dừng lại nhưng ứng
dụng trong thương mại, luật kết hợp đã có nhưng ứng dụng rộng rãi trong các lĩnh vực
khác như y tế, tài chính, thiên văn,…
Chương 1 sẽ trình bày các vấn đề cơ bản của khai phá luật kết hợp và bài toán
khai phá tập mục thường xuyên và một số hướng mở rộng của bài toán.
1.1. Các khái niệm cơ bản trong khai phá luật kết hợp
Cho một tập I = {I1, I2, ..., Im} gồm m mục (Item). Tập X I được gọi là tập
mục (itemset) T ={t1, t2,…,tn} là tập gồm n bản ghi (record - còn gọi là giao tác -
transaction), mỗi bản ghi t là một tập mục, được định danh bởi TID (Transaction
Identification). Tương tự như khái niệm tập hợp, các bản ghi không được trùng lặp,
nhưng có thể nới rộng tính chất này của tập hợp và trong các thuật toán sau này,
người ta đều giả thiết rằng các khoản mục trong một bản ghi và trong tất cả các tập
mục khác, có thể coi chúng đã được sắp xếp theo thứ tự từ điển của các mục. Gọi D là
CSDL của n bản ghi và mỗi bản ghi được đánh nhãn với một định danh duy nhất.
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 đó.
5
Ví dụ 1.1.
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
T1
B, C, D
T2
B, C, D
T3
A, B, D
T4
C, D, F
T5
C, D
T6
A, C
T7
A, B, C, F
T8
A, C
T9
A, B, E
T10
A, E
T11
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 này.
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
C
D
E
F
T3, T6, T7, T8, T9, T10, T11
T1, T2, T3, T7, T9, T11
T1, T2, T4, T5, T6, T7, T8, T11
T1, T2, T3, T4, T5
T9, T10
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 ) mn , ở đó:
1 khi iq T p
mpq
0 khi iq T p
6
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
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.
7
Đị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(XY) 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):
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.
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.
8
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.3. 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 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
1.2.1. Cách tiếp cậ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.
9
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).
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ương pháp xác định độ hỗ trợ của tập mục X được chia làm hai cách: cách
thứ nhất là đếm số giao tác chứa X trong cơ sở dữ liệu và cách thứ hai là tính phần
giao của các tập chứa định danh của các giao tác chứa X.
Các thuật toán khai phá có thể phân loại như hình 1.2:
10
BFS
Đếm
DFS
Đếm
Giao
Giao
AIS
Apriori
Partition FPgrowth
Eclat
Hình 1.1. Phân loại các thuật toán khai phá tập mục thường xuyê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ở để
phát triển các thuật toán mới. Thuật toán Apriori tiêu biểu 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.2. 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 [6]. Ý 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 (xem 1.1.2): 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-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:
11
Tập k mục
Chức năng
Tập các k-tập mục thường xuyên (với độ hỗ trợ tối thiểu
minsup). Mỗi phần tử của tập này có 2 trường:
Lk
Tập mục (itemsets)
Độ 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 tiềm
năng). Mỗi phần tử của tập này có 2 trường:
Ck
Tập mục (itemsets)
Độ 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 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-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à: l1[1] l1[2] … l1[k-2] l1[k-1] l2[k-1].
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 Apriori để 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
12
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ừ Lk-1
(4)
For (each T DB) do begin
(5)
C = subset(Ck,T); // Các tập mục ứng viên chứa trong T
(6)
For (each c C)
(7)
(8)
end;
(9)
Lk = { c Ck / c.count ≥ minsup};
c.count++; // tăng số đếm c lên một đơn vị
(10) End;
(11) L= L k ;
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
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
(3)
if (l1[1] = l2[1]) and (l1[2] = l2[2]) and ….. and
(l1[k-2] = l2[k-2]) and (l1[k-1] < l2[k-1])
then
13
(4)
Ck { l1[1], l1[2], … l1[k-2],l1[k-1] l2[k-1]};
// kết nạp k-tập mục mới vào Ck
// Bước tỉa
(5)
For (each ciCk) do
(6)
If exist (s ci) and (sLk-1) then
(7)
(8)
Return Ck;
delete ci from 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
TID
Các mục dữ liệu
T01
A, C, D
T02
B, C, E
T03
A, B, C, E
T04
B, E
- 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ó
Kết nối L1 với L1 được C2:
count < 2
C2
2-tập mục
{A, B}
{A, C}
{A, E}
{B, C}
{B, E}
{C, E}
1-tập mục
{A}
{B}
{C}
{E}
Count
2
3
3
3
14
- 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
C 3
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.
C 3
3-tập mục
{B, C, E}
L3
Count
2
Loại bỏ các 3-tập mục có
3-tập mục
{B, C, E}
Count
2
count < 2
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 L 2 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.3. 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
15
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 [8]. 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 đượ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
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).
16
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
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:
17
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. Từ tập dữ
liệu ban đầu, ta xây dựng header table của cây FP như sau:
18
Hình 1.3. Cây FP-tree của CSDL DB trong bảng
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 thườ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 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 giao tác t, gọi thủ tục insert_tree (t', T), ở đó t' là nội dung