Download as pdf or txt
Download as pdf or txt
You are on page 1of 69

ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN

VĂN THỊ THIÊN TRANG

KHAI THÁC LUẬT TUẦN TỰ

TRÊN CƠ SỞ DỮ LIỆU CHUỖI

LUẬN VĂN THẠC SĨ


NGÀNH HỆ THỐNG THÔNG TIN

Thành phố Hồ Chí Minh – 2010


ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN

VĂN THỊ THIÊN TRANG

KHAI THÁC LUẬT TUẦN TỰ


TRÊN CƠ SỞ DỮ LIỆU CHUỖI

Ngành: HỆ THỐNG THÔNG TIN


Mã số: 60.48.05

LUẬN VĂN THẠC SĨ


(Chuyên ngành Hệ Thống Thông Tin)

NGƯỜI HƯỚNG DẪN KHOA HỌC:


PGS.TS. LÊ HOÀI BẮC

TP. Hồ Chí Minh – 2010


LỜI CẢM ƠN

Đ ầu tiên, tôi xin chân thành và sâu sắc biết ơn sự tận tình dạy dỗ và sự
giúp đỡ của tất cả quý thầy cô khoa Công nghệ Thông tin, Trường Đại
học Khoa Học Tự Nhiên.

Đặc biệt, tôi xin gửi lời cảm ơn chân thành và sâu sắc nhất đến thầy Lê Hoài
Bắc đã tận tình hướng dẫn và giúp đỡ tôi trong thời gian làm luận văn vừa qua.

Con xin cảm ơn Ba Mẹ đã hết lòng thương yêu và nuôi nấng dạy dỗ con nên
người. Luôn luôn động viên con trong những lúc khó khăn, giúp con vượt qua khó
khăn và thử thách trong công việc cũng như trong cuộc sống.

Cuối cùng, tôi xin gửi lời cảm ơn đến bạn bè, đồng nghiệp, những người luôn
sát cánh động viên, và tạo mọi điều kiện tốt nhất để tôi có thể học tập và hoàn tất
được luận văn tốt nghiệp này.

Văn Thị Thiên Trang


Mục lục

Mục lục .............................................................................................. i 


Danh mục các bảng .........................................................................iii 
Danh mục các hình vẽ, đồ thị .......................................................... iv 
MỞ ĐẦU .......................................................................................... 1 
U

Chương 1 .  TỔNG QUAN.............................................................. 3 


1.1  Đặc điểm dữ liệu chuỗi ......................................................................... 3 
1.2  Một số ví dụ về dữ liệu chuỗi ............................................................... 3 
1.3  Các kỹ thuật thác dữ liệu chuỗi............................................................. 6 
1.4  Khai thác luật trên cơ sở dữ liệu chuỗi ................................................. 7 
1.5  Đóng góp của luận văn ......................................................................... 9 

Chương 2 .  CƠ SỞ LÝ THUYẾT ................................................ 10 


2.1  Giới thiệu ............................................................................................10 
2.2  Ý nghĩa luật tuần tự.............................................................................10 
2.3  Phát biểu bài toán khai thác luật tuần tự .............................................11 
2.3.1  Các khái niệm về chuỗi dữ liệu ...................................................11 
2.3.2  Các khái niệm về luật tuần tự ......................................................14 
2.3.3  Bài toán khai thác luật tuần tự .....................................................14 
2.4  Khai thác mẫu tuần tự .........................................................................16 
2.4.1  Các cách tổ chức dữ liệu..............................................................16 
2.4.2  Các hướng tiếp cận ......................................................................18 
2.4.3  Thuật toán PRISM .......................................................................22 

-i-
2.5  Khai thác luật tuần tự từ tập mẫu tuần tự............................................35 
2.5.1  Một số hướng tiếp cận trong khai thác luật tuần tự .....................35 
2.5.2  Thuật toán Full.............................................................................35 

Chương 3 .  PHƯƠNG PHÁP KHAI THÁC LUẬT TUẦN TỰ


DỰA TRÊN CÂY TIỀN TỐ ................................................................. 37 
3.1  Giới thiệu ............................................................................................37 
3.2  Thuật toán MSR_ImpFull ...................................................................37 
3.3  Thuật toán MSR_PreTree ...................................................................40 
3.3.1  Cây tiền tố....................................................................................40 
3.3.2  Thuật toán MSR_PreTree ............................................................42 
3.3.3  Trường hợp đặc biệt ....................................................................45 
3.3.4  Đánh giá.......................................................................................49 

Chương 4 .  KẾT QUẢ THỰC NGHIỆM ..................................... 50 


4.1  Giới thiệu ............................................................................................50 
4.2  Kết quả thực nghiệm trên cơ sở dữ liệu tổng hợp...............................50 
4.3  Kết quả thực nghiệm trên cơ sở dữ liệu thực ......................................54 

Chương 5 .  KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN ................. 58 


5.1  Kết luận ...............................................................................................58 
5.2  Hướng phát triển .................................................................................58 

TÀI LIỆU THAM KHẢO .............................................................. 60 

- ii -
Danh mục các bảng

Bảng 2.1. CSDL chuỗi ..............................................................................................13 


Bảng 2.2. Tập mẫu tuần tự ........................................................................................15 
Bảng 2.3. Tập luật tuần tự sinh từ tập mẫu tuần tự ...................................................15 
Bảng 3.1. Tập mẫu tuần tự sau khi sắp tăng theo kích thước ...................................39 
Bảng 3.2. Sinh luật tuần tự sử dụng thuật toán MSR_ImpFull .................................39 

Bảng 3.3. Sinh luật tuần tự từ cây con gốc 〈(A)〉 sử dụng thuật toán MSR_PreTree44 
Bảng 3.4. CSDL chuỗi, mỗi itemset trong chuỗi chỉ có 1 item ................................46 

Bảng 3.5. Sinh luật tuần tự từ cây con gốc 〈(A)〉 sử dụng thuật toán MSR_PreTree
(trường hợp đặc biệt) .................................................................................................48 
Bảng 4.1. Đặc điểm của các CSDL tổng hợp ...........................................................51 
Bảng 4.2. So sánh thời gian thực hiện trên các CSDL tổng hợp (minConf = 50%) .52 
Bảng 4.3. Đặc điểm của các CSDL thực...................................................................54 
Bảng 4.4. So sánh thời gian thực hiện trên các CSDL tổng hợp (minConf = 50%) .55 

- iii -
Danh mục các hình vẽ, đồ thị

Hình 1.1. Một phân đoạn của chuỗi DNA [8] ............................................................. 4 
Hình 1.2. Một phân đoạn của chuỗi Protein [8] .......................................................... 4 
Hình 1.3. Một chuỗi truy cập web [8] ......................................................................... 5 
Hình 1.4. Chuỗi các lần mua sắm của một khách hàng [8]......................................... 5 
Hình 1.5. Chuỗi lịch sử bán hàng của các cửa hàng [8].............................................. 5 

Hình 2.1. Dàn xây dựng trên tập ⊗P(G) ...................................................................24 


Hình 2.2. Ví dụ về khối mã hóa nguyên tố. ..............................................................27 
Hình 2.3. Không gian khai thác mẫu tuần tự, bao gồm mở rộng theo itemset và mở
rộng theo chuỗi với chiến lược tìm kiếm theo chiều sâu ..........................................30 
Hình 2.4. Mã hóa nguyên tố cho mẫu mở rộng. .......................................................32 
Hình 2.5. Thuật toán Full [14] ..................................................................................36 
Hình 3.1. Thuật toán MSR_ImpFull .........................................................................38 
Hình 3.2. Các mẫu tuần tự được lưu trữ trên cây tiền tố...........................................41 
Hình 3.3. Thuật toán MSR_PreTree .........................................................................43 
Hình 3.4. Thủ tục sinh luật từ các mẫu trên cây với tiền tố cho trước ......................44 
Hình 3.5. Cây tiền tố lưu trữ các mẫu tuần tự ...........................................................47 
Hình 3.6. Thủ tục sinh luật từ một cây con (có sửa đổi) ...........................................48 
Hình 4.1. So sánh tốc độ thực thi của ba thuật toán trên CSDL - C6T5N1kD1k .....53 
Hình 4.2. So sánh tốc độ thực thi của ba thuật toán trên CSDL - C6T5N1kD10k ..53 
Hình 4.3. So sánh tốc độ thực thi của ba thuật toán trên CSDL thực - Chess .........56 
Hình 4.4. So sánh tốc độ thực thi của ba thuật toán trên CSDL thực - Mushroom ..56 
Hình 4.5. So sánh tốc độ thực thi của ba thuật toán trên CSDL thực – Pumb-star ...57 

- iv -
MỞ ĐẦU

1. Lời nói đầu


Với sự phát triển nhanh chóng của máy tính và công nghệ Internet, khối
lượng dữ liệu thu thập được từ các ứng dụng dưới nhiều dạng khác nhau ngày càng
trở nên đồ sộ. Do đó khai thác dữ liệu nhằm tìm kiếm những thông tin quý giá,
những tri thức cần thiết tiềm ẩn trong khối lượng dữ liệu đồ sộ đó.
Sự đa dạng và phong phú của dữ liệu hình thành nên nhiều mô hình dữ liệu
khác nhau: mô hình dữ liệu giao tác (transaction), mô hình dữ liệu chuỗi (sequence),
mô hình dòng dữ liệu (data stream), chuỗi thời gian (time-series)… Với mô hình dữ
liệu chuỗi, sự kiện hoặc dữ liệu nói chung tồn tại theo một chuỗi có trật tự thời gian,
nhưng không nhất thiết phải gắn liền với một khái niệm thời gian cụ thể. Ví dụ
chuỗi các mặt hàng đã mua sắm của các khách hàng tại một cửa hàng, chuỗi truy
cập web, chuỗi di truyền trong sinh học, chuỗi sự kiện trong khoa học, trong tự
nhiên hoặc xã hội …
Mặc dù đã có nhiều phương pháp khai thác dữ liệu chung cho các loại dữ
liệu nhưng đối với dữ liệu chuỗi, không thể áp dụng những phương pháp này vì dữ
liệu chuỗi có đặc thù riêng. Bản chất của dữ liệu chuỗi là có tính thứ tự, dựa trên
tích chất này có thể phân ra nhiều loại khác nhau, bao gồm: mẫu tuần tự, mẫu tuần
hoàn, mẫu có thứ tự bộ phận, mẫu chuỗi sinh học xấp xỉ… Sự phong phú về các
loại chuỗi đã đẩy mạnh việc phát triển các phương pháp mới trên các bài toán phân
lớp, gom cụm, khai thác luật… Chính vì vậy, khai thác dữ liệu chuỗi nói chung,
khai thác mẫu và tri thức nói riêng từ khối lượng dữ liệu chuỗi lớn đã trở thành một
trong những chủ đề nghiên cứu cơ bản và thiết thực trong lĩnh vực khai thác dữ liệu.
Mô hình dữ liệu chuỗi thể hiện rõ rệt mối quan hệ xuyên thời gian của dữ
liệu, chính vì vậy việc áp dụng khai thác luật trên mô hình dữ liệu này kỳ vọng
mang lại nhiều tri thức tiềm ẩn quí giá có ý nghĩa liên kết xuyên thời gian.
Luận văn này tập trung nghiên cứu giải pháp cho bài toán khai thác luật tuần
tự trên cơ sở dữ liệu (CSDL) chuỗi. Dựa trên một số công trình nghiên cứu trong

-1-
lĩnh vực khai luật tuần tự đã công bố trong những năm gần đây, từ đó luận văn trình
bày:

• Luật tuần tự: Ý nghĩa luật tuần tự, phát biểu bài toán và các hướng tiếp
cận.

• Phương pháp khai thác mẫu tuần tự: trình bày thuật toán PRISM.

• Phương pháp khai thác luật tuần tự từ tập mẫu tuần tự: trình bày hai thuật
toán đề xuất là MSR_ImpFull và MSR_PreTree.

• Kết quả thực nghiệm trên các phương pháp đề xuất và so sánh kết quả
với các phương pháp đã có.

2. Bố cục đề tài
Chương 1: Tổng quan
Chương 2: Cơ sở lý thuyết
Chương 3: Phương pháp khai thác luật tuần tự dựa trên cây tiền tố
Chương 4: Kết quả thực nghiệm
Chương 5: Kết luận và hướng phát triển
Luận văn trình bày trong 5 chương. Chương 1 giới thiệu chung về CSDL
chuỗi, một số kỹ thuật khai thác dữ liệu chuỗi; đồng thời nêu lên hướng tiếp cận
nghiên cứu và đóng góp của đề tài. Chương 2 trình bày cơ sở lý thuyết của bài toán
khai thác luật tuần tự và các giai đoạn giải quyết bài toán. Chương 3 trình bày chi
tiết các phương pháp mà đề tài đề xuất. Kết quả thực nghiệm triển khai trên CSDL
tổng hợp IBM và CSDL chuẩn UCI được mô tả trong chương 4. Chương 5 trình bày
kết luận chung và định hướng phát triển của đề tài. Cuối cùng, phần tham khảo trình
bày các bài báo, sách được tham khảo, trích dẫn trong luận văn.

-2-
Chương 1 . TỔNG QUAN

1.1 Đặc điểm dữ liệu chuỗi

Dữ liệu chuỗi có một số đặc điểm riêng biệt so với các loại dữ liệu khác. Do
đó, khai thác dữ liệu chuỗi đặt ra nhiều cơ hội và thách thức, thu hút nhiều quan tâm
nghiên cứu. Dữ liệu chuỗi có đặc điểm như sau [8]:
Kích thước chuỗi có thể rất dài. Trong cùng một CSDL, kích thước của mỗi
chuỗi là khác nhau thậm chí có sự chênh lệch lớn. Ví dụ các chuỗi gen có độ dài tối
thiểu là vài trăm nhưng độ dài tối đa lên đến hàng trăm nghìn.
Một mẫu là một chuỗi con, nghĩa là các thành phần trong chuỗi con phải liên
tục kề nhau trong chuỗi cha ban đầu. Một mẫu cũng có thể là một tập hợp con của
chuỗi, các thành phần của mẫu không liên tục trong chuỗi cha.
Vị trí tuyệt đối của các thành phần trong chuỗi thường không quan trọng.
Chẳng hạn, khi cần kiểm tra một chuỗi dữ liệu có chứa một mẫu hay không thì
không cần quan tâm mẫu đó xuất hiện trong chuỗi ở vị trí tuyệt đối nào.
Mối quan hệ về thứ tự/vị trí giữa các thành phần trong chuỗi đóng vai trò quan
trọng. Ví dụ chuỗi XY hoàn toàn khác với chuỗi YX. Hơn nữa, khoảng cách giữa
hai thành phần trong chuỗi cũng có ý nghĩa. Mối quan hệ về thứ tự/vị trí giữa các
thành phần trong chuỗi là đặc điểm duy nhất chỉ có ở dữ liệu chuỗi. Đây chính là
điểm khác biệt cơ bản của dữ liệu chuỗi so với các loại dữ liệu khác.

1.2 Một số ví dụ về dữ liệu chuỗi

• Chuỗi dữ liệu sinh học: DNA, RNA và Protein


Chuỗi dữ liệu sinh học giúp chúng ta hiểu rõ về cấu trúc và chức năng của các
loại tế bào khác nhau, hỗ trợ cho việc chẩn đoán và chữa bệnh. Có ba loại chuỗi
sinh học là chuỗi deoxyribonucleic acid (DNA), chuỗi amino acid (hay còn gọi là

-3-
Protein) và ribonucleic acid (RNA). Hình 1.1 và 1.2 minh họa một phần của chuỗi
DNA và một phần của chuỗi protein.
GAATTCTCTGTAACACTAAGCTCTCTTCCTCAAAACCAGAGGTAGATAGAA
TGTGTAATAATTTACAGAATTTCTAGACTTCAACGATCTGATTTTTTAAATT
TATTTTTATTTTTTCAGGTTGAGACTGAGCTAAAGTTAATCTGTGGC

Hình 1.1. Một phân đoạn của chuỗi DNA [8]


SSQIRQNYSTEVEAAVNRLVNLYLRASYTYLSLGFYFDRDDVALEGVCHEFRE
LAEEKREGAERLLKMQNQRGGRALFQDLQKPSQDEWGTTPDAMKAAIVLE
KSLNQALLDLHALGSAQADPHLCDFLESHFLDEEVKLIKKMGDHLTNIQRLV
GSQAGLGEYLFERLTLKHD

Hình 1.2. Một phân đoạn của chuỗi Protein [8]


Một số bài toán phân tích dữ liệu trên chuỗi sinh học thường gặp là: Phân tích
cấu trúc và chức năng của protein từ chuỗi protein, xác định đặc điểm của mẫu
trong họ các chuỗi DNA, RNA hay protein, so sánh họ các chuỗi với nhau…

• Chuỗi sự kiện: chuỗi lịch sử bán hàng, chuỗi lịch sử mua sắm của
khách hàng, chuỗi vết hệ thống, chuỗi truy cập web (weblog)…
Chiếm phần lớn các loại chuỗi là chuỗi sự kiện. Từ những chuỗi như vậy, có
thể hiểu được cách thức các đối tượng hoạt động như thế nào, từ đó rút ra cách tốt
nhất để giải quyết chúng. Sau đây là một số ví dụ về chuỗi sự kiện.
Chuỗi truy cập web là một chuỗi các cặp gồm định danh người dùng và sự
kiện. Một sự kiện là một yêu cầu về một tài nguyên web chẳng hạn như một trang
web hay một dịch vụ. Với mỗi trang được yêu cầu, một số thông tin truyền thống là
có sẵn, ví dụ như kiểu và nội dung của trang, lượng thời gian người dùng đã tiêu tốn
trên trang đó. Các sự kiện của một mẫu truy cập web được liệt kê dưới dạng danh
sách tăng dần theo thời gian. Hình 1.3 minh họa một chuỗi truy cập web, trong đó a,
b, c, d, e là các sự kiện và 100, 200, 300 và 400 là các định danh của người dùng.

-4-
〈100, a〉, 〈100,b〉, 〈200, a〉, 〈300, b〉 〈400, a〉, 〈100, a〉, 〈400, b〉, 〈300, a〉, 〈100, c〉,
〈200, c〉, 〈400, a〉, 〈400, e〉

Hình 1.3. Một chuỗi truy cập web [8]


Chuỗi vết hệ thống cũng tương tự như chuỗi truy cập web. Chúng là chuỗi các
bản ghi ghi nhận các hoạt động được thực hiện bởi người dùng hoặc tiến trình, trên
những loại dữ liệu và tài nguyên khác nhau trong một hay nhiều hệ thống.
Chuỗi lịch sử mua sắm của khách hàng là những chuỗi các bộ, trong đó mỗi
bộ gồm định danh khách hàng, địa điểm, thời gian và tập các mặt hàng đã mua…
Hình 1.4 minh họa chuỗi các lần mua sắm của một khách hàng có định danh là
223100.

〈223100, 05/26/06, 10am, CentralStation, {WholeMealBread, AppleJuice}〉,

〈223100, 05/26/06, 11am, CentralStation, {Burger, Pepsi, Banana }〉,

〈223100, 05/26/06, 4am, WalMart, {Milk, Cereal, Vegetable}〉,

〈223100, 05/26/06, 10am, CentralStation, {WholeMealBread, AppleJuice}〉

Hình 1.4. Chuỗi các lần mua sắm của một khách hàng [8]
Chuỗi lịch sử bán hàng là chuỗi các bộ, mỗi bộ gồm định danh cửa hàng, thời
gian, tổng số các mặt hàng đã bán và doanh thu tương ứng tại thời gian đó và một số
thông tin khác. Hình 1.5 minh họa chuỗi lịch sử bán hàng của các cửa hàng.

〈97100, 05/06, {〈Apple : $85K〉, 〈Bread : $100K〉, 〈Cereal : $150K〉, …}〉,

〈90089, 05/06, {〈Apple : $65K〉, 〈Bread : $105K〉, 〈Diaper : $20K〉, …}〉,

〈97100, 05/06, {〈Apple : $95K〉, 〈Bread : $110K〉, 〈Cereal : $160K〉, …}〉,

〈90089, 05/06, {〈Apple : $66K〉, 〈Bread : $95K〉, 〈Diaper : $22K〉, …}〉

Hình 1.5. Chuỗi lịch sử bán hàng của các cửa hàng [8]

-5-
1.3 Các kỹ thuật thác dữ liệu chuỗi

Khai thác dữ liệu phụ thuộc vào loại tri thức mà hệ thống khai phá tri thức và
khai thác dữ liệu tìm kiếm. Mỗi nhiệm vụ khai thác dữ liệu có đặc tính riêng của nó
và thực hiện theo các bước trong quá trình khai thác tri thức. Sau đây là các nhiệm
vụ khai thác dữ liệu thường được sử dụng phổ biến trong ứng dụng khai thác dữ liệu
chuỗi [8].

• Khai thác chuỗi con phổ biến hay còn gọi là khai thác mẫu tuần tự
(mining frequent subsequence hoặc mining sequential pattern)
Khai thác mẫu tuần tự là khai thác các mẫu phổ biến liên quan đến thời gian
hoặc các sự kiện khác, với yêu cầu là các mẫu phổ biến là những chuỗi con trong
CSDL chuỗi mà sự xuất hiện của chúng lớn hơn ngưỡng hỗ trợ do người dùng chỉ
ra.

• Phân lớp các chuỗi (classification)


Khai thác có hay không một phần tử thuộc về một trong các lớp đã biết trước.
Vấn đề là phải xác định các lớp như thế nào. Trong thực tế, các lớp thường được
xác định dựa trên giá trị của trường nào đó trong mẫu tin hoặc dẫn xuất của các giá
trị khác nhau trong các trường.

• Phân cụm các chuỗi (cluster identification)


Sắp xếp các đối tượng theo từng cụm. Ngược với lớp, số lượng và tên của cụm
chưa được biết trước. Khi xác định các cụm, các độ đo khoảng cách được sử dụng
để tính toán sao cho mức độ tương tự giữa các đối tượng trong cùng một cụm là lớn
nhất và mức độ tương tự giữa các đối tượng nằm trong các cụm khác nhau là nhỏ
nhất.

• Khai thác luật (mining rules)


Khai thác luật là quá trình tìm kiếm những mối quan hệ theo thời gian giữa các
sự kiện tuần tự. Một luật mô tả mẫu tuần tự có dạng X→Y phản ánh sự xuất hiện
của biến cố X sẽ dẫn đến sự xuất hiện của biến cố Y kế tiếp.

-6-
1.4 Khai thác luật trên cơ sở dữ liệu chuỗi

Trên CSDL chuỗi, đã có nhiều nghiên cứu trên các loại luật khác nhau: luật
tuần tự (sequential rules), luật thú vị (interesting rules), luật phân lớp tuần tự
(sequential classification rules), luật tuần hoàn (recurrent rules).
Luật tuần tự [5], [14], [19] mở rộng khả năng sử dụng và tăng cường ý nghĩa
của mẫu tuần tự. Một luật khai thác được sẽ biểu diễn ràng buộc là: trong một chuỗi
sự kiện, những sự kiện xảy ra trước sẽ được theo sau bởi một loạt sự kiện khác.
Ngoài ra, độ thú vị của một luật được đo bởi cả hai yếu tố là độ hỗ trợ và độ tin cậy.
Độ tin cậy là một độ đo hữu ích, đặc biệt là khi ngưỡng hỗ trợ tối thiểu có giá trị
thấp. Do đó, luật tuần tự đặc biệt hữu dụng cho việc dò và lọc ra những dị thường
mà vi phạm các ràng buộc. Chính vì vậy, chúng được ứng dụng rộng rãi trong việc
dò lỗi, phát hiện xâm nhập và bẫy lỗi… Bên cạnh đó, các nghiên cứu cũng cho thấy
rằng luật tuần tự cũng rất có ích trong lĩnh vực y dược [24] và công nghệ phần mềm
[15], [22].
Luật thú vị [19] tương tự như luật tuần tự, nó cũng biểu diễn ràng buộc giữa
các loạt sự kiện theo thời gian. Độ thú vị của luật cũng được đo bởi hai yếu tố là độ
hỗ trợ và độ tin cậy, tuy nhiên bổ sung thêm một độ đo mới, đó là độ tăng cường
(improvement).
Phân lớp là một kỹ thuật khai thác dữ liệu quan trọng, cho phép gán nhãn tự
động cho một đối tượng dữ liệu vào một phân lớp đúng.

Luật phân lớp tuần tự [5] là luật biểu thị dưới dạng X→c, với X là một
chuỗi và c là nhãn của một lớp. Luật X→c là một luật phân lớp tuần tự trong CSDL
chuỗi khi và chỉ khi tồn tại một chuỗi dữ liệu trong CSDL là chuỗi cha của X và
chuỗi dữ liệu đó thuộc phân lớp có nhãn là c.
Luật tuần hoàn [16] là luật được tạo ra từ hai loại mẫu: mẫu tuần tự (frequent
sequential pattern) và phân đoạn phổ biến (frequent episode). Phân đoạn (episode)
được định nghĩa là mẫu gồm các sự kiện xuất hiện tương đối gần nhau trong chuỗi,
tức là các sự kiện xuất hiện trong một giới hạn thời gian (time window). Luật tuần

-7-
tự được sinh từ mẫu tuần tự. Một luật tuần tự X→Y phát biểu rằng khi một chuỗi
trong CSDL là chuỗi cha của mẫu X thì nó cũng là chuỗi cha của mẫu gồm mẫu X
nối với mẫu Y. Luật sinh từ phân đoạn gọi là luật phân đoạn. Một luật phân đoạn
X→Y phát biểu rằng: khi một phân đoạn là chuỗi cha của mẫu X thì nó cũng là
chuỗi cha của mẫu X nối với Y. Luật tuần hoàn khái quát cả hai loại luật – tuần tự
và phân đoạn: khái quát luật tuần tự ở chỗ phần tiền kiện X và hậu kiện Y được xét
có thể lấy từ cùng một chuỗi hoặc nhiều chuỗi khác nhau; đồng thời, luật tuần hoàn
khái quát luật phân đoạn bằng cách cho phép phần tiền kiện X và hậu kiện Y được
tách riêng bởi một số sự kiện tùy ý trong CSDL chuỗi.
Trong các loại luật trên, luật tuần tự là cơ bản nhất, các loại luật còn lại đều là
dạng biến đổi của luật tuần tự bằng cách bổ sung thêm hoặc loại bỏ đi một số thông
tin hoặc ràng buộc. Do đó, luận văn tập trung nghiên cứu trên bài toán khai thác luật
tuần tự.
Khai thác luật tuần tự là việc tìm kiếm những mối quan hệ theo thời gian giữa
các sự kiện tuần tự. Một luật tuần tự biểu diễn dưới dạng Χ→Υ, nghĩa là nếu X có
mặt trong một chuỗi bất kỳ của CSDL thì với một độ tin cậy cao có thể khẳng định
Y cũng xuất hiện trong chuỗi đó theo sau X.
Tuy nhiên, trong lĩnh vực khai thác luật tuần tự, có những nghiên cứu cho bài
toán khai thác luật tuần tự không dư thừa (Spiliopoulou-1999, David Lo-2009) mà
chưa có nghiên cứu thực sự nào cho bài toán khai thác tập đầy đủ các luật tuần tự.
Tuy nhiên, nếu khai thác luật dựa trên những độ đo khác chẳng hạn như độ đo lift
[6] hoặc độ đo conviction [7] thì cách tiếp cận giải quyết bài toán của David Lo và
đồng sự không còn phù hợp. Hiện nay, chỉ có duy nhất một phương pháp cơ bản để
khai thác tập luật tuần tự đầy đủ do Spiliopoulou đề xuất [19]. Từ những mô tả của
phương pháp này, David Lo cùng đồng sự đã khái quát thành thuật toán Full [14].
Đặc điểm cơ bản của thuật toán Full là dựa trên phương pháp vét cạn, do đó tốn
nhiều chi phí tính toán. Chính vì vậy, luận văn tập trung nghiên cứu cho bài toán
khai thác tập đầy đủ các luật tuần tự.

-8-
1.5 Đóng góp của luận văn

Luận văn trình bày các giai đoạn giải quyết bài toán khai thác luật tuần tự trên
CSDL chuỗi.

• Giai đoạn 1: Khai thác tập mẫu tuần tự.

• Giai đoạn 2: Khai thác luật tuần tự từ tập mẫu tuần tự.
Đối với từng giai đoạn, luận văn nghiên cứu các phương pháp tiến bộ đã có và
chọn ra phương pháp tối ưu nhất. Ở giai đoạn một của bài toán, để tiến hành khai
thác tập mẫu tuần tự hiệu quả, luận văn sử dụng phương pháp mã hóa nguyên tố
được đề xuất bởi Gouda và Zaki (2010) và cải tiến bằng cách tổ chức cơ sở dữ liệu
đầu vào theo định dạng dọc. Với phương pháp này, tập mẫu tuần tự tìm thấy được
lưu trữ dưới dạng cấu trúc cây tiền tố. Ở giai đoạn khai thác luật, các phương pháp
tiến bộ hiện thời vẫn tồn tại nhược điểm. Do đó, luận văn đề xuất một số phương
pháp mới để khắc phục các nhược điểm này. Luận văn đề xuất hai thuật toán:
MSR_ImpFull và MSR_PreTree. Trong đó, MSR_ImpFull là thuật toán cải tiến
thuật toán Full [14] đã có, còn MSR_PreTree là thuật toán mới. Thuật toán
MSR_PreTree tiến hành khai thác tập đầy đủ các luật tuần tự dựa trên cây tiền tố.

-9-
Chương 2 . CƠ SỞ LÝ THUYẾT

2.1 Giới thiệu

Trong lĩnh vực khai thác dữ liệu trên CSDL chuỗi, khai thác mẫu tuần tự là bài
toán đầu tiên được đề xuất bởi Agrawal và Srikant vào năm 1995 [3] và đã thu hút
nhiều nghiên cứu [4], [5], [10], [17], [18], [20], [23]. Cho CSDL chuỗi, khai thác
mẫu tuần tự là xác định những mẫu mà sự xuất hiện của chúng trong CSDL thỏa
ngưỡng hỗ trợ tối thiểu. Khai thác mẫu tuần tự được ứng dụng trong nhiều lĩnh vực
như: phân tích thị trường, phân tích mẫu truy cập web, dự đoán nhu cầu mua sắm
của khách hàng…
Luật tuần tự được sinh từ mẫu tuần tự, nó biểu diễn mối quan hệ giữa hai loạt sự
kiện, loạt sự kiện này sẽ xảy ra sau loạt sự kiện kia. Luật tuần tự mở rộng khả năng
sử dụng và ý nghĩa biểu đạt của mẫu tuần tự, thể hiện tri thức tiềm ẩn của dữ liệu
tuần tự.

2.2 Ý nghĩa luật tuần tự

Luật tuần tự biểu diễn mối quan hệ giữa các mẫu tuần tự theo thời gian. Có thể
coi luật tuần tự là mở rộng tự nhiên của mẫu tuần tự, tương tự như luật kết hợp là
mở rộng tự nhiên của tập phổ biến [2]. Một luật tuần tự biểu thị dưới dạng X→Y,
nghĩa là trong các chuỗi dữ liệu, nếu mẫu X xuất hiện thì mẫu Y cũng xuất hiện
theo sau mẫu X với độ tin cậy cao. So với các mẫu tuần tự, các luật giúp ta hiểu tốt
hơn về thứ tự thời gian thể hiện trong CSDL chuỗi. Ví dụ, một người mua đĩa phim
Star Wars phần 4 sẽ mua tiếp phần 5 và phần 6. Như vậy mẫu mua hàng (4, 5, 6) là
mẫu thể hiện hoạt động mua. Tuy nhiên, trong thực tế một cửa hàng bán đĩa có hàng
trăm khách hàng với sở thích khác nhau. Do đó, mẫu (4, 5, 6) có xu hướng xuất hiện
với độ hỗ trợ thấp. Khai thác với độ hỗ trợ thấp vẫn trả về các mẫu, tuy nhiên sẽ có
nhiều mẫu sai và không thích hợp. Nếu như sử dụng luật, có thể loại bỏ đi các mẫu

- 10 -
sai như vậy bằng cách đưa ra khái niệm độ tin cậy cho tập mẫu. Chỉ có những luật
thỏa ngưỡng hỗ trợ và ngưỡng tin cậy mới được khai thác.
Như vậy, thông qua luật tuần tự chúng ta có thể biết được loạt sự kiện nào
thường sẽ xảy ra sau loạt sự kiện trước đó. Luật tuần tự tuy khá đơn giản nhưng
những thông tin mà luật mang lại có nhiều ý nghĩa quan trọng, hỗ trợ không nhỏ
cho quá trình ra quyết định, quản lý và có tính định hướng. Luật tuần tự rất hữu ích
trong nhiều lĩnh vực: y dược [24], thương mại [8], công nghệ phần mềm [13], [15],
[22]. Một số ví dụ về ý nghĩa của luật tuần tự trong các lĩnh vực ứng dụng:

• Phân tích thị trường: Nếu một khách hàng mua xe hơi thì sau đó khách
hàng này sẽ mua bảo hiểm. Quy luật này rất hữu ích cho việc thiết kế
chiến lược quảng cáo sản phẩm đối với khách hàng.

• Y dược: Nếu một bệnh nhân bị sốt và giảm mức thrombosite, sau đó xuất
hiện những đốm đỏ trên da thì có khả năng bệnh nhân này mắc bệnh sốt
xuất huyết. Luật tuần tự này giúp dự đoán bệnh để có hướng điều trị thích
hợp cho bệnh nhân.

• Công nghệ phần mềm: Nếu trình điều khiển thiết bị trong hệ điều hành
Window gọi thủ tục KeAcquireSpinLock thì sau đó cũng sẽ gọi thủ tục
KeReleaseSpinLock [14].

2.3 Phát biểu bài toán khai thác luật tuần tự

2.3.1 Các khái niệm về chuỗi dữ liệu


Cho tập I = {i1, i2, …, im} gồm m phần tử còn gọi là các item. Một itemset là
tập không có thứ tự khác rỗng, gồm các item. Itemset i ký hiệu là (i1, i2, …, ik ) với
mỗi ij là một item. Itemset có lực lượng là k ký hiệu là k-itemset. Không mất tính
tổng quát, giả sử các item trong itemset được sắp theo thứ tự tăng dần.
Một chuỗi (sequence) là một danh sách có thứ tự những itemset. Chuỗi s được
ký hiệu là 〈s1 s2… sn〉 hoặc 〈s1→s2→…→sn〉 với mỗi si là một itemset, n là số lượng
itemset. Kích thước của chuỗi bằng số lượng itemset có trong chuỗi. Chiều dài của

- 11 -
n
chuỗi là tổng số item có trong chuỗi, ký hiệu là l = ∑ si . Chuỗi có chiều dài k còn
j =1

được gọi là k-sequence. Ví dụ, s = 〈(B)(AC)〉 là một 3-sequence có kích thước là 2.

Chuỗi β = 〈b1 b2 … bm〉 được gọi là chuỗi con của chuỗi α = 〈a1 a2 … an〉 hay
α là chuỗi cha của β, ký hiệu β ⊆ α, nếu tồn tại những số nguyên 1≤ j1 < j2 < … <
jn ≤ m sao cho b1 ⊆ aj1, b2 ⊆ aj2, …, bm ⊆ ajm. Ví dụ chuỗi 〈(B)(AC)〉 là chuỗi con của
〈(AB)(E)(ACD)〉; nhưng 〈(AB)(E)〉 không phải là chuỗi con của chuỗi 〈(ABE)〉 và
ngược lại.
Cơ sở dữ liệu chuỗi: Cơ sở dữ liệu chuỗi là một tập hợp các bộ dữ liệu có
dạng (sid, s), trong đó sid là định danh của chuỗi và s là chuỗi các itemset.
Mẫu: Mẫu là một chuỗi con của một chuỗi dữ liệu. Mỗi itemset trong một
mẫu còn được gọi là một thành phần (element).
Độ hỗ trợ (support): Cho CSDL chuỗi D, mỗi chuỗi có một chỉ số định danh
duy nhất. Độ hỗ trợ tuyệt đối của một mẫu tuần tự f là tổng số chuỗi trong D có
chứa f, ký hiệu sup D ( f ) = {S i ∈ D f ⊆ S i } . Độ hỗ trợ tương đối của f là tỉ lệ phần

trăm chuỗi trong D chứa f. Ở đây, mức hỗ trợ tuyệt đối hoặc tương đối sẽ được sử
dụng chuyển đổi qua lại, kí hiệu là sup(f).
Mẫu tuần tự: Cho trước ngưỡng hỗ trợ tối thiểu (minSup) xác định bởi người
dùng, minSup ∈ (0, 1]. Một mẫu f được coi là phổ biến nếu độ hỗ trợ của nó lớn hơn
hoặc bằng minSup: sup(f) ≥ minSup, khi đó f được gọi là mẫu tuần tự.
Ví dụ: Cho CSDL như bảng 2.1 có tập các item phân biệt là {A, B, C} và
minSup tuyệt đối là 2. Xét chuỗi s1 = 〈(AB)(B)(B)(AB)(B)(AC)〉, chuỗi s1 có 6
itemset là: (AB), (B), (B), (AB), (B), (AC) và có 9 item. Vậy s1 có kích thước là 6
và có độ dài là 9. Trong chuỗi s1, item A xuất hiện ba lần nhưng nếu tính độ hỗ trợ
thì độ hỗ trợ của item A chỉ được tính là 1 đối với chuỗi s1 đó. Chuỗi p = 〈(AB)(C)〉
là một chuỗi con của chuỗi s1, vì vậy chuỗi con p còn được gọi là mẫu. Trong

- 12 -
CSDL, chỉ có chuỗi s1, s2 và s5 có chứa mẫu p, vậy độ hỗ trợ của mẫu p là 3. Vì
sup(p) > minSup nên p là một mẫu tuần tự.

Bảng 2.1. CSDL chuỗi

SID Chuỗi dữ liệu

1 〈(AB)(B)(B)(AB)(B)(AC)〉

2 〈(AB)(BC)(BC)〉

3 〈(B)(AB)〉

4 〈(B)(B)(BC)〉

5 〈(AB)(AB)(AB)(A)(BC)〉

Khai thác mẫu tuần tự: Cho trước CSDL chuỗi và ngưỡng minSup. Khai
thác mẫu tuần tự là đi tìm tập đầy đủ tất cả các mẫu tuần tự có trong CSDL.
Tiền tố, hậu tố, tiền tố không hoàn toàn:

Cho hai chuỗi dữ liệu α = 〈a1 a2 … an〉 và β = 〈b1 b2 … bm〉 (m<n), (trong đó
ai, bi là các itemset). β được gọi là tiền tố của α nếu và chỉ nếu bi = ai với mọi
1≤i≤m. Sau khi loại bỏ phần tiền tố β trên chuỗi α, phần chuỗi còn lại được gọi là
hậu tố của α. Chuỗi β được gọi là tiền tố không hoàn toàn của chuỗi α nếu và chỉ
nếu bi = ai với mọi 1≤i≤m-1, bm ⊂ am và tất cả các item trong tập (am - bm) đều là
những item đứng sau các item trong bm xét theo thứ tự từ điển.
Từ định nghĩa trên, ta thấy rằng nếu một chuỗi có kích thước k sẽ có (k-1) tiền
tố. Ví dụ, chuỗi 〈(A)(BC)(D)〉 có 2 tiền tố là 〈(A)〉 và 〈(A)(BC)〉. Do đó, 〈(BC)(D)〉
là hậu tố đối với tiền tố 〈(A)〉 và 〈(D)〉 là hậu tố đối với tiền tố 〈(A)(BC)〉. Hai chuỗi
〈(A)(B)〉 và 〈(BC)〉 không phải là tiền tố của chuỗi đã cho; tuy nhiên chuỗi 〈(A)(B)〉
là một tiền tố không hoàn toàn.

- 13 -
2.3.2 Các khái niệm về luật tuần tự
Luật tuần tự: Luật tuần tự biểu diễn mối quan hệ giữa hai loạt sự kiện xảy ra
tuần tự, biểu thị dưới dạng X→Y (sup, conf), trong đó X là loạt sự kiện xảy ra
trước, Y là loạt sự kiện xảy ra sau, sup là giá trị độ hỗ trợ và conf là giá trị độ tin
cậy của luật [14].
Từ mẫu tuần tự đã có, luật tuần tự được xây dựng bằng cách tách mẫu tuần tự
ra làm hai phần: phần tiền tố X và phần hậu tố Y (nối tiền tố với hậu tố: X++Y, ta
được mẫu tuần tự như ban đầu). Độ hỗ trợ và độ tin cậy của luật được xác định như
sau:

• Độ hỗ trợ: sup = sup(X++Y) ×100%

• Độ tin cậy: conf = sup(X++Y)/sup(X)×100%


Độ hỗ trợ của một luật bằng số chuỗi trong CSDL có chứa mẫu tuần tự tạo nên
luật. Như vậy độ hỗ trợ của luật bằng độ hỗ trợ của mẫu tuần tự sinh ra luật. Độ tin
cậy của một luật r bằng với khả năng chuỗi trong CSDL có chứa tiền kiện của luật
dẫn đến chứa hậu kiện của luật. Một luật có độ hỗ trợ cao hơn minSup thì luật đó
được coi là phổ biến. Tương tự, nếu luật có độ tin cậy cao hơn ngưỡng tin cậy tối
thiểu (minimum confidence), kí hiệu là minConf, thì được coi là đáng tin cậy.
Với mỗi mẫu tuần tự kích thước k, có thể tạo ra (k-1) luật vì mẫu tuần tự kích
thước k sẽ có (k-1) tiền tố. Ví dụ, với mẫu tuần tự 〈(A)(BC)(D)〉 có kích thước là 3,
có thể tạo ra 2 luật là 〈(A)〉→〈(BC)(D)〉, 〈(A)(BC)〉→〈(D)〉.

2.3.3 Bài toán khai thác luật tuần tự


Khai thác luật tuần tự là đi tìm ra những luật thỏa mãn tối thiểu ngưỡng
minSup và minConf cho trước. Quá trình này gồm hai giai đoạn:

• Giai đoạn 1: Tìm tất cả các mẫu tuần tự từ CSDL, tức đi tìm tất cả các
mẫu f sao cho sup(f) ≥ minSup.

• Giai đoạn 2: Sinh luật tin cậy từ các mẫu tuần tự tìm được ở giai đoạn 1,
tức là tìm tất cả các luật r thỏa sup(r) ≥ minConf.

- 14 -
Ví dụ: Cho CSDL chuỗi D như bảng 2.1, độ hỗ trợ tối thiểu minSup= 50%, và
độ tin cậy tối thiểu minConf=70%. Nếu khai thác luật tuần tự từ CSDL này ta được
kết quả như sau:

• Tìm tập mẫu tuần tự gồm các mẫu có độ hỗ trợ ≥ minSup, tức support ≥
50%×5≈ 3. Tập mẫu tuần tự tìm được như bảng 2.2.

Bảng 2.2. Tập mẫu tuần tự

Kích thước Mẫu tuần tự: Độ hỗ trợ

〈(A)〉: 4, 〈(B)〉: 5, 〈(C)〉: 4


1
〈(AB)〉: 4, 〈(BC)〉: 3

〈(A)(B)〉: 3, 〈(A)(C)〉: 3, 〈(AB)(B)〉: 3, 〈(AB)(C)〉: 3


2 〈(B)(A)〉: 3, 〈(B)(B)〉: 5, 〈(B)(C)〉: 4,
〈(B)(AB)〉: 3, 〈(B)(BC)〉: 3

〈(A)(B)(B)〉: 3, 〈(A)(B)(C)〉: 3, 〈(B)(B)(B)〉: 4, 〈(B)(B)(C)〉: 4,


3
〈(AB)(B)(B)〉: 3, 〈(AB)(B)(C)〉: 3, 〈(B)(B)(BC)〉: 3

• Với tập mẫu tuần tự tìm được, ta có tập luật như bảng 2.3 (chỉ sinh luật
từ những mẫu có kích thước lớn hơn 1).

Bảng 2.3. Tập luật tuần tự sinh từ tập mẫu tuần tự

Mẫu tuần tự Luật tuần tự, Độ tin cậy


conf=sup(X++Y)/sup(X)×100% conf ≥ minConf?

〈(A)(B)〉: 3 〈(A)〉→〈(B)〉, 3/4×100% = 75% Có

〈(A)(C)〉: 3 〈(A)〉→〈(C)〉, 3/4×100% = 75% Có

〈(AB)(B)〉: 3 〈(AB)〉→〈(B)〉, 3/4×100% = 75% Có

〈(AB)(C)〉: 3 〈(AB)〉→〈(C)〉, 3/4×100% = 75% Có

〈(B)(A)〉: 3 〈(B)〉→〈(A)〉, 3/5×100% = 60% Không

- 15 -
〈(B)(B)〉: 5 〈(B)〉→〈(B)〉, 5/5×100% = 100% Có

〈(B)(C)〉: 4 〈(B)〉→〈(C)〉, 4/5×100% = 80% Có

〈(B)(AB)〉: 3 〈(B)〉→〈(AB)〉, 3/5×100% = 60% Không

〈(B)(BC)〉: 3 〈(B)〉 →〈(BC)〉, 3/5×100% = 60% Không

〈(A)(B)(B)〉: 3 〈(A)〉→〈(B)(B)〉, 3/4×100% = 75% Có


〈(A)(B)〉→〈(B)〉, 3/3×100% = 100% Có

〈(A)(B)(C)〉: 3 〈(A)〉→〈(B)(C)〉, 3/4×100% = 75% Có


〈(A)(B)〉→〈(C)〉, 3/3×100% = 100% Có

〈(B)(B)(B)〉: 4 〈(B)〉→〈(B)(B)〉, 4/5×100% = 80% Có


〈(B)(B)〉→〈(B)〉, 4/5×100% = 80% Có

〈(B)(B)(C)〉: 4 〈(B)〉→〈(B)(C)〉, 4/5×100% = 80% Có


〈(B)(B)〉→〈(C)〉, 4/5×100% = 80% Có

〈(AB)(B)(B)〉: 3 〈(AB)〉→〈(B)(B)〉, 3/4×100% = 75% Có


〈(AB)(B)〉→〈(B)〉, 3/3×100% = 100% Có

〈(AB)(B)(C)〉: 3 〈(AB)〉→〈(B)(C)〉, 3/4×100% = 75% Có


〈(AB)(B)〉→〈(C)〉, 3/3×100% = 100% Có

〈(B)(B)(BC)〉: 3 〈(B)〉→ 〈(B)(BC)〉: 3/5×100% = 60% Không


〈(B)(B)〉→ 〈(BC)〉: 3/5×100% = 60% Không

Vậy, với CSDL đã cho, có thể khai thác được 18 luật thỏa minSup và minConf.

2.4 Khai thác mẫu tuần tự

2.4.1 Các cách tổ chức dữ liệu


Có hai dạng tổ chức dữ liệu cơ bản:

• Dạng biểu diễn ngang: Dữ liệu được tổ chức theo chiều ngang, mỗi
hàng đại diện cho dãy sự kiện (event) tương ứng với đối tượng (object).

- 16 -
• Dạng biểu diễn dọc: Dữ liệu được tổ chức theo chiều dọc, mỗi hàng đại
diện cho dãy đối tượng tương ứng với sự kiện.
Ví dụ: Cho CSDL chuỗi:
Đối tượng Chuỗi sự kiện
1 A, B, C
2 A, D, E, F
3 B, E

CSDL trên có thể biểu diễn theo 2 cách sau:


Biểu diễn ngang Biểu diễn dọc
Đối tượng Sự kiện Sự kiện Đối tượng
1 A, B, C A 1, 2
2 A, D, E, F B 1, 3
3 B, E C 1
D 2
E 2, 3
F 2

Trong hai cách tổ chức dữ liệu theo chiều dọc và theo chiều ngang, thao tác
đếm độ hỗ trợ cho một sự kiện ở CSDL được tổ chức theo chiều dọc đơn giản và
nhanh hơn. Bởi vì theo cách tổ chức này, có thể lấy được ngay các đối tượng ứng
với sự kiện mà không phải duyệt toàn bộ CSDL. Hơn nữa, đối với CSDL lớn, việc
tổ chức theo chiều dọc mang tính cô đọng, giúp thực thi nhanh hơn và cho phép lặp
lại việc tìm các mẫu tuần tự một cách dễ dàng. Tuy nhiên, dữ liệu gốc ban đầu
thường được tổ chức theo chiều ngang, nếu muốn tổ chức theo chiều dọc phải có
bước tiền xử lý để chuyển đổi.

- 17 -
2.4.2 Các hướng tiếp cận
Bài toán khai thác mẫu tuần tự được đề xuất đầu tiên bởi Agrawal và Srikant
vào năm 1995. AprioriAll [3] là thuật toán đầu tiên được thiết kế để giải quyết bài
toán khai thác mẫu tuần tự trên CSDL chuỗi giao dịch. AprioriAll dựa trên thuật
toán khai thác mẫu phổ biến Apriori [1], là thuật toán nền tảng làm cơ sở cho các
thuật toán về sau.

• AprioriAll
Để tìm mẫu tuần tự, giải thuật AprioriAll [3] gồm 3 giai đoạn chính: Tìm
itemset phổ biến, biến đổi CSDL và tìm mẫu tuần tự trên dữ liệu đã biến đổi.
Ở giai đoạn 1, thuật toán tiến hành duyệt toàn bộ CSDL ban đầu để tìm các
itemset phổ biến. Sau đó, ánh xạ tập itemset phổ biến tìm được sang tập số nguyên.
Việc ánh xạ nhằm mục đích coi một itemset phổ biến là một thực thể riêng biệt và
thời gian so sánh hai itemset phổ biến bất kỳ đều như nhau. Hơn nữa, giúp giảm
thời gian kiểm tra một chuỗi có là chuỗi con của chuỗi dữ liệu trong CSDL ban đầu
không.
Giai đoạn 2, trong CSDL chuỗi ban đầu, mỗi chuỗi được thay thế bởi tập tất cả
các itemset phổ biến có chứa trong chuỗi đó. Nếu itemset không chứa itemset con
phổ biến nào thì loại bỏ itemset đó khỏi tập chuỗi dữ liệu. Nếu chuỗi dữ liệu không
chứa itemset phổ biến nào thì loại bỏ chuỗi đó khỏi CSDL. Sau khi biến đổi, mỗi
chuỗi sẽ được đại diện bởi một dãy các itemset phổ biến.
Giai đoạn 3, tìm mẫu tuần tự dựa trên kết quả từ giai đoạn tìm itemset phổ
biến, ta có được tập các mẫu tuần tự có kích thước là 1. Giải thuật dựa trên nguyên
tắc Apriori: mọi tập con của tập phổ biến phải là tập phổ biến, mọi tập cha của tập
không phổ biến đều không phổ biến. Tập ứng viên gồm các mẫu độ dài k được phát
sinh bằng cách kết các mẫu độ dài (k-1), sau đó dựa vào nguyên tắc Apriori và
minSup để loại bỏ các mẫu không phổ biến.
Như vậy, để tìm được mẫu tuần tự, giải thuật AprioriAll phải phát sinh các
ứng viên, nhưng số lượng ứng viên tạo ra rất lớn dễ dẫn đến tình trạng “nghẽn cổ

- 18 -
n

∑C
i
chai”. Với chuỗi độ dài n thì số ứng viên có thể tạo ra là n
= 2n −1, do đó không
i =1

đủ bộ nhớ để xử lý. Mặt khác, để tìm tất cả mẫu các mẫu tuần tự, thuật toán
AprioriAll phải duyệt CSDL nhiều lần vì với mỗi tập ứng viên để đếm độ hỗ trợ
phải duyệt toàn bộ CSDL.
Đối với bài toán khai thác mẫu tuần tự, các yếu tố ảnh hưởng đến tính hiệu
quả của thuật toán là cách thức tổ chức dữ liệu và thuật toán giải quyết. Do đó phải
sử dụng cấu trúc dữ liệu thích hợp và thuật toán tối ưu. Như vậy, các đặc trưng ảnh
hưởng đến tốc độ thực thi là cách tổ chức biễu diễn dữ liệu để lưu trữ vào bộ nhớ,
cách duyệt dữ liệu để xử lý, các chiến lược tìm kiếm. Ngoài ra, sử dụng một số đặc
trưng khác như vận dụng lý thuyết đồ thị, đưa ra những ràng buộc cho bài toán sẽ
giúp thuật toán thực thi nhanh hơn, các mẫu tuần tự tìm được có giá trị hơn. Chính
vì vậy, tiếp cận theo nhiều hướng khác nhau, xuất phát từ thuật toán nền tảng
AprioriAll, các nhóm nghiên cứu đã đưa ra nhiều thuật toán khác nhau để giải quyết
bài toán khai thác mẫu tuần tự.

• Thuật toán GSP


GSP [20] là thuật toán mở rộng từ mô hình Apriori. GSP giải quyết bài toán
khai thác mẫu tuần tự một cách tổng quát, đó là bổ sung thêm các ràng buộc: ràng
buộc về khoảng thời gian cực đại và cực tiểu giữa các thành phần trong một mẫu
tuần tự. Các item của một thành phần trong một mẫu có thể lấy từ một hoặc nhiều
thành phần khác nhau nhưng khoảng cách thời gian giữa các thành phần phải nằm
trong giới hạn “time window”. Ngoài ra, có sự phân cấp trên các item, một mẫu có
thể gồm những item trên các mức phân cấp khác nhau.

• Thuật toán PSP


Một thuật toán khác cũng dựa trên mô hình Apriori là PSP [12]. Điểm khác
biệt của PSP so với GSP là PSP quản lý và lưu trữ các mẫu ứng viên bằng một cấu
trúc dữ liệu hiệu quả hơn. Tuy nhiên, khi thực hiện cả ba phương pháp AprioriAll,
GSP, PSP đều phải duyệt CSDL nhiều lần và phải tải toàn bộ CSDL vào bộ nhớ

- 19 -
chính, do đó những phương pháp này chỉ thật sự hiệu quả khi bộ nhớ chính có thể
chứa hết toàn bộ CSDL.

• Thuật toán FreeSpan, PrefixSpan


Tiếp cận theo hướng chia nhỏ dữ liệu, FreeSpan [12] là thuật toán đầu tiên thực
hiện phép chiếu trên CSDL để giảm chi phí lưu trữ dữ liệu. Sau đó, thuật toán này
được phát triển thành PrefixSpan [18]. Xuất phát từ tập mẫu tuần tự độ dài 1,
PrefixSpan tạo ra CSDL được chiếu với mỗi mẫu đó. Trong CSDL chiếu, mỗi chuỗi
dữ liệu chỉ giữ lại phần hậu tố đối với tiền tố đã chiếu. Mẫu được phát triển bằng
những item phổ biến tìm được trong CSDL được chiếu. Quá trình này được lặp lại
cho đến khi CSDL chiếu không còn item phổ biến nào. Tuy nhiên, khi phát triển
mẫu, thuật toán FreeSpan và PrefixSpan đều phải thực hiện chiếu CSDL và duyệt
CSDL chiếu để tìm item phổ biến.
Tất cả các phương pháp trên đều tiếp cận theo hướng biểu diễn thông tin dữ liệu
theo chiều ngang. Để xác định độ hỗ trợ của một mẫu cần phải duyệt lại toàn bộ
CSDL. Để khắc phục điều này, một số hướng nghiên cứu mới tiến hành tổ chức dữ
liệu theo chiều dọc, đi đầu là SPADE [23], sau đó có SPAM [4], và PRISM [9] là
những thuật toán khá hiệu quả. Thay vì phải duyệt toàn bộ CSDL chuỗi, với mỗi
mẫu ứng viên, chúng thực hiện lưu trữ thông tin cho biết mẫu đó có mặt trong
những chuỗi dữ liệu nào, từ đó tính nhanh độ hỗ trợ. Mặt khác, mẫu mới được tạo ra
lấy thông tin dựa trên những mẫu đã có và không cần phải duyệt lại CSDL.

• Thuật toán SPADE


Thuật toán SPADE [23] tổ chức dữ liệu theo chiều dọc, trong đó ứng với mỗi
item sẽ lưu danh sách định danh của các chuỗi dữ liệu và định danh của các itemset
có chứa item đó. Độ hỗ trợ của item được tính trực tiếp từ danh sách các định danh.
Mặt khác, SPADE còn dựa trên lý thuyết dàn để chia nhỏ không gian tìm kiếm và
thao tác kết đơn giản để tạo ra tập ứng viên. Thuật toán này gom nhóm các mẫu
tuần tự dựa theo tiền tố thành các lớp tương đương. Thuật toán chỉ duyệt CSDL
đúng ba lần: lần duyệt thứ nhất và thứ hai thực hiện tìm các mẫu tuần tự có độ dài 1

- 20 -
và 2. Ở lần duyệt thứ ba, thuật toán phát triển mẫu độ dài k từ hai mẫu độ dài (k-1)
có (k-2) item đầu giống nhau, tiến hành duyệt trên từng lớp tương đương do đó
giảm chi phí tính toán và sử dụng bộ nhớ hiệu quả hơn. Với ngưỡng minSup thấp,
so với thuật toán GSP, thuật toán SPADE thực hiện nhanh gấp đôi [23].

• Thuật toán SPAM


Thuật toán SPAM [4] cũng tổ chức dữ liệu theo chiều dọc như thuật toán
SPADE. Thông tin của các mẫu ứng viên được biểu diễn dưới dạng bảng bit dọc,
mỗi bit ứng với một itemset của một chuỗi trong CSDL. Nếu item có mặt trong
itemset j thì bit tương ứng itemset j được đánh dấu là 1, ngược lại là 0. Độ hỗ trợ
của mẫu được xác định dựa trên bảng bit. Về tốc độ thực thi, trên các CSDL nhỏ,
SPAM thực hiện nhanh hơn 2.5 lần so với SPADE, nhưng chưa thực hiện tốt bằng
PrefixSpan [18]. Với CSDL lớn, SPAM thực hiện tốt hơn nhiều so với SPADE và
PrefixSpan vì tổ chức biểu diễn và lưu trữ dữ liệu dưới dạng bit nên thao tác phát
sinh ứng viên và đếm độ hỗ trợ rất hiệu quả [18].

• Thuật toán PRISM


Thuật toán PRISM [9] là thuật toán mới nhất hiện nay, tiếp cận theo hướng hoàn
toàn khác biệt đó là sử dụng phương pháp mã hóa nguyên tố để biểu diễn thông tin
của mẫu ứng viên. Thuật toán sử dụng cấu trúc dữ liệu cây từ điển để lưu trữ các
mẫu tuần tự tìm được. Thuật toán chỉ duyệt CSDL đúng một lần để tìm tập mẫu
tuần tự độ dài 1 cùng với khối mã hóa thông tin tương ứng cho các mẫu đó. Sau đó,
phát triển mẫu bằng cách thêm vào mẫu một item phổ biến. Thông tin của mẫu mới
được xác đinh dựa trên khối mã hóa của mẫu cũ và của item thêm vào. Như vậy,
thuật toán PRISM không phải duyệt CSDL nhiều lần. Đồng thời, thuật toán giảm
chi phí tính toán bằng cách sử dụng bảng tra cho khối mã hóa thông tin dựa trên lý
thuyết mã hóa nguyên tố.
Trong đề tài này, luận văn sử dụng thuật toán PRISM để khai thác tập mẫu tuần
tự vì PRISM là thuật toán hiệu quả nhất trong số các thuật toán đã có. Mặt khác, sử
dụng thuật toán này, tập mẫu tuần tự tìm thấy sẽ được tổ chức và lưu trữ dưới dạng

- 21 -
cấu trúc cây từ điển, là tiền đề cho phương pháp khai thác luật tuần tự dựa trên cây
tiền tố mà luận văn đề xuất.

2.4.3 Thuật toán PRISM


Thuật toán PRISM (Prime-Encoding Based Sequence Mining) [9] được đề
xuất bởi Karam Gouda, Mosab Hasaan, và Zaki vào năm 2010.
PRISM sử dụng cách tiếp cận dọc để tìm liệt kê và đếm độ hỗ trợ. Khác với
các thuật toán trước đây, PRISM dựa trên khái niệm mới đó là khái niệm mã hóa
khối nguyên tố, mà nền tảng là lý thuyết phân tích thừa số.

2.4.3.1 Một số khái niệm


Mọi số nguyên dương (>1) đều có thể biểu diễn dưới dạng tích các số nguyên
tố. Gọi p1, p2, …, pr là các thừa số nguyên tố phân biệt của n, được sắp theo thứ tự

p1< p2< …< pr. Các thừa số lặp lại có thể biểu thị dưới dạng số mũ, n = p1 p2 ... pr
m1 m 2 mr

trong đó mi là số nguyên dương được gọi là lũy thừa của pi . Cách thừa số hóa n
được gọi là dạng chuẩn của n. Ví dụ: n = 31752 =23. 34. 72.
mia
Cho hai số nguyên a, b được biểu diễn dưới dạng chuẩn a = ∏i =1 pi
ra

a

b = ∏i =1 pi . Ước chung lớn nhất của hai số a và b kí hiệu ucln(a, b) = ∏i pi i ,


rb mib
m
b

trong đó pi là thừa số chung của cả a và b tức pi = pja = pkb và mi = min(mja, mkb). Kí


hiệu bcnn(a,b) là bội chung nhỏ nhất của hai số a, b.
Ví dụ: a = 7056 = 24. 32. 72 và b = 18900 = 22. 33. 52. 7 thì ucln(a,b) = 22.32.7
= 252.
Với mục đích của thuật toán mã hóa nguyên tố cho dữ liệu chuỗi, ta chỉ quan
tâm đến số nguyên không chính phương [9]. Số nguyên không chính phương n là số
mà tất cả các thừa số nguyên tố pi của nó đều có số mũ mi = 1.
Cho tập hợp G gồm n phần tử có thứ tự, lấy P(G) là tập tất cả tập con của tập
G. Xét tập S ∈ P(G), S có thể biểu diễn dưới dạng vector nhị phân gồm n bit, trong
đó bit thứ i có giá trị 1 nếu phần tử thứ i của G có trong S và ngược lại, bit thứ i có

- 22 -
giá trị 0. Kí hiệu vector bit của S là SB. Ví dụ: Nếu G = {2, 3, 5, 7} và S = {2, 5} thì
SB = 1010.
Tập sinh nguyên tố [9]

Xét tập S gồm n phần tử, S∈P(G). Tích các phần tử của S kí hiệu
⊗S=s1.s2…sn. Nếu S = ∅, ta quy ước ⊗S = 1. Khi đó, ⊗P(G) = {⊗S: S∈P(G)} là
tập có được khi áp dụng phép toán tích ⊗ vào tất cả các tập S có trong P(G). Ta gọi
G là tập sinh của ⊗P(G) theo phép toán ⊗. Ta gọi G là tập sinh không chính
phương nếu mọi phần tử X ∈ ⊗P(G) đều là số nguyên không chính phương. Nếu
tập G chỉ gồm các số nguyên tố thì G được gọi là tập sinh nguyên tố.

Ta có tập (P, ⊗) là nửa nhóm; (P, ⊗) là nửa nhóm không chính phương nếu và
chỉ nếu với mọi phần tử X, Y ∈ P, nếu Z = X ⊗ Y là số nguyên không chính phương
thì Z∈P.

Định lý 1 [9]: Tập (P, ⊗) là nửa nhóm không chính phương khi và chỉ khi nó
có tập sinh G là tập nguyên tố không chính phương. Nói cách khác, P là nửa nhóm
không chính phương khi và chỉ khi P = ⊗P(G).
Theo lý thuyết toán học, từ nửa nhóm, ta có thể xây dựng được một dàn. Do
đó, P(G) tạo ra một dàn với phép toán ⊗. Trong dàn, chặn trên chung được xác định
là giao các thành phần của P(G) tức là ước chung lớn nhất tương ứng của các thành
phần của P(G); và chặn dưới chung là hội tương ứng là bội chung nhỏ nhất. Ví dụ,
lấy tập G gồm 4 số nguyên tố G = {2, 3, 5, 7}.
Khi đó, P(G) = {{}, {2}, {3}, {5}, {7}, {2, 3}, {2, 5}, {2, 7}, {3, 5}, {3, 7},
{5, 7}, {2, 3, 5}, {2, 3, 7}, {2, 5, 7}, {3, 5, 7}, {2, 3, 5, 7}}. Và ⊗P(G) = {1, 2, 3, 5,
7, 6, 10, 14, 15, 21, 35, 30, 42, 70, 105, 210}. Ta thấy, G là tập sinh nguyên tố
không chính phương của P(G), do đó ⊗P(G) là nửa nhóm không chính phương. Ví
dụ, dàn xây dựng trên tập ⊗P(G), mỗi nút biểu thị tập S ∈ P(G) dưới dạng vector
nhị phân và giá trị khi nhân các phần tử của S (⊗S) thể hiện trong hình 2.1 [9].

- 23 -
0000 (1)

1000 (2) 0100 (3) 0010 (5) 0001 (7)

1100 (6) 1010 (10) 1001 (14) 0110 (15) 0101 (21) 0011 (35)

1110 (30) 1101 (42) 1011 (70) 0111 (105)

1111 (210)

Hình 2.1. Dàn xây dựng trên tập ⊗P(G)


Định lý 2 [9]: Cho P(G) là một nửa nhóm không chính phương với tập sinh
nguyên tố G, lấy hai phần tử phân biệt X, Y ∈ ⊗P(G) thì ucln(X, Y) = ⊗(SX ∩ SY),
và bcnn(X, Y) = ⊗(SX ∪ SY), trong đó X = ⊗SX và Y = ⊗SY với SX, SY ∈ P(G) là các
thừa số nguyên tố của X và Y.

Định nghĩa số lượng thừa số của một số nguyên tố X ∈ ⊗P(G) là số lượng số


nguyên tố có trong tập G mà tích của chúng bằng X. Ví dụ, 21 G = {3, 7} = 2 .

Hệ quả [9]: Cho ⊗P(G) là nửa nhóm không chính phương với tập sinh
nguyên tố G, với hai phần tử phân biệt X, Y ∈ ⊗P(G) thì ucln(X,Y) ∈ ⊗P(G).

2.4.3.2 Lý thuyết về khối mã hóa nguyên tố


Cho tập G gồm các số nguyên tố được sắp theo thứ tự tăng dần và vector nhị

phân B có độ dài n. Khi đó, B có thể phân hoạch thành m = N khối liên tiếp, trong
G

- 24 -
đó khối thứ i là Bi = B ⎡⎣ (i − 1) * G + 1: i * G ⎤⎦ ,1 ≤ i ≤ m . Mỗi khối Bi đại diện cho

một tập con S ⊆ G .

Lấy Bi [ j] là bit thứ j trong khối Bi và G[j] là số nguyên tố thứ j tương ứng

trong G, ta định nghĩa giá trị của Bi đối với tập G như sau v ( Bi , G ) = ⊗ G [ j ] { Bi[ j ]
}.
Ví dụ, cho Bi = 1001và G ={2, 3, 5, 7} thì v( Bi , G ) = 21.30.50.71 = 2.7 = 14 . Nếu
Bi = 0000 thì v( Bi , G ) = 1 .

Mã hóa nguyên tố theo khối của vector nhị phân B đối với tập nguyên tố cơ sở
G được định nghĩa là v( B, G ) = {v( Bi , G ) :1 ≤ i ≤ m} . Có thể viết tắt v( Bi , G ) là v( Bi )

và v ( B , G ) là v ( B ) . Như vậy, vector nhị phân được chia ra thành các khối, mỗi khối

có độ dài G và tiến hành mã hóa từng khối dựa vào tập nguyên tố cơ sở G.

Ví dụ: Cho G ={2, 3, 5, 7} và B = 100111100100 có độ dài 12. Có thể chia B


thành 12/4 = 3 khối B1 = 1001, B2 = 1110, B3 =0100. Với v( B1 ) = ⊗{2, 7} = 14

v( B1 ) = ⊗{ 2, 7} = 14 , v( B2 ) = { 2, 3, 5} = 30 và v( B3 ) = ⊗{ 3} = 3 . Do đó, khối nguyên

tố mã hóa của B đối với tập sinh G là v ( B ) = { 14, 30, 3} . Ta cũng định nghĩa thao

tác đảo ngược như sau v−1 ({14, 30, 3}) = v−1 (14)v−1 (30)v−1 (3) = 100111100100 = B . Đặc

biệt, một khối bit toàn 0 thì mã hóa tương ứng của nó là 1.
Xét hai dãy nhị phân A và B có khối nguyên tố mã hóa tương ứng là v(A) và
v(B), ta định nghĩa ucln(v(A),v(B)) = {ucln(v(Ai),v(Bi)): 1 ≤ i ≤ m}. Ví dụ cho v(A) =
{2, 210, 2}, v(B) = {14, 30, 5} thì ucln(v(A), v(B)) = {ucln(2, 14), ucln(210, 30),
ucln(2, 5)} = {2, 30, 1}.

Cho vector nhị phân A =A1A2…Am với Ai là một dãy gồm G bit. Gọi fA là vị trí
>
đầu tiên trong A có bit là 1, định nghĩa phép toán lấy mặt nạ (A) như sau:

⎧ 0, j ≤ f A
( A) > [j ] = ⎨
⎩1, j > f A

- 25 -
>
Tức là, (A) là vector bit thu được bằng cách đổi bit 1 đầu tiên tìm được trong
A thành 0 và các bit từ sau vị trí đó được gán là 1. Ví dụ, nếu A = 001001100100 thì
fA = 3 và (A)> = 000111111111. Tương tự, chúng ta cũng có thể định nghĩa phép
toán lấy mặt nạ cho khối nguyên tố mã hóa như sau (v( A))> = v(( A)> ) . Ví dụ,
v(( A)> ) = v((001001100100)> ) = v(000111111111) = v(0001)v(1111)v(1111) = {7, 210, 210}
mà (v( A))> = (v(001001100100))> = ({v(0010)v(0110)v(0100)})> = ({5, 15, 3})> . Do đó,
theo định nghĩa trên ta có ({5, 15, 3})> = (7, 210, 210) .

Xét tập các item I = {i1, i2, …, in} của CSDL chuỗi, mỗi item có thể xuất hiện
ở các chuỗi dữ liệu khác nhau và xuất hiện ở các vị trí khác nhau trong chuỗi. Vì
vậy, với mỗi item ij, ta tiến hành mã hóa theo định danh của các chuỗi dữ liệu và mã
hóa theo vị trí xuất hiện của item trong chuỗi dữ liệu.
Kí hiệu P(SX, PX) là mã hóa nguyên tố của item X, trong đó SX là mã hóa theo
định danh chuỗi dữ liệu chứa X và PX là mã hóa theo vị trí xuất hiện X trong chuỗi
dữ liệu.

• Khối mã hóa theo chuỗi


Mã hóa theo định danh của các chuỗi dữ liệu (tìm SX). Xây dựng mã hóa
nguyên tố theo khối đối với định danh của các chuỗi dữ liệu. Thực hiện 2 bước như
sau:
Bước 1: Xây dựng vector nhị phân biểu diễn sự có mặt của item trong các
chuỗi dữ liệu. Độ dài vector nhị phân bằng số lượng chuỗi có trong CSDL. Nếu
chuỗi thứ i có chứa item X thì bit thứ i tương ứng là 1 ngược lại là 0. Sau đó, bổ
sung thêm các bit 0 vào vector nhị phân để có độ dài là bội của G .

Bước 2: Mã hóa vector nhị phân thành khối nguyên tố dựa vào tập nguyên tố
cơ sở G. Ví dụ, trong hình 2.2.(a) gồm 5 chuỗi, trong đó I = {A, B, C}, cho G = {2,
3, 5, 7} là tập phát sinh nguyên tố không chính phương cơ sở. Để phát sinh khối mã
hóa nguyên tố cho item A, đầu tiên ta xây dựng mã hóa nguyên tố theo định danh
của các chuỗi trong CSDL đối với sự có mặt của item A. Vì item A xuất hiện ở tất

- 26 -
cả các chuỗi ngoại trừ chuỗi 4, nên có thể biểu diễn sự xuất hiện của item A trên
toàn bộ cơ sơ dữ liệu dưới dạng vec-tơ nhị phân, sau khi đệm thêm 3 bit bên phải, A
= 11101000, sinh ra mã hóa nguyên tố trong hình 2.2.(c) là v(A) = ν(1110)ν(1000) =
{30, 2}.

Hình 2.2. Ví dụ về khối mã hóa nguyên tố.


(a) Cho CSDL chuỗi, (b) Khối mã hóa vị trí của item A, (c) Khối mã hóa chuỗi của
các item, (d) Các khối mã hóa đầy đủ, (e) Các khối mã hóa sau khi thu gọn.

• Khối mã hóa theo vị trí


Mã hóa theo vị trí xuất hiện của item trong mỗi chuỗi (tìm PX). Xây dựng mã
hóa nguyên tố theo khối cho các vị trí xuất hiện của item trong mỗi chuỗi. Vị trí
xuất hiện của item được xác định theo chỉ số của itemset chứa item đó, trong mỗi
chuỗi chỉ số của itemset được đếm từ 1. Ví dụ, vị trí xuất hiện của item A trong

- 27 -
chuỗi 〈(AB)(B)(B)(AB)(B)(AC)〉 lần lượt là 1, 4, 6. Xây dựng mã hóa nguyên tố
cho các vị trí xuất hiện của item X trong chuỗi s như sau:
Bước 1: Xây dựng vector nhị phân biểu diễn vị trí xuất hiện của item X trong
chuỗi dữ liệu s. Độ dài của vector nhị phân bằng độ dài của chuỗi, nếu itemset thứ i
trong chuỗi có chứa item X thì bit thứ i tương ứng là 1, ngược lại là 0. Sau đó, bổ
sung thêm các bit 0 vào vector nhị phân để được dãy bit có độ dài là bội của G . Ví

dụ, trong chuỗi thứ nhất, item A xuất hiện ở các vị trí 1, 4 và 6 nên mã hóa nhị phân
của item a là 100101. Vì |G| = 4 = 22 nên mã nhị phân này được thêm vào 02 bit
đệm thành 10010100. Tiếp đến tính v(1001)v(0100) = {14, 3}. Hình 2.2.(b) mô tả
tất cả các khối mã hóa vị trí của item A. Tương tự, xác định khối mã hóa vị trí cho
các item B và C (hình 2.2.(d)).
Bước 2: Mã hóa vector nhị phân thành khối nguyên tố dựa vào tập nguyên tố
cơ sở G. Ví dụ, mã hóa nguyên tố cho 10010100 là {2, 7, 3} = {14, 3}. Hình 2.2.(d)
là tất cả các mã hóa nguyên tố đầy đủ, gồm cả khối mã hóa chuỗi và khối mã hóa vị
trí. Các khối Ai = 0000 = 0, với v(Ai) = v(0000) = {1} = 1, còn được gọi là khối mã
hóa rỗng. Các khối mã hóa rỗng sẽ bị lược bỏ trong quá trình nén khối mã hóa
nguyên tố để giảm kích thước khối mã hóa.

• Nén khối mã hóa nguyên tố


Mã hóa nguyên tố đầy đủ của một mẫu tuần tự bao gồm khối mã hóa vị trí và
khối mã hóa chuỗi. Tuy nhiên, một mẫu tuần tự chỉ có mặt ở một số chuỗi dữ liệu
và trong mỗi chuỗi chỉ có mặt ở một số vị trí. Do đó, khi biểu diễn bằng dãy bit, có
nhiều khối bit toàn 0 (khối rỗng) tức giá trị mã hóa cho khối là 1. Để hạn chế những
khối rỗng này, PRISM chỉ giữ lại những khối không rỗng trong dãy khối mã hóa
nguyên tố, bằng cách sử dụng một bảng chỉ số. Tương ứng với mỗi khối mã hóa
chuỗi, có một chỉ số cho biết các khối vị trí nào là khác rỗng tương ứng với khối
chuỗi đã cho bắt đầu từ vị trí nào trong dãy khối mã hóa vị trí.
Hình 2.2.(e) biểu diễn dạng thu gọn khối mã hóa nguyên tố của item A. Khối
chuỗi đầu tiên là 30, với số lượng thừa số là ||30||G = 3, nghĩa là có 3 chuỗi (khác

- 28 -
rỗng) trong khối này có chứa item A. Với mỗi chuỗi, sẽ có chỉ số cho biết vị trí bắt
đầu của khối mã hóa theo vị trí tương ứng với chuỗi đó.
Ví dụ, chuỗi 1 có khối vị trí lấy từ chỉ số là 1, chuỗi 2 có khối vị trí lấy từ chỉ
số là 3, chuỗi 3 có chỉ số là 4. Lưu ý chuỗi được biễu diễn bởi khối chuỗi 30 có thể
tìm trực tiếp từ vec-tơ nhị phân v-1(30) = 1110, cho thấy chuỗi 4 không hợp lệ (khối
chuỗi rỗng). Khối chuỗi thứ hai của item A tương ứng v-1(2) = 1000 cho thấy chỉ
chuỗi 5 là hợp lệ và vị trí khối bắt đầu từ vị trí 5. Khối mã hóa nguyên tố của item C
cho thấy hiệu quả việc nén cho các item rời rạc. Mã hóa đầy đủ trong hình 2.2.(d)
chứa nhiều thông tin dư thừa có thể thu gọn như trong hình 2.2.(e).

• Tính độ hỗ trợ của chuỗi dựa trên khối mã hóa nguyên tố


Xét mẫu s, kí hiệu P(Ss, Ps) là mã hóa nguyên tố của chuỗi s, trong đó Ss là mã
hóa theo định danh chuỗi dữ liệu chứa s và Ps là mã hóa theo vị trí xuất hiện s trong
chuỗi dữ liệu. Độ hỗ trợ của mẫu s được tính trực tiếp từ khối mã hóa nguyên tố Ss
theo công thức sup( s) = ∑ vi∈Ss vi G
. Ví dụ với s = 〈(A)〉 và v(A) = {30, 2}, ta có

sup(s) = ||30||G + ||2||G = 3 + 1 = 4.

2.4.3.3 Thuật toán PRISM


Thuật toán PRISM [9] sử dụng phương pháp mã hóa khối nguyên tố để biểu
diễn thông tin của mẫu ứng viên. Mẫu mới được sinh ra bằng cách mở rộng mẫu đã
có và mã hóa nguyên tố của mẫu mới được xác định bằng cách tính toán trên khối
nguyên tố của các mẫu được mở rộng; độ hỗ trợ của mẫu ứng viên được xác định
trực tiếp từ khối mã hóa nguyên tố.

• Không gian tìm kiếm


Xét tập các chuỗi dữ liệu, quan hệ chuỗi con giữa các chuỗi là quan hệ thứ tự
được biểu diễn trên cấu trúc cây từ điển, được định nghĩa đệ quy như sau: nút gốc ở
mức 0 của cây chứa chuỗi rỗng được gán nhãn ∅. Các nút ở mức k của cây sẽ được
gán nhãn là các chuỗi có kích thước k. Nút con ở mức (k+1) được tạo bằng cách mở
rộng chuỗi ở mức k để được chuỗi độ dài (k+1). Có hai cách mở rộng chuỗi nhờ

- 29 -
thêm vào một item phổ biến đó là mở rộng theo chuỗi và mở rộng theo itemset. Mở
rộng theo chuỗi tức là item thêm vào với tư cách là một itemset mới, còn mở rộng
theo itemset tức là item được thêm vào itemset cuối trong chuỗi. Ví dụ, xét mẫu s =
〈(A)(A)〉, nếu thêm một item B vào mẫu s thì 〈(A)(A)(B)〉 là mở rộng theo chuỗi và
〈(A)(AB)〉 là mở rộng theo itemset (hình 2.3).

{}

〈(A)〉 〈(B)〉 〈(C)〉


1-sequence

〈(A)(A)〉 〈(A)(B)〉 〈(AB)〉 〈(A)(C)〉 〈(AC)〉 〈(B)(A)〉 〈(B)(C)〉 〈(BC)〉


〈(B)(B)〉 2-sequence

〈(A)(A)(A)〉 〈(A)(B)(A)〉 〈(AB)(A)〉

〈(A)(A)(B)〉 〈(A)(B)(B)〉 〈(AB)(B)〉

〈(A)(AB)〉 〈(A)(B)(C)〉 〈(AB)(C)〉 3-sequence

〈(A)(A)(C)〉 〈(A)(BC)〉 〈(ABC)〉

〈(A)(AC)〉
… k-sequence
Mở rộng theo Itemset
Mở rộng theo chuỗi

Hình 2.3. Không gian khai thác mẫu tuần tự, bao gồm mở rộng theo itemset và mở
rộng theo chuỗi với chiến lược tìm kiếm theo chiều sâu

• Cách phát triển mẫu và đếm độ hỗ trợ


Giả sử ở bước khởi tạo, chúng ta đã tính được mã hóa nguyên tố của mỗi item
trong tập item của CSDL.
Tiến trình tìm và liệt kê các mẫu tuần tự bắt đầu từ nút gốc của cây tìm kiếm.
Các nút con ở mức 1 được gán nhãn là các mẫu chỉ gồm một item đơn. Thuật toán

- 30 -
PRISM thực hiện phát triển mẫu tuần tự như sau: với mỗi nút trên cây tìm kiếm, mở
rộng mẫu tại nút đó bằng cách thêm vào một item để tạo ra mẫu mới; đồng thời, xác
định khối nguyên tố mã hóa của mẫu mới tạo dựa vào khối nguyên tố mã hóa của
mẫu dùng để mở rộng và của item thêm vào. Các nút của cây được duyệt theo chiều
sâu, với nút S bất kỳ ta xử lý tất cả các mẫu con mở rộng của nó trước khi thực hiện
đệ quy với nút cùng mức với nút S trên cây. Thuật toán dừng khi không mở rộng
mẫu được nữa (mở rộng không sinh ra mẫu mới).

− Cách xác định mã hóa nguyên tố cho mẫu mở rộng theo itemset:

Xét mẫu 〈(A)〉 có mã hóa nguyên tố là P(S〈(A)〉, P〈(A)〉) và item B có mã hóa


nguyên tố là P(SB, PB). Mở rộng mẫu 〈(A)〉 theo itemset ta được mẫu mới là 〈(AB)〉.
Trước hết, ta kiểm tra mẫu 〈(A)〉 và item B cùng có mặt trong những chuỗi dữ liệu
nào của CSDL.

Khối mã hóa cho biết những chuỗi dữ liệu nào có chứa 〈(A)〉 và B được tính
theo ước chung lớn nhất của từng cặp phần tử trong hai khối S〈(A)〉 và SB. Từ khối
mã hóa, ta có thể tìm được vector nhị phân tương ứng cho biết mẫu 〈(A)〉 và item B
cùng có mặt trong những chuỗi dữ liệu nào. Ví dụ, ở hình 2.4.(a), chuỗi 〈(A)〉 có
S〈(A)〉 = {30,2} và item b có SB = {210, 2} thì ucln(S〈(A)〉, SB) = {ucln(30, 210),
ucln(2, 2)} = {30, 2}. Suy ra v −1 (30, 2) = 11101000 . Như vậy mẫu 〈(A)〉 và item B
cùng có mặt trong các chuỗi dữ liệu 1, 2, 3 và 5.

Với mỗi chuỗi dữ liệu mà 〈(A)〉 và B có mặt, kiểm tra chúng có xuất hiện cùng
nhau tại một vị trí không, nếu có thì chuỗi dữ liệu đó chứa mẫu 〈(AB)〉. Từ đó, xác
định được S〈(AB)〉 và tính được độ hỗ trợ của mẫu 〈(A)〉.

Ví dụ, xét chuỗi dữ liệu 1, P1A ={14, 3} và P1B ={210, 2} thì ucln(P1〈(A)〉, P1B)
= {ucln(14, 210), ucln(3, 2)} = {14, 1}; như vậy A, và B xuất hiện cùng nhau tại vị
trí 1 và 4 trong chuỗi dữ liệu 1. Vậy ta có mẫu 〈(AB)〉 có độ hỗ trợ là:
sup( ( AB) ) = 14 G = 2 .

− Cách xác định mã hóa nguyên tố cho mẫu mở rộng theo chuỗi:

- 31 -
Mở rộng mẫu 〈(A)〉 theo chuỗi với item B ta được mẫu mới là 〈(A)(B)〉. Tương
tự như mở rộng theo itemset, ta cũng tìm các chuỗi dữ liệu mà có chứa đồng thời
mẫu 〈(A)〉 và item B.
Với mỗi chuỗi dữ liệu tìm được, kiểm tra B có xuất hiện ở vị trí sau A không,
nếu có thì chuỗi dữ liệu đó chứa 〈(A)(B)〉. Từ đó xác định được S〈(A)(B)〉 và tính được
support(〈(A)(B)〉).

Hình 2.4. Mã hóa nguyên tố cho mẫu mở rộng.


(a) Mở rộng theo itemset, (b) Mở rộng theo chuỗi

Ví dụ, ở hình 2.4.(b) xét chuỗi dữ liệu 1, P1〈(A)〉 ={14, 3} và P1B ={210, 2} thì
ucln (( P1( A ) )> , PB1 ) = ucln ({14, 3}> , {210, 2}) = ucln ({105, 210}, {210, 2}) =.

- 32 -
= {ucln(105, 210), ucln(210, 2)} = {105, 2} Mà v −1 (105, 2) = 01111000 nên tại các vị trí

2, 3, 4, 5 trong chuỗi 1, B xuất hiện sau A. Do đó chuỗi 1 có chứa mẫu 〈(A)(B)〉.

• Tối ưu hóa thuật toán


Trong thuật toán PRISM, các phép xử lý chính bao gồm: tính ước chung lớn
nhất của các cặp giá trị tương ứng của các khối mã hóa, xác định độ hỗ trợ của mẫu
mới phát triển, và phép toán lấy mặt nạ cho khối mã hóa vị trí khi mở rộng mẫu
theo chuỗi. Để tối ưu, thay vì phải tính toán tại mỗi bước xử lý, thuật toán PRISM
sử dụng các bảng tra để xác định nhanh. Cách xây dựng các bảng tra như sau [9].
- Bảng tra giá trị ước chung lớn nhất của hai khối mã hóa
Ở các ví dụ trước, để đơn giản, thuật toán minh họa trên tập sinh nguyên tố cơ
sở G có 4 phần tử. Trong cài đặt thực nghiệm, các tác giả sử dụng tập sinh nguyên
tố cơ sở có 8 giá trị G = {2, 3, 5, 7, 11, 13, 17, 19}. Vì vậy kích thước của mỗi khối
là 8 thay vì là 4 như ví dụ. Lưu ý rằng, với tập G mới này, phần tử lớn nhất trong
tập ⊗P(G) có giá trị bằng ⊗G = 9699690. Số lượng phần tử của tập ⊗P(G) là 28 =
256 phần tử.
Như vậy, nếu cài đặt đơn giản, bảng tra UCLN có thể lưu trữ bằng một mảng
hai chiều với số phần tử là 9699690 × 9699690, trong đó ucln(i, j) = UCLN(i, j) với
hai số nguyên tùy ý i, j ∈ [1, 9699690]. Rõ ràng, cách làm này không hiệu quả bởi
vì thật sự chỉ có 256 giá trị tích (số nguyên không chính phương) phân biệt thuộc
tập ⊗P(G) cần dùng đến, cho nên chỉ cần sử dụng một mảng hai chiều có kích
thước 256×256 để lưu các giá trị nguyên tố. Để làm được như vậy, chúng ta biểu
diễn mỗi phần tử trong tập ⊗P(G) bởi hạng của nó (ký hiệu là rank).

Lấy S ∈ P(G) và SB là vector bit có độ dài |G| tương ứng với S, trong đó bit
thứ i nhận giá trị 1 nếu phần tử thứ i trong G là có mặt trong S. Khi đó, hạng của S
được lấy bằng giá trị thập phân (decimal) của vector bit (được tính theo thứ tự
ngược lại, tức bit trái nhất là bit được tính theo số mũ nhỏ nhất). Nói cách khác,
rank(⊗S) = decimal(SB). Ví dụ, rank(1) = decimal(00000000) = 0, rank(13) =

- 33 -
decimal(00000100) = 32, rank(35) = decimal(00110000) = 12, và rank(9699690) =
decimal(11111111) = 255.

Nếu lấy S, T ∈ P(G) và lấy SB, TB tương ứng là vector bit của chúng, thì
rank(ucln(⊗S, ⊗T)) = decimal(SB∧TB). Xét ví dụ sau, ucln(35, 6) = 1, ta có
rank(ucln(35, 6) = decimal(00110000 ∧ 11000000) = decimal(00000000) = 0, cũng
bằng với rank(ucln(35, 6)) = rank(1) = 0. Thay vì sử dụng giá trị trực tiếp, tất cả các
phép tính ước chung lớn nhất được biểu diễn dưới dạng hạng của giá trị ước chung
lớn nhất tương ứng. Vì vậy, mỗi ô trong bảng UCLN sẽ lưu trữ: UCLN(rank(i),
rank(j)) = rank(ucln(i, j)), với i, j ∈⊗P(G). Do đó, kích thước cần thiết để lưu trữ
bảng GCD chỉ là 256×256 = 65536, vì mỗi rank chỉ yêu cầu 1 byte để lưu trữ (do
rank ∈ [0: 255]).
- Bảng tra độ hỗ trợ của một mẫu khi biết giá trị khối mã hóa theo chuỗi
Độ hỗ trợ của mẫu tuần tự được xác định dựa trên khối mã hóa theo chuỗi của
mẫu, độ hỗ trợ bằng tổng số lượng thừa số của các khối nguyên tố mã hóa theo
chuỗi. Do vậy, để tính nhanh độ hỗ trợ mà không phải tính toán từ khối mã hóa
chuỗi, PRISM sử dụng bảng tra là một mảng một chiều gọi là CARD để lưu trữ số
lượng thừa số của mỗi phần tử trong tập ⊗P(G). Tức là CARD(rank(x)) = ԡ‫ ݔ‬ԡீ với
∀x ∈ ⊗P(G). Ví dụ, vì 35 G = 2 nên ta có CARD(rank(35)) = CARD(12) = 2.

- Bảng tra giá trị mặt nạ của một khối nguyên tố


Để tính nhanh giá trị mặt nạ của một khối nguyên tố, PRISM sử dụng bảng tra
là một mảng một chiều gọi là MASK, trong đó MASK(rank(x)) = rank(ሺ‫ݔ‬ሻ‫) ٲ‬, với
∀x ∈ ⊗P(G). Ví dụ, MASK(rank(2)) = rank( (2)> ) = rank(4849845) = 254.

2.4.3.4 Đánh giá thuật toán PRISM


So sánh với thuật toán SPADE, PrefixSpan và SPAM, khi thực thi trên những
bộ dữ liệu tổng hợp và ngưỡng hỗ trợ minSup khác nhau, thuật toán PRISM đạt kết
quả tốt nhất về tốc độ cũng như hiệu quả sử dụng bộ nhớ [9]. Thuật toán SPAM
đứng thứ hai về tốc độ thực thi nhưng đối với CSDL lớn, thuật toán SPAM thất bại

- 34 -
vì không đủ dung lượng bộ nhớ. Trong khi đó, PrefixSpan và SPADE vẫn cho ra
kết quả song tốc độ chậm hơn so với PRISM. Qua kết quả thực nghiệm [9], có thể
kết luận PRISM là thuật toán khai thác mẫu tuần tự tốt nhất hiện nay.

2.5 Khai thác luật tuần tự từ tập mẫu tuần tự

2.5.1 Một số hướng tiếp cận trong khai thác luật tuần tự
Trong lĩnh vực khai thác luật tuần tự, các nghiên cứu tập trung trên bài toán
khai thác luật tuần tự không dư thừa (Spiliopoulou-1999, David Lo-2009). Trong
khi đó, chỉ có duy nhất một phương pháp cơ bản để khai thác tập luật tuần tự đầy đủ
do Spiliopoulou đề xuất. Từ những mô tả của phương pháp này, David Lo cùng
đồng sự đã khái quát thành thuật toán Full.

2.5.2 Thuật toán Full


Spiliopoulou [19] đã đề xuất việc tạo ra tập luật tuần tự đầy đủ (tất cả các luật
thỏa ngưỡng hỗ trợ và tin cậy) từ tập đầy đủ các mẫu tuần tự (tất cả các mẫu tuần
tự). Việc tạo ra tập luật tuần tự đầy đủ tiêu tốn rất nhiều thời gian và bộ nhớ. Số
lượng mẫu con phổ biến tỉ lệ lũy thừa với độ dài cực đại của mẫu cha. Cụ thể, nếu
một mẫu tuần tự kích thước k là phổ biến thì 2k mẫu con của nó cũng phổ biến. Mà
mỗi mẫu tuần tự kích thước k có thể tạo ra (k-1) luật (tùy thuộc vào ngưỡng tin cậy
tối thiểu). Do đó, số lượng luật sẽ gia tăng đồ sộ theo kích thước của mẫu. Thuật
toán Full được trình bày trong hình 2.5 [14].

Trước hết, thuật toán tìm tập tất cả các mẫu tuần tự, là những mẫu tuần tự có
độ hỗ trợ thỏa ngưỡng minSup. Với mỗi mẫu tuần tự trong tập chuỗi tìm được, thuật
toán tiến hành sinh tất cả các luật có thể có ứng với chuỗi đó. Cụ thể:
Với mỗi mẫu tuần tự có kích thước k, có thể tạo ra (k-1) luật. Mỗi luật có dạng
pre→post, trong đó pre là tiền tố của mẫu f và pre++post = f.
Do đó, với mỗi mẫu tuần tự, thuật toán xét lần lượt từng tiền tố. Với mỗi mẫu
tiền tố, thuật toán phải duyệt toàn bộ tập mẫu tuần tự để tìm độ hỗ trợ của mẫu tiền

- 35 -
tố, từ đó tính độ tin cậy có thể có nếu sinh luật ứng theo tiền tố này. Nếu độ tin cậy
thỏa ngưỡng minConf thì xuất ra luật đó.
Nếu gọi n là số lượng mẫu của tập các mẫu tuần tự, k là kích thước trung bình
của mẫu, thì độ phức tạp của thuật toán này là O(n2×k).

Thuật toán Full:


Đầu vào: CSDL chuỗi, minSup, minConf
Kết quả: Tất cả các luật có ý nghĩa
Phương pháp thực hiện:
1. Tìm tập tất cả các mẫu tuần tự Freq, gồm các mẫu có độ
hỗ trợ ≥ minSup
2. Với mỗi mẫu f ∈ Freq thực hiện
3. Với mỗi tiền tố pre của f thực hiện
4. Duyệt tập mẫu tuần tự để tìm sup(f)
5. Đặt post = px, sao cho pre++px = f
6. Đặt r = pre→post, sup = sup(f)
và conf = sup(f)/sup(pre)
7. Nếu conf ≥ minConf thì:
Xuất luật r(sup, conf)

Hình 2.5. Thuật toán Full [14]

- 36 -
Chương 3 . PHƯƠNG PHÁP KHAI THÁC LUẬT
TUẦN TỰ DỰA TRÊN CÂY TIỀN TỐ

3.1 Giới thiệu

Khi sinh luật tuần tự từ một mẫu tuần tự, độ tin cậy của luật phụ thuộc vào độ
hỗ trợ của mẫu tiền tố. Do đó, với mỗi mẫu tiền tố của một mẫu tuần tự, ta phải xác
định độ hỗ trợ của mẫu tiền tố. Thuật toán Full tiến hành xác định độ hỗ trợ của
mẫu tiền tố bằng cách duyệt toàn bộ tập mẫu tuần tự. Như đã đề cập trong phần
2.5.2, phương pháp này có độ phức tạp lớn O(n2×k) và tốn nhiều thời gian. Trong
chương này, luận văn trình bày hai thuật toán đề xuất: MSR_ImpFull và
MSR_PreTree. Cả hai thuật toán đều giảm số lần duyệt tập mẫu tuần tự, có độ phức
tạp nhỏ hơn và cải thiện tốc độ thực thi một cách hiệu quả. Thuật toán
MSR_ImpFull là thuật toán cải tiến từ thuật toán Full đã có và MSR_PreTree là
thuật toán mới dựa trên cây tiền tố.

3.2 Thuật toán MSR_ImpFull

Thuật toán MSR_ImpFull được trình bày trong hình 3.1, gồm các bước cơ bản
sau:

• Trước hết tìm tập mẫu tuần tự gồm những mẫu có độ hỗ trợ lớn hơn
hoặc bằng minSup, sử dụng thuật toán khai thác mẫu tuần tự tùy chọn
trong số các phương pháp đã có (dòng 1).

• Sắp xếp tập mẫu tuần tự tăng dần theo kích thước của mẫu (dòng 2).

• Với mỗi mẫu f trong tập mẫu tuần tự, duyệt các mẫu đứng sau f và kiểm
tra liệu f là tiền tố của những mẫu nào. Nếu mẫu b bất kỳ đứng sau f có
chứa f như là tiền tố thì sinh luật f →post, trong đó post là hậu tố của
mẫu b đối với tiền tố f. Tính độ tin cậy của luật, nếu thỏa minConf thì
xuất luật tìm được (dòng 3-9).

- 37 -
Thuật toán MSR_ImpFull cải tiến thuật toán Full như sau: Chính vì các mẫu
tuần tự được sắp xếp tăng dần theo kích thước của chúng nên với mẫu X bất kỳ, chỉ
những mẫu đứng trước X mới có khả năng là tiền tố của X. Do đó, với mỗi mẫu tuần
tự f trong tập mẫu tuần tự, thay vì phải sinh chuỗi tiền tố từ mẫu f đã có và ứng với
mỗi tiền tố phải duyệt toàn bộ tập mẫu như thuật toán Full, MSR_ImpFull chỉ duyệt
các mẫu đứng sau f và kiểm tra liệu f là tiền tố của những mẫu nào. Như vậy, so với
Full, thuật toán MSR_ImpFull đã giảm đi k lần duyệt tập mẫu tuần tự ứng với mỗi
mẫu trong tập mẫu được xét. Do đó độ phức tạp của thuật toán này là O(n2).

Thuật toán MSR_ImpFull:


Đầu vào: CSDL chuỗi, minSup, minConf
Đầu ra: Tất cả các luật có ý nghĩa
Phương pháp thực hiện:
1. Tìm FS = tất cả các mẫu có độ hỗ trợ ≥ minSup
2. Sắp xếp tất cả các mẫu trong tập FS tăng dần
theo kích thước của chúng
3. Với mỗi mẫu f ∈ FS thực hiện
4. Với mỗi mẫu b đứng sau f (theo thứ tự đã sắp)
5. Nếu f là một tiền tố của b
6. Lấy post = hậu tố b đối với tiền tố f
7. Đặt r = f → post, sup = sup(b),
conf = sup(b)/sup(f)
8. Nếu (conf ≥ minConf)
9. Xuất luật r(sup, conf)

Hình 3.1. Thuật toán MSR_ImpFull

Ví dụ, xét CSDL chuỗi D, độ hỗ trợ tối thiểu minSup = 50%, và độ tin cậy tối
thiểu minConf = 70% như bảng 2.1, tập mẫu tuần tự tìm được như bảng 2.2. Sau khi
sắp xếp ta được tập các mẫu tuần tự tăng dần theo kích thước như bảng 3.1.

- 38 -
Bảng 3.1. Tập mẫu tuần tự sau khi sắp tăng theo kích thước

Kích thước Mẫu tuần tự: Độ hỗ trợ

〈(A)〉: 4, 〈(B)〉: 5, 〈(C)〉: 4


1
〈(AB)〉: 4, 〈(BC)〉: 3

〈(A)(B)〉: 3, 〈(A)(C)〉: 3, 〈(AB)(B)〉: 3, 〈(AB)(C)〉: 3


2 〈(B)(A)〉: 3, 〈(B)(B)〉: 5, 〈(B)(C)〉: 4,
〈(B)(AB)〉: 3, 〈(B)(BC)〉: 3

〈(A)(B)(B)〉: 3, 〈(A)(B)(C)〉: 3, 〈(B)(B)(B)〉: 4, 〈(B)(B)(C)〉: 4,


3
〈(AB)(B)(B)〉: 3, 〈(AB)(B)(C)〉: 3, 〈(B)(B)(BC)〉: 3

Áp dụng thuật toán MSR_ImpFull, các luật tuần tự được sinh theo thứ tự như
bảng 3.2.

Bảng 3.2. Sinh luật tuần tự sử dụng thuật toán MSR_ImpFull


Các mẫu đứng sau Luật tuần tự, Độ tin cậy
Xét mẫu f
f có f là tiền tố conf=sup(X++Y)/sup(X)×100% conf ≥ minConf?

〈(A)〉:4 〈(A)(B)〉: 3 〈(A)〉→〈(B)〉, 75% Có


〈(A)(C)〉: 3 〈(A)〉→〈(C)〉, 75% Có
〈(A)(B)(B)〉: 3 〈(A)〉→〈(B)(B)〉, 75% Có
〈(A)(B)(C)〉: 3 〈(A)〉→〈(B)(C)〉, 75% Có
〈(B)〉: 5 〈(B)(A)〉: 3 〈(B)〉→〈(A)〉, 60% Không
〈(B)(B)〉: 5 〈(B)〉→〈(B)〉, 100% Có
〈(B)(C)〉: 4 〈(B)〉→〈(C)〉, 80% Có
〈(B)(AB)〉: 3 〈(B)〉→〈(AB)〉, 60% Không
〈(B)(BC)〉: 3 〈(B)〉→〈(BC)〉, 60% Không
〈(C)〉: 4 ∅ ∅
… … …

- 39 -
3.3 Thuật toán MSR_PreTree

Mặc dù thuật toán MSR_ImpFull có số lần duyệt tập mẫu tuần tự ít hơn thuật
toán Full, nhưng với mỗi mẫu tuần tự f, nó phải duyệt tất cả các mẫu đứng sau f theo
thứ tự đã sắp xếp để xác định những chuỗi nào có khả năng nhận f là tiền tố. Để
khắc phục vấn đề này, luận văn đề xuất một phương pháp khai thác luật tuần tự
mới dựa trên cấu trúc cây tiền tố - là cấu trúc cây từ điển được sử dụng trong thuật
toán PRISM ở giai đoạn khai thác mẫu tuần tự. Tuy nhiên, cây từ điển có được từ
giai đoạn khai thác mẫu được gọi là cây tiền tố vì căn cứ vào đặc điểm của cây này
và ảnh hưởng của nó đến quá trình sinh luật. Dựa trên cây tiền tố, thuật toán
MSR_PreTree sẽ tạo ra các luật một cách trực tiếp mà không phải sắp xếp tập mẫu
tuần tự cũng như duyệt tất cả các chuỗi đứng sau chuỗi đang xét theo thứ tự đã sắp.

3.3.1 Cây tiền tố


Phần này trình bày cấu trúc cây tiền tố, là cấu trúc dữ liệu dùng để lưu trữ tập
mẫu tuần tự tìm được ở giai đoạn một của bài toán khai thác luật tuần tự. Như đã
trình bày trong phần 2.3.2.3, cây tiền tố là một cây có thứ tự, trong đó quan hệ giữa
nút cha với nút con tương ứng là quan hệ giữa chuỗi con và chuỗi cha. Cây tiền tố
được xây dựng như sau:
Bắt đầu từ nút gốc của cây tại mức 0, nút gốc được gán nhãn là một chuỗi rỗng
〈〉. Tại mức k bất kỳ, mỗi nút được gán nhãn là một mẫu tuần tự độ dài k. Các nút ở
mức (k+1) kế tiếp được xây dựng đệ quy bằng cách mở rộng mẫu độ dài k ở mức
trước đó. Mẫu mở rộng bằng cách thêm vào một item phổ biến. Theo thuật toán
PRISM, có hai cách mở rộng: mở rộng theo chuỗi và mở rộng theo itemset.
Với mở rộng theo chuỗi, item được thêm vào mẫu đóng vai trò là một itemset
mới. Do đó, kích thước của mẫu mở rộng theo chuỗi luôn tăng lên 1 đơn vị so với
mẫu ban đầu.

Nhận xét 1: Với cách mở rộng theo chuỗi, mẫu α có độ dài k ban đầu sẽ là
một tiền tố của tất cả những mẫu mở rộng theo chuỗi. Hơn nữa, α cũng là tiền tố
của tất cả nút con (ở tất cả các mức >k) của những nút mở rộng theo chuỗi của α.

- 40 -
Còn với mở rộng theo itemset, item được thêm vào itemset cuối trong mẫu sao
cho item mới thêm phải lớn hơn (theo thứ tự từ điển) tất cả các item đã có trong
itemset cuối. Do đó, kích thước của mẫu mở rộng theo itemset không thay đổi so
với mẫu ban đầu.

Nhận xét 2: Với cách mở rộng theo itemset, mẫu α có độ dài k ban đầu sẽ là
một tiền tố không hoàn toàn của tất cả những mẫu mở rộng theo itemset. Hơn nữa,
α cũng là tiền tố không hoàn toàn của tất cả nút con (ở tất cả các mức >k) của
những nút mở rộng theo itemset của α.
Từ hai nhận xét trên, thuật toán MSR_PreTree được phát triển để khai thác
luật tuần tự. Thuật toán được trình bày trong phần 3.3.2.

{}

〈(B)〉: 5 〈(C)〉: 5
〈(A)〉: 4

T4

〈(A)(B)〉: 3 〈(A)(C)〉: 3 〈(AB)〉: 4 〈(B)(A)〉: 3 〈(B)(B)〉: 5 〈(B)(C)〉: 4 〈(BC)〉: 3

T1
〈(A)(B)(C)〉: 3 〈(AB)(C)〉 : 3 〈(B)(AB)〉: 3 〈(B)(BC)〉: 3
〈(A)(B)(B)〉: 3 〈(AB)(B)〉: 3 〈(B)(B)(B)〉: 4 〈(B)(B)(C)〉: 4
T2
T3

〈(AB)(B)(B)〉: 3 〈(AB)(B)(C)〉: 3 〈(B)(B)(BC)〉: 3

Mở rộng theo Itemset


Mở rộng theo chuỗi

Hình 3.2. Các mẫu tuần tự được lưu trữ trên cây tiền tố

Ví dụ, hình 3.2 biểu diễn cấu trúc cây tiền tố lưu các mẫu tuần tự tìm được từ
CSDL chuỗi ở bảng 2.1. Xét hai nút ở mức 1 là 〈(A)〉 và 〈(B)〉. Nút 〈(A)〉 có các nút

- 41 -
con mở rộng theo chuỗi là 〈(A)(B)〉 và 〈(A)(C)〉, và mở rộng theo itemset là 〈(AB)〉.
Do đó 〈(A)〉 là một tiền tố của tất cả các mẫu ở nằm trong T1 và là tiền tố không
hoàn toàn của tất cả các mẫu nằm trong T2. Tương tự, nút 〈(B)〉 có 〈(B)(A)〉,
〈(B)(B)〉, 〈(B)(C)〉 là các mẫu mở rộng theo chuỗi và 〈(BC)〉 là mẫu mở rộng theo
itemset. Cho nên 〈(B)〉 là tiền tố của tất cả các mẫu trong T3 và là tiền tố không
hoàn toàn của các mẫu trong T4.

3.3.2 Thuật toán MSR_PreTree

Theo nhận xét 1, bất kỳ mẫu α nào trên cây (ngoại trừ nút gốc 〈〉) luôn là một
tiền tố của tất cả những mẫu nằm trên cây con có gốc là những nút mở rộng theo
chuỗi của α. Do đó, tiến hành sinh luật với tất cả các mẫu nằm trên những cây con
này theo tiền tố là α. Ngược lại, không sinh luật với tất cả các mẫu nằm trên những
cây con có gốc là những nút mở rộng theo itemset của α vì α là tiền tố không hoàn
toàn của những mẫu này (theo nhận xét 2).
Thuật toán MSR_PreTree được miêu tả ở hình 3.3. Trước hết, thuật toán tìm
tập tất cả các mẫu tuần tự, áp dụng thuật toán PRISM [9]. Kết quả là tập các mẫu
tuần tự được lưu trữ dưới dạng cây tiền tố (dòng 1). Tại mức 1, với mỗi nút gốc r,
sinh luật tuần tự ứng với từng cây con bằng cách gọi thủ tục
Generate_Rule_From_Root(r) (dòng 2-4). Chi tiết thủ tục sinh luật từ một cây con
gốc r gồm các bước sau:

• Lấy mẫu tại nút gốc r (dòng 9).

• Xét từng cây con có gốc là nút mở rộng theo chuỗi của r, sinh luật với mỗi
mẫu nằm trên cây con này theo tiền tố là mẫu lấy được tại nút gốc r, sử
dụng thủ tục Generate_Rules (dòng 10-12).

• Tất cả các nút mở rộng của nút gốc r hiện thời sẽ trở thành tiền tố của
những cây con ở mức kế tiếp, vì vậy gọi đệ quy thủ tục này với từng nút
con của r, bao gồm nút con mở rộng theo chuỗi và mở rộng theo itemset

- 42 -
(dòng 10, 13-15). Quá trình đệ quy này được lặp lại cho đến mức cuối
cùng của cây.

Thuật toán MSR_PreTree:


Đầu vào: CSDL chuỗi, minSup, minConf
Kết quả: Tất cả các luật có ý nghĩa

Phương pháp thực hiện:


1. Duyệt CSDL chuỗi, tìm FS = Tất cả các mẫu có support ≥
minSup, lưu trữ trên cây tiền tố (sử dụng PRISM [9])
2. Đặt F1 = Tất cả các nút ở mức 1
3. Với mỗi nút r của F1 thực hiện
Generate_Rule_From_Root(r)

Generate_Rule_From_Root(root):
7. Đặt Seq-Set = Mở rộng theo chuỗi của nút root
8. Đặt Items-Set = Mở rộng theo itemset của nút root
9. Lấy pre = mẫu tại nút root
10. Với mỗi nút nseq trong tập Seq-set thực hiện
11. Đặt Sub-Tree = Cây con có gốc tại nseq
12. Generate_Rules(pre, Sub-Tree)
13. Generate_Rule_From_Root(nseq)
14. Với mỗi nút nitem trong tập Items-Set thực hiện
15. Generate_Rule_From_Root(nitem)

Hình 3.3. Thuật toán MSR_PreTree

Sau cùng, chi tiết thủ tục Generate_Rule được trình bày ở hình 3.4. Đầu vào
của thủ tục là một cây chứa các mẫu và một mẫu pre sao cho pre là tiền tố của tất cả
các mẫu nằm trên cây đó. Có thể duyệt các mẫu trên cây theo chiều rộng (BFS)
hoặc chiều sâu (DFS). Với mỗi mẫu f trên cây, sinh luật pre→post, trong đó post là
phần hậu tố của mẫu f theo tiền tố pre.

- 43 -
Generate-Rules(pre, Sub-Tree):
1. Với mỗi nút n trên cây tiền tố Sub-Tree thực hiện
2. Đặt f = mẫu tại nút n
3. Lấy post = hậu tố của f đối với tiền tố pre
4. Đặt r = pre→post,
sup = sup(f) và conf = sup(f)/sup(pre)
5. Nếu (conf ≥ minConf)
6. Xuất luật pre→post(sup, conf)

Hình 3.4. Thủ tục sinh luật từ các mẫu trên cây với tiền tố cho trước

Ví dụ, với CSDL chuỗi ở bảng 2.1, tập mẫu tuần tự tìm được được lưu trữ trên
cấu trúc cây tiền tố như hình 3.2. Xét nút gốc 〈(A)〉, mở rộng theo itemset của 〈(A)〉
là 〈(AB)〉 và mở rộng theo chuỗi của 〈(A)〉 là 〈(A)(B)〉 và 〈(A)(C)〉. Vì 〈(A)〉 là một
tiền tố không hoàn toàn của 〈(AB)〉 và của tất cả các nút con của 〈(AB)〉, cho nên
không tạo ra luật từ những nút này với tiền tố 〈(A)〉. Ngược lại, 〈(A)〉 là một tiền tố
của 〈(A)(B)〉 và 〈(A)(C)〉, nên ta có luật: 〈(A)〉→〈(B)〉, 〈(A)〉→〈(C)〉. Hơn nữa, 〈(A)〉
là tiền tố của tất cả các nút con của 〈(A)(B)〉 và 〈(A)(C)〉. Do đó, chúng ta cũng sinh
luật từ những nút con đó với tiền tố 〈(A)〉. Lặp lại quá trình trên cho các nút con mở
rộng từ 〈(A)〉 là 〈(A)(B)〉, 〈(A)(C)〉 và 〈(AB)〉. Kết quả sinh luật tuần tự đối với cây
con gốc tại 〈(A)〉 được minh họa trong bảng 3.3.

Bảng 3.3. Sinh luật tuần tự từ cây con gốc 〈(A)〉 sử dụng thuật toán MSR_PreTree

Các mẫu mở rộng Luật tuần tự,


Độ tin cậy
Xét mẫu f conf=sup(X++Y)/
của f có f là tiền tố conf ≥ minConf?
sup(X)×100%

〈(A)〉:4 〈(A)(B)〉: 3 〈(A)〉→〈(B)〉, 75% Có


〈(A)(C)〉: 3 〈(A)〉→〈(D)〉, 75% Có

- 44 -
〈(A)(B)(B)〉: 3 〈(A)〉→〈(E)〉, 75% Có
〈(A)(B)(C)〉: 3 〈(A)〉→〈(B)(D)〉, 75% Có

〈(A)(B)〉: 4 〈(A)(B)(B)〉: 3 〈(A)(B)〉→〈(D)〉, 100% Có


〈(A)(B)(C)〉: 3 〈(A)(B)〉→〈(E)〉, 100% Có

〈(A)(C)〉: 3

〈(A)(B)(B)〉: 3 ∅ ∅ ∅

〈(A)(B)(C)〉: 3

〈(AB)〉: 4 〈(AB)(B)〉: 3 〈(AB)〉→〈(B)〉, 75% Có

〈(AB)(C)〉: 3 〈(AB)〉→〈(C)〉, 75% Có

〈(AB)(B)(B)〉: 3 〈(AB)〉→〈(B)(B)〉, 75% Có

〈(AB)(B)(C)〉: 3 〈(AB)〉→〈(B)(C)〉, 75% Có

〈(AB)(B)〉: 3 〈(AB)(B)(B)〉: 3 〈(AB)〉→〈(B)〉, 100% Có

〈(AB)(B)(C)〉: 3 〈(A)(B)〉→〈(E)〉, 100% Có

〈(AB)(C)〉: 3

〈(AB)(B)(B)〉: 3 ∅ ∅ ∅

〈(AB)(B)(C)〉: 3

3.3.3 Trường hợp đặc biệt


Trong một số lĩnh vực ứng dụng, dữ liệu chuỗi thu được có dạng như sau: mỗi
itemset trong một chuỗi dữ liệu chỉ có duy nhất một item; nói cách khác, trong mỗi
chuỗi dữ liệu, mỗi item đóng vai trò là một itemset. Ví dụ như chuỗi dữ liệu sinh
học, chuỗi các mẫu truy cập web… Khi đó, phương pháp khai thác luật dựa trên cây
tiền tố có một số sửa đổi như sau.

- 45 -
• Cấu trúc cây tiền tố
Cây tiền tố lưu trữ tập mẫu tuần tự được xây dựng như đã trình bày ở phần
3.3.1. Tuy nhiên, các nút ở mức (k+1) kế tiếp được mở rộng từ mẫu độ dài k ở mức
trước đó bằng một cách duy nhất là mở rộng theo chuỗi. Tức item thêm vào đóng
vai trò là một itemset mới. Do đó, mỗi mẫu α tại nút bất kỳ trên cây luôn là tiền tố
của tất cả các mẫu tại các nút con của nó.
Ví dụ, xét CSDL như bảng 3.4, cho minSup = 50%.

Bảng 3.4. CSDL chuỗi, mỗi itemset trong chuỗi chỉ có 1 item

SID Chuỗi dữ liệu

1 〈(A)(B)(D)(E)〉

2 〈(B)(C)(E)〉

3 〈(A)(B)(D)(E)〉

4 〈(A)(B)(C)(E)〉

5 〈(A)(B)(C)(D)(E)〉

6 〈(B)(C)(D)〉

Tập mẫu tuần tự tìm được lưu trữ trong cây tiền tố như hình 3.5. Mẫu tuần tự
〈(A)〉 có các mẫu mở rộng theo chuỗi là 〈(A)(B)〉, 〈(A)(D)〉 và 〈(A)(E)〉. Mẫu 〈(A)〉 là
tiền tố của tất cả các mẫu tuần tự nằm trong T1. Tương tự, 〈(A)(B)〉 là tiền tố của tất
cả các mẫu nằm trong T11, 〈(A)(D)〉 là tiền tố của các mẫu nằm trong T12 và
〈(A)(E)〉 không mở rộng được nữa nên nó không là tiền tố của mẫu nào. Cuối cùng,
〈(A)(B)(D)〉 là tiền tố của các mẫu nằm trong T111. Tương tự đối với các mẫu nằm
trên các cây con nút gốc 〈(B)〉, 〈(C)〉, 〈(D)〉 và 〈(E)〉.

- 46 -
{}

〈(A)〉: 4 〈(B)〉: 6 〈(C)〉: 4 〈(D)〉: 4 〈(E)〉: 5

〈(A)(B)〉: 4 〈(B)(C)〉: 4 〈(C)(E)〉: 3 〈(D)(E)〉: 3


〈(A)(D)〉: 3 〈(B)(D)〉: 4
〈(A)(E)〉: 4 〈(B)(E)〉: 5
T1
T12
〈(A)(B)(D)〉: 3 〈(A)(D)(E)〉: 3 〈(B)(C)(E)〉: 3
〈(A)(B)(E)〉: 4 〈(B)(D)(E)〉: 3
T11

T111
〈(A)(B)(D)(E)〉: 3
Mở rộng theo chuỗi

Hình 3.5. Cây tiền tố lưu trữ các mẫu tuần tự

• Thuật toán MSR_PreTree sửa đổi


Trong thuật toán MSR_PreTree, chỉ sửa đổi thủ tục
Generate_Rule_From_Root(root) như hình 3.6. Xét nút gốc root, chỉ có các nút con
mở rộng theo chuỗi, sinh luật với tất cả các mẫu nằm trên những cây con có gốc tại
những nút con này, đồng thời gọi đệ quy thủ tục với từng nút con này. Thủ tục đã
bỏ đi phần gọi đệ quy với từng nút con mở rộng theo itemset.

Generate_Rule_From_Root(root):
1. Đặt Seq-Set = Mở rộng theo chuỗi của nút root
2. Lấy pre = mẫu tại nút root
3. Với mỗi nút nseq trong tập Seq-set thực hiện
4. Đặt Sub-Tree = Cây con có gốc tại nseq

- 47 -
5. Generate_Rules(pre, Sub-Tree)
6. Generate_Rule_From_Root(nseq)

Hình 3.6. Thủ tục sinh luật từ một cây con (có sửa đổi)

Như vậy, với loại CSDL này, thuật toán MSR_PreTree trở nên đơn giản hơn.
Kết quả sinh luật từ cây con gốc 〈(A)〉, với minConf = 70% được trình bày trong
bảng 3.5 như sau.

Bảng 3.5. Sinh luật tuần tự từ cây con gốc 〈(A)〉 sử dụng thuật toán MSR_PreTree
(trường hợp đặc biệt)

Các mẫu mở rộng Luật tuần tự,


Độ tin cậy
Xét mẫu f conf=sup(X++Y)/
của f có f là tiền tố conf ≥ minConf?
sup(X)×100%

〈(A)〉:4 〈(A)(B)〉: 4 〈(A)〉→〈(B)〉, 100% Có

〈(A)(D)〉: 3 〈(A)〉→〈(D)〉, 75% Có

〈(A)(E)〉: 4 〈(A)〉→〈(E)〉, 100% Có

〈(A)(B)(D)〉: 3 〈(A)〉→〈(B)(D)〉, 75% Có

〈(A)(B)(E)〉: 4 〈(A)〉→〈(B)(E)〉,100% Có

〈(A)(D)(E)〉: 3 〈(A)〉→〈(D)(E)〉, 75% Có

〈(A)(B)(D)(E)〉: 3 〈(A)〉→〈(B)(D)(E)〉, Có
75%

〈(A)(B)〉: 4 〈(A)(B)(D)〉: 3 〈(A)(B)〉→〈(D)〉, 75% Có

〈(A)(B)(E)〉: 4 〈(A)(B)〉→〈(E)〉, 100% Có

〈(A)(B)(D)(E)〉: 3 〈(A)(B)〉→〈(D)(E)〉, Có
75%

〈(A)(D)〉: 3 〈(A)(D)(E)〉: 3 〈(A)(D)〉→〈(E)〉, 100% Có

〈(A)(E)〉: 4 ∅ ∅ ∅

- 48 -
〈(A)(B)(D)〉: 3 〈(A)(B)(D)(E)〉: 3 〈(A)(B)(D)〉→〈(E)〉, Có
100%

〈(A)(B)(E)〉: 4
〈(A)(D)(E)〉: 3 ∅ ∅ ∅
〈(A)(B)(D)(E)〉: 3

3.3.4 Đánh giá


Thuật toán MSR_PreTree đạt hiệu quả cao bằng cách làm giảm chi phí duyệt
tập mẫu tuần tự khi đi tìm độ hỗ trợ của mẫu tiền tố. Nhờ vào cấu trúc cây tiền tố,
thuật toán không phải duyệt tập mẫu nhiều lần đề xác định mẫu đang xét là tiền tố
của những mẫu nào mà có ngay mẫu đang xét là tiền tố của tất cả các mẫu nằm trên
cây con mở rộng theo chuỗi của nó. Dễ thấy, số lượng trung bình các mẫu nằm trên
các cây con đó xấp xỉ k. Do đó, độ phức tạp của thuật toán này là O(n×k).
Như vậy, so sánh độ phức tạp của ba thuật toán:

• Full: O(n2×k)

• MSR_ImpFull: O(n2)

• MSR_PreTree: O(n×k)
Có thể thấy rằng hai thuật toán đề xuất: MSR_ImpFull và MSR_PreTree có độ
phức tạp nhỏ hơn, đặc biệt thuật toán MSR_PreTree có chi phí thấp và xử lý hiệu
quả hơn hẳn.

- 49 -
Chương 4 . KẾT QUẢ THỰC NGHIỆM

4.1 Giới thiệu

Dữ liệu chuỗi là loại dữ liệu phổ biến trong nhiều lĩnh vực ứng dụng. Do vậy,
đề tài tiến hành thực nghiệm trên hai loại CSDL. Với loại CSDL thứ nhất, mỗi
itemset của một chuỗi là một tập các item. Loại CSDL này thường có trong lĩnh vực
ứng dụng giao dịch thương mại và gọi là CSDL giao dịch. Với loại CSDL thứ hai,
mỗi item đóng vai trò là một itemset, loại CSDL này khá phổ biến như: dữ liệu sinh
học, dữ liệu web, dữ liệu vết thực thi chương trình…
Việc thực nghiệm được tiến hành trên trên máy tính Intel (R), Core 2 Duo
CPU T8100 2x2.10GHz, cài đặt trên ngôn ngữ lập trình Visual C#.net, sử dụng
Visual Studio.Net 2008. Trong đó, với loại CSDL thứ nhất, đề tài tiến hành thực
nghiệm trên CSDL tổng hợp được phát sinh từ bộ phát sinh dữ liệu cung cấp bởi
IBM như nhóm nghiên cứu của Agrawal [3] và Guoda, Zaki [9] (với một số sửa đổi
cho phù hợp với yêu cầu về chuỗi). Với loại CSDL thứ hai, đề tài thực nghiệm trên
CSDL thực gồm: Chess, Mushroom và Pumb-star. Các CSDL này được lấy từ kho
dữ liệu máy học UCI.

4.2 Kết quả thực nghiệm trên cơ sở dữ liệu tổng hợp

Các CSDL tổng hợp phát sinh bởi bộ phát sinh dữ liệu IBM có đặc điểm được
mô tả trong bảng 4.1. Trên các CSDL này, mỗi itemset là một tập các item, do đó ở
giai đoạn khai thác tập mẫu tuần tự, thuật toán PRISM phát triển mẫu theo hai dạng:
mở rộng theo chuỗi và theo itemset. Vì vậy, tuy số lượng mẫu tuần tự sinh ra nhiều,
nhưng kích thước mẫu ngắn (với mở rộng theo itemsset kích thước mẫu không tăng)
nên số lượng luật sinh ra ít.

- 50 -
Bảng 4.1. Đặc điểm của các CSDL tổng hợp

CSDL Số chuỗi Số lượng item Số itemset trung Số item


phân biệt bình /chuỗi trung
bình/itemset

C6T5N1kD1k 1,000 1,000 6 5

C6T5N1kD10k 10,000 1,000 6 5

Bảng 4.2 thống kê thời gian thực hiện của ba thuật toán (Full, MSR_ImpFull,
và MSR_PreTree) trên các CSDL tổng hợp khác nhau với minSup giảm dần,
minConf = 50%. Khi ngưỡng hỗ trợ minSup cao, số lượng mẫu tuần tự thu được ít
và mỗi mẫu có kích thước nhỏ. Do đó, số luật thu được không nhiều nên chênh lệch
về thời gian thực hiện của ba thuật toán là không đáng kể. Tuy nhiên, khi ngưỡng
hỗ trợ minSup giảm dần thì thời gian thực thi của ba thuật toán có sự chênh lệch rõ
rệt (hình 4.1, hình 4.2). Cả hai thuật toán đề xuất MSR_ImpFull và MSR_PreTree
đều tìm được tập luật như thuật toán Full, nhưng thời gian thực hiện của hai thuật
toán đề xuất nhanh hơn nhiều so với Full. Trong đó, thuật toán MSR_ImpFull thực
hiện nhanh gấp 2 lần và thuật toán MSR_PreTree thực hiện nhanh gấp 3240 lần so
với thuật toán Full khi ngưỡng minSup nhỏ (0.4%).

- 51 -
Bảng 4.2. So sánh thời gian thực hiện trên các CSDL tổng hợp (minConf = 50%)

CSDL minSup Số lượng Số lượng Thời gian thực hiện (s)

(%) mẫu tuần luật


Full MSR_ MSR_
tự
ImpFull PreTree

0.8 11,211 913 11.63 6.17 0.04

0.7 14,802 1,441 25.86 13.88 0.05


C6T5N1kD1k
0.6 20,664 2,302 65.61 34.05 0.07

0.5 31,311 4,045 157.90 84.33 0.09

0.4 54,566 9,134 518.40 269.54 0.16

0.8 8,430 248 6.23 4.25 0.02

0.7 10,480 335 10.44 6.81 0.02

C6T5N1kD10k 0.6 13,628 441 19.81 11.33 0.03

0.5 18,461 613 47.78 24.04 0.04

0.4 27,168 925 115.77 51.62 0.06

- 52 -
600.000

500.000 Full

400.000 MSR_ImpFull

Runtime (s)
MSR_PreTree
300.000

200.000

100.000

0.000
0.8 0.7 0.6 0.5 0.4
minSup (%)

C6T5N1kD1k

Hình 4.1. So sánh tốc độ thực thi của ba thuật toán trên CSDL - C6T5N1kD1k

140.0000
Full
120.0000
MSR_ImpFull
100.0000
Runtime (s)

MSR_PreTree
80.0000

60.0000

40.0000

20.0000

0.0000
0.8 0.7 0.6 0.5 0.4
minSup (%)

C6T5N1kD10k

Hình 4.2. So sánh tốc độ thực thi của ba thuật toán trên CSDL - C6T5N1kD10k

- 53 -
4.3 Kết quả thực nghiệm trên cơ sở dữ liệu thực

Các CSDL thực được lấy từ kho dữ liệu máy học UCI có đặc điểm được mô tả
trong bảng 4.3. Trên các CSDL này, mỗi itemset chỉ có một item, do đó ở giai đoạn
khai thác tập mẫu tuần tự, thuật toán PRISM phát triển mẫu bằng cách chỉ mở rộng
theo chuỗi. Vì vậy, với số lượng mẫu tuần tự xấp xỉ bằng số lượng mẫu tuần tự tìm
được của loại CSDL thứ nhất thì số lượng luật ở loại CSDL này sinh ra nhiều hơn
do kích thước của mỗi mẫu lớn hơn (mở rộng theo chuỗi kích thước mẫu tăng).

Bảng 4.3. Đặc điểm của các CSDL thực

CSDL Số chuỗi Số lượng item phân biệt Số itemset trung


bình /chuỗi

Chess 3,196 75 37

Mushroom 8,124 119 23

Pumb-star 49,046 7117 74

Bảng 4.4 thống kê thời gian thực hiện của ba thuật toán (Full, MSR_ImpFull,
và MSR_PreTree) trên các CSDL thực khác nhau với minSup giảm dần, minConf =
50%. Chúng ta cũng thấy rằng cả ba thuật toán đều sinh ra tập luật như nhau nhưng
thuật toán MSR_ImpFull chạy nhanh gấp 5 lần và thuật toán MSR_PreTree nhanh
gần gấp 1162 lần so với Full (khi ngưỡng minSup nhỏ). Như vậy, thuật toán
MSR_PreTree vượt trội hơn hẳn so với hai thuật toán còn lại (hình 4.3, 4.4, 4.5).

- 54 -
Bảng 4.4. So sánh thời gian thực hiện trên các CSDL tổng hợp (minConf = 50%)

Database minSup Số lượng Số lượng Thời gian thực hiện (s)

(%) mẫu tuần luật MSR_ MSR_


Full
tự ImpFull PreTree

Chess 90 618 1,723 0.17 0.12 0.037

85 2623 9,623 1.71 0.68 0.156

80 8,227 36,374 20.45 5.83 0.325

75 21,000 105,115 322.99 61.24 0.791

70 49,020 268,832 2006.19 359.06 2.11

Mushroom 35 957 2,162 0.27 0.19 0.04

30 1777 4,691 0.75 0.35 0.07

25 3,901 11,217 3.47 1.23 0.16

20 9,003 25,116 21.74 6.89 0.26

15 30,327 90,875 609.63 120.32 0.70

Pumb-star 28 5,915 11,151 6.77 2.76 0.14

26 8,767 16,256 17.15 6.15 0.19

24 12,935 23,148 59.06 16.24 0.22

22 20,233 35,641 183.02 50.50 0.30

20 32,779 57,401 523.13 140.36 0.45

- 55 -
2500
Full
MSR_PreTree
2000
MSR_ImpFull

Runtime (s) 1500

1000

500

0
90 85 80 75 70
minSup (%)

Chess

Hình 4.3. So sánh tốc độ thực thi của ba thuật toán trên CSDL thực - Chess

700

600 Full

500 MSR_PreTree
RunTime (s)

MSR_ImpFull
400

300

200

100

0
35 30 25 20 15
minSup (%)

Mushroom

Hình 4.4. So sánh tốc độ thực thi của ba thuật toán trên CSDL thực - Mushroom

- 56 -
600
Full
500
MSR_PreTree

400 MSR_ImpFull

Runtime (s)
300

200

100

0
28 26 24 22 20
minSup (%)

Pumb-star

Hình 4.5. So sánh tốc độ thực thi của ba thuật toán trên CSDL thực – Pumb-star

Như vậy, kết quả thực nghiệm đã chứng tỏ rằng các thuật toán đề xuất đều
thực hiện vượt trội trên cả hai loại CSDL khác nhau. Cả hai thuật toán
MSR_ImpFull và MSR_PreTree đều thực hiện nhanh hơn Full, đặc biệt thuật toán
MSR_PreTree nhanh hơn Full gấp nhiều lần.

- 57 -
Chương 5 . KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN

5.1 Kết luận

Luận văn đã tìm hiểu cơ sở lý thuyết về khai thác luật tuần tự trên CSDL
chuỗi. Kết quả thực nghiệm trên các CSDL cho thấy tính hiệu quả của các phương
pháp đề xuất so với thuật toán Full được đề nghị trước đây. Mục đích của luận văn
là đưa ra phương pháp hiệu quả để khai thác luật tuần tự trên CSDL chuỗi.
Luận văn đã giải quyết những vấn đề sau:
Chương một đã trình bày tổng quan về CSDL chuỗi. Đồng thời trình bày khái
quát về lĩnh vực khai thác luật trên CSDL chuỗi. Chương này cung cấp một cái nhìn
chung nhất về lĩnh vực khai thác luật trên CSDL chuỗi.
Chương hai phát biểu bài toán khai thác luật tuần tự. Hai giai đoạn của bài
toán khai thác luật được mô tả và khảo sát các hướng tiếp cận đã có. Trong đó, luận
văn mô tả chi tiết thuật toán PRISM, là thuật toán được chọn cho giai đoạn khai
thác mẫu tuần tự.
Chương ba trình bày hai phương pháp khai thác luật tuần tự mà luận văn đề
xuất và phân tích độ phức tạp của hai thuật toán này.
Cuối cùng, trong chương bốn, luận văn đã cài đặt chương trình thực nghiệm
trên cả hai loại CSDL và kiểm chứng hiệu quả của hai phương pháp đề xuất.
Tuy nhiên, luận văn chỉ mới nghiên cứu về mặt lý thuyết, chưa vận dụng vào
các ứng dụng thực tế để thấy tính ứng dụng và hiệu quả của luật tuần tự.

5.2 Hướng phát triển

Luật tuần tự rất hữu ích trong việc khám phá những tri thức tiềm ẩn trong các
nguồn dữ liệu ở dạng tuần tự. Tuy nhiên, với tình trạng bùng nổ thông tin hiện nay,
khối lượng dữ liệu ngày càng trở nên đồ sộ, việc khai thác tập luật tuần tự sao cho

- 58 -
hiệu quả và tốn ít thời gian nhất là cần thiết. Do vậy, luận văn hướng tới việc cải
thiện thuật toán hơn nữa để đạt tốc độ tối ưu hơn.
Trong một số lĩnh vực ứng dụng, cần thiết phải khai thác những luật tuần tự
thiết yếu nhất đó là luật tuần tự không dư thừa. Vì vậy, nghiên cứu phương pháp
khai thác luật tuần tự không dư thừa dựa trên cây tiền tố.
Hơn nữa, phát triển phương pháp sinh luật dựa trên cây tiền tố vào bài toán
khai thác luật thú vị.
Đi sâu vào tính ứng dụng của bài toán khai thác luật tuần tự trên CSDL chuỗi.

- 59 -
TÀI LIỆU THAM KHẢO

Tiếng Anh

[1] Agrawal, R., Imielinski, T., and Swami, A. N. (1993), “Mining association
rules between sets of items in large databases”, in Proceedings of the 1993
ACM SIGMOD International Conference on Management of Data, 207-216.

[2] Agrawal, R., Srikant, R. (1994), “Fast algorithms for mining association
rules”, in: Proceedings of International Conference on Very Large Data Bases,
pp. 487–499.
[3] Agrawal, R., Srikant, R. (1995), “Mining Sequential Patterns”, in: Proc. 11th
Int’l Conf, Data Engineering, pp. 3–14.
[4] Ayres, J., Gehrke, J.E., Yiu, T., Flannick, J. (2002), “Sequential Pattern
Mining using a Bitmap Representaion”, in SIGKDD Conf., pp. 1–7.
[5] Baralis, E., Chiusano, S., Dutto, R. (2008), “Applying Sequential Rules to
Protein Localization Prediction”, in: Computer and Mathematics with
Applications 55 (5), pp. 867–878.
[6] Berry, M.J., Linoff, G.S. (1997), “Data Mining Techniques for Marketing,
Sales and Customer Support”, in: John Wiley & Sons.
[7] Brin, S., Motwani, R., Ullman, J., Tsur, S. (1997), “Dynamic Itemset Counting
and Implication Rules for Market Basket Data”, In Proc. of the 1997 ACM-
SIGMOD Int’l Conf. on the Management of Data, pp. 255-264.
[8] Dong, G., Pei, J. (2007), Sequence Data Mining, Springer Science + Business
Media, LLC.
[9] Gouda, K., Hassaan, M., Zaki, M.J. (2010), “Prism: A Primal-Encoding
Approach for Frequent Sequence Mining”, Journal of Computer and System
Sciences, Volume 76, Issue 1, pp. 88-102.

- 60 -
[10] Han, J., Pei, J., Mortazavi-Asl, B., Chen, Q., Dayal, U., and Hsu, M.C.,
(2000), “Freespan: Frequent pattern-projected sequential pattern mining”, in
Proc. 2000 Int. Conf. Knowledge Discovery and Data Mining (KDD’00), pp.
355–359.
[11] Han, J., Kamber, M., Data Mining : Concepts and Techniques 2nd Edition.
[12] Hegland, M. (2003), “Algorithms for Association Rules”, Lecture Notes in
Computer Science, Volume 2600, Jan 2003, Pages 226 – 234.
[13] Lo, D., Khoo, S.C., Liu, C. (2008), “Efficient Mining of Recurrent Rules from
a Sequence Database”, in: Proceedings of International Conference on
Database Systems for Advanced Applications, pp. 67–83.
[14] Lo, D., Khoo, S.C., Wong, L. (2009), “Non-Redundant Sequential Rules-
Theory and Algorithm”, in: Information Systems, Volume 34, Issue 4-5, pp.
438-453.
[15] Lo, D., Khoo, S.-C. (2006), “SMArTIC: Toward Building an Accurate, Robust
and Scalable Specification Miner”, in: Proceedings of SIGSOFT Sympo- sium
on the Foundations of Software Engineering, pp. 265–275.
[16] Mannila, H., Toivonen, H., Verkamo, A.I. (1997) Discovery of frequent
episodes in event sequences. DMKD 1, 259–289.
[17] Masseglia, F., Cathala, F., & Poncelet, P. (1998), “The PSP Approach for
Mining Sequential Patterns”, Proceedings of the 2nd European Symposium on
Principles of Data Mining and Knowledge Discovery, Nantes, France, 176-
184.
[18] Pei, J., et al. (2004), “Mining Sequential Patterns by Pattern-Growth: The
PrefixSpan Approach”, in: IEEE Trans. Knowledge and Data Engineering
16(10), pp. 1424–1440.
[19] Spiliopoulou, M. (1999), “Managing Interesting Rules in Sequence Mining”,
in: Proceedings of European Conference on Principles of Data Mining and
Knowledge Discovery, pp. 554–560.

- 61 -
[20] Srikant, R., Agrawal, R. (1996), “Mining Sequential Patterns: Generalizations
and Performance Improvements”, in: Proc. 5th Int’l Conf. Extending Database
Technology, pp.3–17.
[21] Yan, X., Han, J., and Afshar, R. (2003), “CloSpan: Mining Closed Sequential
Patterns in Large Databases”, in: Proceedings of SIAM International
Conference on Data Mining
[22] Yang, J., Evans, D.,Bhardwaj, D., Bhat, T., Das, M. (2006), “Mining
temporal API Rules from Imperfect Traces, in: Proceedings of International
Conference on Software Engineering, 2006, pp. 282–291.
[23] Zaki, M.J. (2000), “SPADE: An Efficient Algorithm for Mining Frequent
Sequences”, Machine Learning Journal 42(1/2), pp. 31–60.
[24] Zhang, M., Hsu, W., Lee, M. -L. (2006), “Mining progressive confident
rules”, in: Proceedings of SIGKDD Conference on Knowledge Discovery and
Data Mining, pp. 803–808.

- 62 -

You might also like