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ề kh
Trang 1LỜ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
Trang 2LỜ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.!
Trang 3MỤ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
Trang 42.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
Trang 5Danh 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
Trang 6Danh 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
Trang 7Danh 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
Trang 8MỞ ĐẦ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ố.
Trang 9Lậ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
Trang 10
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
Trang 11mua 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 i i1, , ,2 i n. 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
Trang 13Ví 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
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ở
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.
Trang 14Đị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
(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
Trang 15Tí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
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.
Trang 16Bà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ả !
k n
n C
tập mục ứng viên có k mục.
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:
Trang 17Hì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:
Partition
FP-growth
Eclat
Trang 18hai 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
Trang 19Method:
(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
Trang 213-tập mục {B, C, E}
L3
Loại bỏ các 3-tập mục có
count < 2
Trang 22- 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).
Trang 23Tiế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
Trang 24Khi 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:
Trang 25Hình 1.3 Cây FP-tree của CSDL DB trong bảng
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
Trang 26củ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.)
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.)
Trang 27- c : 1, b : 1 Các tập mục thương xuyên chứa p là được xác định bởi cơ sở mẫu phụ thuộc này. + Xây dựng đệ qui cây FP-tree cho cơ sở phụ thuộc (condition base) và tìm các tập mục thường xuyên ở trên cây đó, sau đó thêm p vào tất cả chúng
+ Cơ sở mẫu phụ thuộc của m là:
- f : 2, c : 2, a : 2
- f : 1, c : 1, a : 1, b : 1 + FP-tree phụ thuộc của m là chỉ có một đường:
- f : 3, c: 3, a : 3 + Tìm theo cách đệ qui các tập mục thường xuyên trên FP-tree phụ thuộc, đầu tiên cho a, sau đó cho c và f. Cây FP-tree phụ thuộc của m như hình 1.3 sau:
Trang 28
Hình 1.4 FP-tree phụ thuộc của m
Hình 1.5 Các FP-tree phụ thuộc của am, cm và cam
Thuật toán FP- growth:
Khai phá FP-tree được thực hiện bởi gọi lần đầu FP- growth (FP-tree, null), thực hiện như sau:
Vào: Các phân hoạch CSDL DN/P và minsup.
Ra: Tập các mục phổ biến
Trang 29Procedurer FP-growth (Tree, a)
7. Nếu Treeβ=Ø thì gọi FP-growth (Treeβ, β)}
Đánh giá thuật toán FP- growth: Thuật toán này như đã phân tích ở trên, thực
hiện hiệu quả hơn thuật toán Apriori, thực hiện tốt cho tập mục thường xuyên ngắn cũng như dài. Ta có một số nhận xét về thuật toán như sau:
- Độ phức tạp về thời gian: Chỉ duyệt CSDL 2 lần, thời gian xây dựng cây là o(n).
- Độ phức tạp về không gian: Độ cao của cây được giới hạn bởi kích thước của giao tác lớn nhất.
- Thuật toán không bao giờ bị ngắt bởi một mẫu dài nào của mọi giao tác. Cây FP-tree duy trì đầy đủ thông tin cho khai phá các tập thường xuyên. Đồng thời thuật toán cũng rút gọn hợp lý các thông tin không cần thiết bởi cách là các mục không thường xuyên đã bị loại bỏ ngay từ đầu.
- Dùng kỹ thuật sắp theo trật tự giảm dần của tần số xuất hiện, điều đó dẫn đến các mục thường xuyên hơn được chia xẻ nhiều hơn. Cây FP- tree không bao giờ lớn hơn CSDL gốc.
Trang 301.3 Một số hướng mở rộng bài toán khai phá tập mục thường xuyên
Mô hình khai phá tập mục thường xuyên cơ bản có nhiều ứng dụng trong thực
tế nhưng nó có những hạn chế, không đáp ứng đầy đủ yêu cầu của người sử dụng. Ràng buộc về độ hỗ trợ của tập mục thường xuyên chủ yếu 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.
Để đá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 hướng mở rộng bài toán có nhiều ứng dụng là quan tâm đến cấu trúc dữ liệu và mức độ quan trọng khác nhau của các mục dữ liệu, các thuộc tính trong cơ
sở dữ liệu. Một số mô hình mở rộng bài toán đã được nghiên cứu là:
Quan tâm đến 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 một giá trị được gọi là trọng số. Độ hỗ trợ và độ tin cậy của luật kết hợp khi đó lần lượt trở thành độ hỗ trợ và độ tin cậy có trọng số. Luật kết hợp có
độ hỗ trợ và độ tin cậy trọng số hóa được gọi là luật kết hợp có trọng số. Các thuật toán MINWAL(O), MINWAL(W) trong [7] giải quyết vấn đề này.
1.4 Kết luận chương
Chương 1 trình bày chi tiết các khái niệm cơ bản, bài toán khai phá tập mục thường xuyên và hai thuật toán điển hình trong khai phá tập mục thường xuyên là thuật toán Apriori và FP-growth. 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 rồi duyệt cơ sở dữ liệu 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 các tập mục ứng viên mà nén cơ sở dữ liệu lên cấu trúc cây. Tuy nhiên, trong thực tế có nhiều bài toán ứng dụng đòi hỏ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
vì vậy trong chương 2 sẽ giải quyết bài toán trên.
Trang 31Chương 2: KHAI PHÁ TẬP MỤC THƯỜNG XUYÊN CÓ TRỌNG SỐ
Máy tính lưu trữ lượng lớn giao dịch bán lẻ trong kinh doanh bán lẻ. Vì thế việc lấy thông tin từ cơ sở dữ liệu lớn rất hữu ích đối với các giám đốc tiếp thị. Những thông tin đó rất hữu ích trong việc lập chiến lược tiếp thị và đưa ra các quyết định của họ.
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ó. [1, 3, 4, 5, 6, 7, 8]. 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, phát hiện xâm nhập mạng
Để đá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 một giá trị được gọi là trọng số. Độ hỗ trợ và độ tin cậy của luật kết hợp khi đó lần lượt trở thành độ hỗ trợ và độ tin cậy có trọng số. Luật kết hợp có độ hỗ trợ và độ tin cậy trọng số hóa được gọi là luật kết hợp có trọng số.
Mục tiêu của chương này là tìm hiểu thuật toán khai phá tập mục thường xuyên
có trọng số MINWAL [7] theo hướng tiếp cận Apriori và thuật toán khai phá tập mục thường xuyên có trọng số WFIM dựa trên thuật toán FP-Growth [12] theo hướng tiếp cận cấu trúc cây (FP-Tree) bằng cách đưa vào ràng buộc trọng số là phân khoảng trọng số và ngưỡng trọng số nhỏ nhất.
2.1 Thuật toán khai phá tập mục thường xuyên có trọng số MINWAL
2.1.1 Các khái niệm cơ bản
Định nghĩa 2.1. Trọng số chuẩn hóa
Trọng số chuẩn hóa của k-tập mục X được định nghĩa bởi công thức:
Trang 32Định nghĩa 2.3. Tập mục thường xuyên có trọng số chuẩn hóa
Cho k-tập mục XI và ngưỡng hỗ trợ wminsupp. X được gọi là tập mục thường xuyên có trọng số nếu:
NWsupport X wminsupp (2.3) Trường hợp ngược lại, X được gọi là tập mục không thường xuyên có trọng số. Giả sử Y là một q-tập mục con của I và k là một số nguyên thỏa mãn q<k≤N. Gọi
1 2 k q
i , i , i
là (k-q) mục có trọng số lớn nhất trong các tập các mục còn lại (I - Y). Khi đó một k-tập mục chứa Y sẽ có trọng số tối đa là:
1
W(Y,k) w w
j j
Trang 33Tiếp tục giả sử X là một k-tập mục thường xuyên có trọng số chuẩn hóa và chứa Y. Như vậy, từ (1.7) và (2.1) suy ra:
j
j
wminsupp M*k wminsupp*M*k SC(X)
wminsupp*M*k B(Y, k)
trọng số chuẩn hóa X nào đó thì số đếm hỗ trợ của nó phải lớn hơn hoặc bằng B(Y,k).
Ví dụ 2.1 Cho CSDL giao tác như trong bảng 2.1 với trọng số các mục như trong bảng 2.2 và wminsupp = 0,45
Trang 34Định nghĩa 2.6. Cho tập mục X. Tập mục con Y của X mà mỗi mục trong Y đều có trọng số lớn hơn hoặc bằng trọng số của các mục trong X - Y, ta có tập mục Y được gọi là tập con bậc cao (high-order subset) của X.
Mệnh đề 2.2 [3,12] Nếu X là tập mục thường xuyên có trọng số chuẩn hóa thì bất kỳ
một tập con bậc cao nào của X cũng sẽ là tập mục thường xuyên có trọng số chuẩn hóa.
Mệnh đề 2.3. [3,12] Nếu X là một (k +1) - tập mục thường xuyên có trọng số chuẩn hóa
thì X phải là tập cha bậc thấp của một k-tập mục thường xuyên có trọng số chuẩn hóa Y
Với các kết luận nêu trong các Mệnh đề 2.1, 2.2 và 2.3, ta có thể xây dựng thuật toán khai phá tập mục thường xuyên có trọng số chuẩn hóa dưới đây [3,12].
Trang 352.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
Thuật toán MINWAL(W)
Trang 363 Join (Lk-1): (với k 2): Công việc của thủ tục con này là kết nối để tạo ra tập ứng viên Ck. Theo mệnh đề 2.3, một k-tâp mục ứng viên chỉ có thể là tập mục thường xuyên có trọng số chuẩn hóa nếu nó là tập cha bậc thấp của một (k-1)-tập mục thường xuyên có trọng số chuẩn hóa. Vì thế, khi thủ tục con này thực hiện, nó
sẽ kết nối các tập mục thường xuyên có trọng số chuẩn hóa trong Lk-1 với một trong
số các mục có trọng số nhỏ hơn để lập thành một tập cha bậc thấp và nhập vào Ck.
Ví dụ, nếu w1 w2 w5, là các trọng số của các mục a,b,c,d,e và {c,e} là tập mục thường xuyên có trọng số chuẩn hóa đã được phát hiện tại bước lặp II, khi đó thủ tục kết nối Join sẽ chỉ tạo ra các tập mục ứng viên {a,c,e} và {b,c,e}, rồi nhập
Trang 374 Prune (Ck): Ước lượng số đếm hỗ trợ mỗi ứng viên X trong Ck bằng giá trị nhỏ hơn trong hai số đếm hỗ trợ hai tập mục lập nên X tại bước Join(Lk-1). Tính các cận j-hỗ trợ của X. Ứng viên X sẽ bị loại nếu mọi cận j-hỗ trợ của nó, với j ≤ size,
đều lớn hơn số đếm hỗ trợ ước lượng được của X, (theo Mệnh đề 2.1).
5 Checking (Ck,D): Thủ tục này thực hiện công việc kiểm tra. Duyệt CSDL xác định số đếm hỗ trợ thực tế của mỗi ứng viện trong Ck, tính độ hỗ trợ có trọng số của chúng và nhập các tập mục thường xuyên có trọng số chuẩn hóa tìm được vào tập Lk. Tập Lk này cũng sẽ là tập các ứng viên được sử dụng để tạo các tập mục cha có khả năng là tập mục thường xuyên có trọng số chuẩn hóa tại vòng lặp tiếp theo.
Cấu trúc của thuật toán MINWAL(W) tương tự như thuật toán Apriori, nhưng
về chi tiết có một số khác biệt. Mặc dù các k-tập mục thường xuyên có trọng số chuẩn hóa cũng được sinh ra từ các (k-1)-tập mục, nhưng không phải tất cả các tập con của một tập mục thường xuyên có trọng số chuẩn hóa cũng là tập mục thường xuyên có trọng số chuẩn hóa. Vì thế có sự khác biệt trong việc tạo ra các các tập ứng viên giữa thuật toán MINWAL(W) và thuật toán Apriori.
Trong thuật toán Apriori, các tập ứng viên trong Ck được sinh ra bằng việc kết nối các tập mục thường xuyên thuộc Lk-1. Trong thuật toán MINWAL(W), các tập ứng viên trong Ck được sinh ra bằng cách kiến tạo các tập cha của các tập mục trong
Lk-1 (dựa theo Mệnh đề 2.3).
Trong quá trình tỉa bớt các ứng viên giữa MINWAL(W) và Apriori cũng có sự khác biệt. Việc tỉa bớt các ứng viên trong MINWAL(W) không thông qua việc kiểm tra các tập con của các tập mục thường xuyên có trọng số chuẩn hóa có phải là mục thường xuyên có trọng số chuẩn hóa hay không mà sử dụng các cận hỗ trợ ước lượng (theo Mệnh đề 2.1).
Trang 382.1.3 Ví dụ minh họa thuật toán MINWAL
Ví dụ 2.2 Xét CSDL giao tác D trong bảng 2.3 và trọng số mỗi mục như trong bảng 2.4. Giả sử ngưỡng wminsup là 0,45. Ta cần tìm tất cả các tập mục thường xuyên có trọng số chuẩn hóa trong D.
Giải: Duyệt CSDL giao tác D, thu được kích thước dài nhất có thể có của các tập mục trong D là 4.
SC a 4, SC b 5, SC c 2, SC d 6, SC e 7.
Khởi đầu L .
Tính độ hỗ trợ có trọng số chuẩn hóa của các mục, thu được:
Trang 394 5 NWsupport(a) 0,1* 0,057, NWsupport(b) 0,3* 0, 214,
2
C d, c , d, b , d, a , e, d , e, c , e, b , e, a Thực hiện thủ tục Prune: Ước lượng cận trên cho số đếm hỗ trợ (ESC) của các tập mục trong C2 là:
ESC e, a min SC e , SC a min 7, 4 4.
Với ước lượng số đếm hỗ trợ, ta có các ước lượng cho độ hỗ trợ có trọng số chuẩn hóa của các tập mục là:
Trang 400,8 0, 4 2 0,8 0,3 5 ENWsupport(d,c) = * 0,171, ENWsupport(d,b) = * 0,393,
2 7
Các tập mục {d,c}, {d,b}, {d,a}, {e,c}, {e,b} và {e,a} có ước lượng độ hỗ trợ
có trọng số chuẩn hóa nhỏ hơn wminsup = 0,45 nên bị loại. Sau khi prune còn lại C2
= {{e,d}}.
Thực hiện thủ tục Checking: Duyệt CSDL giao tác D, xác định số đếm hỗ trợ thực tế, rồi tính độ hỗ trợ có trọng số chuẩn hóa thực thế của {e,d}:
3
C e, d, c , e, d, b , e, d, a Thực hiện thủ tục Prune: Ước lượng cận trên cho cho số đếm độ hỗ trợ của ba tập mục trong C3 trên đây, ta có: