KHAI PHÁ MẪU TUẦN TỰ BẰNG PHƯƠNG PHÁP PHÁT TRIỂN MẪUPHƯƠNG PHÁP TIẾP CẬN: PREFIXSPAN 1.Giới thiệu Khai phá mẫu tuần tự là việc tìm ra các dãy con phổ biến như một mẫu trong một cơ sở dữ
Trang 1KHAI PHÁ MẪU TUẦN TỰ BẰNG PHƯƠNG PHÁP PHÁT TRIỂN MẪU
PHƯƠNG PHÁP TIẾP CẬN: PREFIXSPAN 1.Giới thiệu
Khai phá mẫu tuần tự là việc tìm ra các dãy con phổ biến như một mẫu trong một cơ
sở dữ liệu (CSDL) dãy, đây là nội dung quan trọng trong khai phá dữ liệu với nhiều ứng dụng rộng rãi như: phân tích thị trường, phân tích mẫu truy cập web, phân tích các tiến trình có tính tuần tự hoặc liên quan đến thời gian như các thí nghiệm khoa học, thiên tai hoặc quá trình điều trị bệnh, hoặc phân tích chuỗi DNA
Vấn đề khai phá dữ liệu tuần tự lần đầu tiên được đề xuất bởi Agrawal và Srikant trong cuốn “R Agrawal and R Srikant, “Mining Sequential Patterns,” Proc
1995 Int’l Conf Data Eng (ICDE ’95), pp 3-14, Mar 1995”: “cho 1 tập các dãy (sequence), trong đó mỗi dãy chứa 1 danh sách các giao dịch (element), mỗi giao dịch lại chứa 1 tập các sự kiện (item), và cho 1 ngưỡng hỗ trợ min-support do người dùng
tự định nghĩa, khai phá dữ liệu là việc tìm ra tất cả dãy con phổ biến, tức là những dãy con này phải thỏa mãn điều kiện số lần xuất hiện của nó trong tập các dãy không nhỏ hơn min-support”
Nguyên lí Apriori là cơ sở của phương pháp khai phá mẫu tuần tự như GSP, thông qua nhiều lần duyệt CSDL, phương pháp tiếp cận các thế hệ ứng cứ viên và kiểm tra được trình bày như sau:
• Tư tưởng Apriori:
1 Tìm tất cả các tập thường xuyên (frequent itemset): k-itemset (itemset gồm
k phần tử) Dùng k-itemset để tìm (k+1)-itemset
2 Đầu tiên tìm 1-itemset (kí hiệu là L1) tiếp tục cho đến khi không có k-itemset nào được tìm thấy
3 Từ các tập thường xuyên sinh ra các luật kết hợp mạnh (các luật kết hợp thỏa mãn 2 tham số min-supp (độ hỗ trợ) và min-conf (độ tin cậy))
• Thuật toán Apriori:
Input: CSDL D và ngưỡng min-supp, min-conf
Output: tập các luật kết hợp thỏa mãn min-supp và min-conf
1 Duyệt toàn bộ CSDL để có được support S của 1-itemset, so sánh S với min-supp để có được 1-itemset (L1)
2 Sử dụng Lk-1 nối (join) Lk-1 để sinh ra candidate k-itemset Loại bỏ các itemsets không phải là các frequent itemsets thu được k-itemset
Trang 23 Duyệt lại CSDL để có support của mỗi candidate k-itemset, so sánh S với min-supp để thu được frequent k-itemset (Lk)
4 Lặp lại từ bước 2 cho đến khi tập các ứng cử viên Candidate set (C) là rỗng tức là không tìm thấy frequent itemsets
5 Với mỗi frequent itemset (I), sinh ra tất cả các tập con s không rỗng của I
6 Với mỗi tập con không rỗng của I, sinh ra các luật s (I – s) nếu độ tin cậy của nó >= min-conf
Ví dụ: Giả sử ta có có sở dữ liệu giao dịch (Transaction Database -TDB) như sau :
Thuật toán Apriori khai phá luật kết hợp được mô tả qua các bước sau
Ta có frequent itemsets I ={B,C,E}, với min_conf =80% ta có 2 luật kết hợp là
Trang 3{B,C} => {E} và {C,E} => {B}
• Đánh giá thuật toán:
Thuật toán đơn giản dễ hiểu dễ cài đặt tuy nhiên có vài nhược điểm sau:
- Phải duyệt CSDL nhiều lần, I = {i 1 , i 2 , , i 100 }, số lần duyệt CSDL sẽ là 100.
- Số lượng tập ứng viên rất lớn: ví dụ CSDL chỉ chứa 1 chuỗi đơn có chiều dài
100 <a 1 a 2 a 100 > và ngưỡng hỗ trợ là 1 thì số lượng các ứng viên chiều dài 1 là
100, số các ứng viên chiều dài 2 là 100 * 100 + =14950, tổng tất cả các ứng viên là 2100 – 1 1030
- Thực hiện tính độ phổ biến nhiều, đơn điệu
Chúng ta có thể phát triển một phương pháp dựa trên tinh thần của Apriori nhưng tránh hoặc cơ bản giảm những thế hệ ứng viên “đắt tiền” và kiểm tra Đây là động lực của nghiên cứu này Trong báo cáo này, chúng tôi trình bày một cách hệ thống phương pháp tiếp cận phát triển mẫu để khai phá có hiệu quả các mẫu tuần tự trong một CSDL dãy lớn
Ý tưởng của phương pháp: tránh việc sinh toàn bộ các ứng viên, tập trung vào tìm kiếm một phần được hạn chế trên CSDL ban đầu, việc phân vùng không gian tìm kiếm
là một nội dung quan trọng Các thuật toán phát triển mẫu là thuật toán duyệt theo chiều sâu, kĩ thuật này tạo ra một CSDL chiếu cho mỗi mẫu có chiều dài k và lặp lại quá trình để tìm kiếm mẫu có chiều dài k+1 Sử dụng kĩ thuật chia để trị, việc tạo ra một CSDL chiếu là giải pháp nhằm giảm không gian tìm kiếm
Dựa trên những kĩ thuật này, một mô hình đơn giản đầu tiên sử dụng phương pháp
phát triển mẫu được đề xuất, FreeSpan (Frequent pattern – projected Sequential pattern mining) Cũng trong báo cáo này, chúng tôi giới thiệu một phương pháp hiệu
quả hơn được gọi là PrefixSpan (Prefix-projected Sequential pattern mining) Để nâng
cao hơn nữa hiệu suất kĩ thuật pseudoprojection được phát triển trong PrefixSpan Một nghiên cứu cho thấy rằng hiệu suất toàn diện của PrefixSpan trong hầu hết các trường hợp, nhanh hơn so với các thuật toán GSP, FreeSpan hay SPADE, và PrefixSpan tích hợp với pseudo-projection là nhanh nhất trong số tất cả các thuật toán kiểm tra Hơn
Trang 4nữa, các kết quả thực nghiệm cũng cho thấy rằng PrefixSpan tiêu thụ một không gian
bộ nhớ ít hơn GSP hay SPADE Phương pháp phát triển mẫu có thể tiếp tục được mở rộng để khai phá dữ liệu ở những mức cao hơn ví dụ như khai phá mẫu tuần tự đa chiều, khai phá các mô hình cấu trúc khác
Phần còn lại của báo cáo được trình bày như sau: trong phần 2, mô tả vấn đề khai phá mẫu tuần tự, và minh họa thuật toán GSP Trong phần 3, giới thiệu phương pháp tiếp cận phát triển mẫu, đầu tiên là tổng kết thuật toán FreeSpan, sau đó trình bày thuật toán PrefixSpan và kĩ thuật pseudoprojection nhằm nâng cao hiệu suất Các kết quả thực nghiệm và phân tích đánh giá được báo cáo trong phần 4 Một vài phương pháp
mở rộng và hướng nghiên cứu trong tương lai được trình bày trong phần 5 và những nghiên cứu của chúng tôi được kết luận trong phần 6
2 Mô tả vấn đề và thuật toán GSP
2.1.Mô tả vấn đề
Cho I = {i 1 , i 2 , , i n } là tập tất cả các sự kiện, một itemset là một tập con của I Một dãy
là một danh sách có thứ tự các itemsets Một dãy s được kí hiệu <s 1 s 2 s l > trong đó sj
là một itemset, sj cũng được gọi là một giao dịch của dãy, và được kí hiệu là (x1 x 2 x m )
trong đó xk là một sự kiện
Cho ngắn gọn các dấu ngoặc () được bỏ qua nếu giao dịch chỉ có một sự kiện ví dụ
giao dịch (x) cũng được viết là x Một sự kiện có thể xuất hiện nhiều nhất một lần
trong một giao dịch nhưng có thể xuất hiện nhiều lần trong những giao dịch khác nhau của dãy Số lượng các sự kiện trong một dãy được gọi là độ dài của dãy Một dãy có
độ dài l cũng được gọi là l-sequence.
Cho dãy α = <a 1 a 2 a n > và β= <b 1 b 2 b n > Khi đó, α được gọi là dãy con của β và β được gọi là dãy bao của α nếu tồn tại các số nguyên 1 ≤ j 1 < j 2 < < j n ≤ m thỏa mãn
a1 ⊆ bj1 , a2 ⊆ bj2 , an ⊆ bjn.
Một CSDL dãy S là tập các bộ dữ liệu (sid,s) trong sid là định danh của dãy và s là một dãy các itemset Một bộ dữ liệu (sid,s) được gọi là chứa dãy α nếu α là một dãy
Trang 5con của s Độ hỗ trợ của dãy α trong CSDL S là số những bộ dữ liệu trong CSDL chứa
α Ví dụ: supports(α) = |{<sid,s>|(<sid,s>∈S) ∧ (α⊆s)}|
Nó có thể được kí hiệu là support(α) nếu CSDL dãy đó có ngữ cảnh rõ ràng
Cho một số nguyên dương min-support là ngưỡng hỗ trợ, dãy α được gọi là phổ biến trong CSDL S nếu supports(α) ≥ min-support Một mẫu phổ biến có chiều dài l được
gọi là l-pattern.
Ví dụ: Cho CSDL như trong Table 1 và min-support =2:
Tập các sự kiện của CSDL là {a,b,c,d,e,f,g}
Dãy <10> = <a(abc)(ac)d(cf)> có 5 giao dịch (a), (abc), (ac), (d), (cf) trong đó a và c
xuất hiện nhiều hơn một lần và nó cũng xuất hiện trong những giao dịch khác Dãy có chiều dài là 9
Dãy <a(bc)df>là dãy con của dãy <a(abc)(ac)d(cf)>
Ở cả dãy <10> và dãy <30> đều chứa dãy con s = <(ab)c>, nên s là mẫu phổ biến có
chiều dài 3 (3-pattern)
Vấn đề đặt ra: Cho một CSDL dãy và một ngưỡng hỗ trợ min-support, khai phá dữ
liệu tuần tự là tìm tất cả các mẫu phổ biến trong CSDL
2.2.Thuật toán GSP (Generalized Sequential Pattern)
Input: CSDL dãy S, min-supp;
Output: F-tập tất cả các dãy tuần tự phổ biến trong S;
Thuật toán:
1 Duyệt CSDL để tìm các dãy phổ biến có độ dài 1
2 For mỗi cấp (dãy có độ dài k)
Trang 6a Tạo ra các dãy ứng viên có độ dài k+1 từ các dãy phổ biến chiều dài
k (sử dụng Apriori)
b Duyệt CSDL để đếm độ phổ biến của từng dãy ứng viên và loại các ứng viên không thỏa mãn ngưỡng min-supp
3 Lặp lại đến khi không còn dãy phổ biến hoặc không còn các ứng viên
Đánh giá:
- Số lượng tập các dãy ứng viên là khổng lồ
- Phải duyệt CSDL nhiều lần
- Không hiệu quả khi khai thác các dãy dài
Ví dụ: xét CSDL trong Table 1:
-Duyệt CSDL tìm được các dãy con phổ biến có chiều dài 1 là: {<a> :4, <b> :4,
<c> :3, <d> :3, <e> :3, <f> :3}
- 1 tạo ra các ứng viên có độ dài 2 từ các dãy con phổ biến độ dài 1: {<aa>,
<ab>, ,<af>, <ba>, <bb>, ,<ff>, <(ab)>, <(ac)>, , <(ef)>}
2 duyệt lại CSDL để tìm độ phổ biến của dãy con có chiều dài 2 ở trên và loại bỏ các dãy ứng viên không thỏa mãn min-supp
- Dừng khi không còn dãy ứng viên hoặc không còn dãy phổ biến
3 Khai phá mẫu tuần tự bằng phương pháp phát triển mẫu
3.1 Thuật toán FreeSpan
Sử dụng các mẫu phổ biến để đệ quy dãy dữ liệu thành các dãy dữ liệu nhỏ hơn Khai phá tập phổ biến, sử dụng các dãy dữ liệu nhằm giới hạn việc tìm kiếm và sự gia tăng của các dãy con để tìm ra các tập mẫu của nó
Trang 7Input: Input: CSDL S và min-supp
Output: tập tất cả các mẫu phổ biến
Thuật toán:
1 Quét dữ liệu, tìm các mục phổ biến từ tập dữ liệu, danh sách mục thường xuyên với độ hỗ trợ giảm dần gọi là f-list Tất cả các dãy đều có thể chia nhỏ thành 1 vài dãy con không trùng lặp
2 a.Xây dựng ma trận mục phổ biến mỗi lần quét dữ liệu Ma trận mục phổ biến
là ma trận tam giác F[j,k] trong đó
1≤j ≤m m là số mục phổ biến 1≤k ≤ j
F[j,j]: chỉ có 1 bộ đếm ghi lại số lần xuất hiện của dãy (jj) F[j,k] có 3 bộ đếm (A, B, C) trong đó A ghi lại số lần xuất hiện mẫu
<jk>, B ghi lại số lần xuất hiện mẫu <k,j>, C ghi lại số lần xuất hiện mẫu
<(jk)>
b tạo ra các dãy mẫu có độ dài bằng 2, với bộ đếm, nếu giá trị trong bộ đếm ≥ min-supp thì thu được dãy mẫu tương ứng
3.2.Thuật toán PrefixSpan
3.2.1 Định nghĩa 1: Prefix (tiền tố)
Cho dãy α = <e 1 e 2 e 3 e n > và dãy β = <e’ 1 e’ 2 e’ 3 e’ m > (m≤n)
β được gọi là tiền tố của α khi và chỉ khi:
+) e’i = ei (i ≤ m-1)
+) e’m ⊆ em
+) tất cả các phần tử trong em – e’m được sắp xếp sau e’m
Ví dụ: α = <a(abc)(ac)d(cf)> thì <a>, <aa>, <a(ab)>, <a(abc)> là tiền tố của α
3.2.2 Định nghĩa 2: Suffix (hậu tố)
Cho dãy α = <e 1 e 2 e 3 e n > và dãy β = <e’ 1 e’ 2 e’ 3 e’ m > (m≤n) là tiền tố của α.
Dãy γ = <e” m e m+1 e n >được gọi là hậu tố của α tương ứng với tiền tố β, kí hiệu là
γ = α|β khi: e” m =(e m - e’ m ) 2
Ví dụ: α = <a(abc)(ac)d(cf)> thì dãy <(_bc)(ac)d(cf)> là hậu tố tương ứng với tiền tố
<aa>
Trang 83.2.3 Định nghĩa 3: Project Database (CSDL chiếu)
- Hình chiếu: cho 2 dãy α,β như trên Một dãy con α’ của dãy α được gọi là hình chiếu của α tương ứng với tiền tố β khi và chỉ khi:
+) α’ có tiền tố β
+) không tồn tại α” nào là tiền tố của β mà lớn hơn α’
- CSDL chiếu: cho α là một dãy trong S, α-project database kí hiệu là S|α là tất cả các hậu tố của các dãy trong S tương ứng với tiền tố α
Ví dụ: prefix <a> có CSDL chiếu tương ứng S|a là <(abc)(ac)d(cf)>,<(_d)c(bc)(ae)>,
<(_b)(df)cb>, <(_f)cbc>.
3.2.4 Định nghĩa 4: support count (độ hỗ trợ)
Cho dãy α trong CSDL S và β là dãy có tiền tố là α Độ hỗ trợ support count của β trong S|α kí hiệu là support S|α (β) là số lượng các dãy γ trong S|α
3.2.5.Thuật toán PrefixSpan
a Input: CSDL S và min-supp
b Output: tập các mẫu phổ biến sinh ra từ dãy α ban đầu
c Hàm PrefixSpan(α,1,S|α) trong đó:
α là dãy phổ biến
1 là độ dài của α
S|α là α-project database nếu α ≠ <>, ngược lại là CSDL S
d Phương thức
1 Quét S|α 1 lần, tìm tập các phần tử thường xuyên b như sau:
+) b có thể được thêm vào phần tử cuối cùng của α để trở thành một mẫu phổ biến hoặc
++) giao dịch <b> có thể được thêm vào cuối dãy để α trở thành mẫu phổ biến mới
2 Lặp lại với mỗi phần tử thường xuyên b, thêm nó vào dãy α để tạo thành dãy mới α’, in α’
3 Với mỗi α’, sinh S|α’ và gọi lại hàm PrefixSpan(α’,l+1,S|α’)
4 Thuật toán dừng khi không tìm thấy phần tử thường xuyên hoặc không có CSDL chiếu
Trang 9e Đánh giá thuật toán:
1 PrefixSpan chỉ tăng dần chiều dài các mẫu tuần tự từ các mẫu ngắn hơn PrefixSpan không cần sinh hay kiểm tra bất cứ dãy ứng cử nào không tồn tại trong CSDL ban đầu cũng như các CSDL chiếu (GSP sinh ra những dãy này phải sử dụng các bước xén tỉa của hàm candidate_gen SPM để loại bỏ chúng) GSP tại mỗi lần lặp phải sinh ra rất nhiều dãy ứng cử và phải kiểm tra toàn bộ tập này, như vậy không gian tìm kiếm của PrefixSpan nhỏ hơn rất nhiều so với GSP
2 Các CSDL chiếu liên tục giảm kích thước: một CSDL chiếu luôn nhỏ hơn CSDL gốc của nó, bởi nó chỉ chứa các dãy hậu tố của các dãy dữ liệu trong CSDL gốc Trên thực tế, sự giảm kích thước của CSDL chiếu có thể rất đáng kể vì 2 nguyên nhân: 1.thông thường chỉ có một tập nhỏ các mẫu tuần tự có độ dài lớn trong CSDL ban đầu do đó số lượng bản ghi trong CSDL chiếu sẽ giảm đi rất nhiều mỗi khi độ dài của tiền tố tăng lên; 2.phép chiếu chỉ giữ lại phần hậu tố của một dãy và bỏ đi toàn bộ các giao dịch kể từ tiền tố trở về trước, dẫn đến các bản ghi trong CSDL chiếu cũng giảm độ dài nhanh chóng
3 Chi phí xử lí chính của thuật toán PrefixSpan là dành cho việc xây dựng các CSDL chiếu Trong trường hợp xấu nhất, thuật toán PrefixSpan phải xây dựng mọi CSDL chiếu cho mỗi mẫu tuần tự Nếu số lượng mẫu tuần tự tồn tại trong CSDL ban đầu lớn, thì chi phí này trở nên không tầm thường
3.2.6 Chạy ví dụ
10 <a(abc)(ac)d(cf)>
20 <(ad)c(bc)(ae)>
30 <(ef)(ab)(df)cb>
40 <eg(af)cbc>
Min-supp = 2
1.Lần gọi hàm đầu tiên PrefixSpan(<>,0,S)
Bước 1: Tìm tất cả các mẫu tuần tự có độ dài 1
<a> :4, <b> :4, <c> :4, <d> :3, <e> :3, <f> :3,
Bước 2: đưa tất cả các mẫu tìm được vào tập kết quả F
Bước 3: Với mỗi mẫu α’ tìm được, xây dựng CSDL chiếu và gọi đệ quy hàm
PrefixSpan(α’,l+1, S|α’)
2.Xét mẫu tuần tự <a>, có S|<a> như sau:
Trang 1010 < (abc)(ac)d(cf)>
20 <(_d)c(bc)(ae)>
30 <(_b)(df)cb>
Gọi đệ quy hàm PrefixSpan(<a>,1,S|<a>) tìm được các phần tử thường xuyên sau:
<a>: 2, <b>: 4, <c>: 4, <d>: 2, <f>: 2,<_b>:2
Tạo ra các mẫu phổ biến độ dài 2 và đưa chúng vào tập kết quả F Các mẫu mới là:
<aa>: 2, <ab>: 4, <ac>: 4, <ad>: 2, <af>: 2, <(ab)>
Xét mẫu phổ biến <aa>, có S|<aa> như sau:
10 < (_bc)(ac)d(cf)>
Gọi đệ quy hàm PrefixSpan(<aa>,2,S|<aa>) không tìm được phần tử thường xuyên nào thỏa mãn min-supp Thuật toán dừng
Xét mẫu phổ biến <ab>, có S|<ab> như sau:
10 < (_c)(ac)d(cf)>
20 < (_c)(a)>
Gọi đệ quy hàm PrefixSpan(<ab>,2,S|<ab>) tìm được các phần tử thường xuyên sau:
<_c>: 2, <a>: 2, <c>: 2, <(_c)a>: 2
Tạo ra các mẫu phổ biến độ dài 3: <a(bc)>, <a(bc)a>, <aba>, <abc>
Thuật toán dừng
Xét mẫu phổ biến <(ab)>, có S|<(ab)> như sau:
10 <(_c)(ac)d(cf)>
Gọi đệ quy hàm PrefixSpan(<(ab)>,2,S|<(ab)>) tìm được các phần tử phổ biến sau:
<d>: 2, <f>: 2, <c>:2, <dc>:2
Tạo ra các mẫu phổ biến độ dài 3: <(ab)c>, <(ab)d>, <(ab)f>, <(ab)dc>
Xét mẫu phổ biến <ac>, có S|<ac> như sau:
10 < (ac)d(cf)>
20 <(bc)(ae)>