Tải bản đầy đủ (.docx) (18 trang)

khai phá dữ liệu tuần tự

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (399.52 KB, 18 trang )

KHAI 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ó kitemset 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.
1


3. 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à

2


{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 = {i1, i2, ..., i100}, 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 <a1a2..a100> 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
3


nữ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 = {i1, i2, .., in} 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 <s1s2..sl> 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à (x1x2...xm)
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 α = <a1a2...an> và β= <b1b2...bn>. 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 ≤ j1 < j2 < ...< jn ≤ 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
4



con 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)
5


a. 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ó.
6


Input: 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 α = <e1e2e3...en> và dãy β = <e’1 e’2e’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 α = <e1e2e3...en> và dãy β = <e’1 e’2e’3...e’m> (m≤n) là tiền tố của α.
Dãy γ = <e”mem+1...en>được gọi là hậu tố của α tương ứng với tiền tố β, kí hiệu là
γ = α|β khi: e”m =(em - 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>


7


3.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
8


e. Đá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ụ
Sid
10
20
30

40

S
<a(abc)(ac)d(cf)>
<(ad)c(bc)(ae)>
<(ef)(ab)(df)cb>
<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:
Sid

S
9


10
20
30
40

< (abc)(ac)d(cf)>
<(_d)c(bc)(ae)>
<(_b)(df)cb>

<(_f)cbc>

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:
Sid
10
20

S
< (_bc)(ac)d(cf)>
< (_e)>

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:
Sid
10
20
40

S
< (_c)(ac)d(cf)>
< (_c)(a)>
<c>

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:
Sid
10
30

S
<(_c)(ac)d(cf)>
<(df)cb>

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:
Sid
10
20

S
< (ac)d(cf)>
<(bc)(ae)>
10


30
40

<b>
<bc>


Gọi đệ quy hàm PrefixSpan(<ac>,2,S|<ac>) tìm được các phần tử thường xuyên sau:
<a>: 2, <b>: 3, <c>: 2
Tạo ra các mẫu phổ biến độ dài 3: <aca>, <acb>, <acc>
Xét mẫu phổ biến <ad>, có có S|<ad> như sau:
Sid
10
20
30

S
<(cf)>
<c(bc)(ae)>
<(_f)cb>

Gọi đệ quy hàm PrefixSpan(<ad>,2,S|<ad>) tìm được các phần tử thường xuyên sau:
<c>: 3,
Tạo ra các mẫu phổ biến độ dài 3: <adc>
Xét mẫu phổ biến <af>, có có S|<af> như sau:
Sid
30

S
< cb>

Không tìm được phần tử thường xuyên.
 Vậy những mẫu phổ biến khai phá được từ tiền tố <a> là:
<aa>, <ab>, <ac>, <ad>, <af>,
<a(bc)>, <a(bc)a>, <aba>, <abc>
<(ab)c>, <(ab)d>, <(ab)f>, <(ab)dc>

<acb>, <aca>, <acc>, <adc>
3. Xét mẫu tuần tự <b>, có S|<b> như sau:
Sid
10
20
30
40

S
<(_c)(ac)d(cf)>
<(_c)(ae)>
<(df)cb>
<c>

Gọi đệ quy hàm PrefixSpan(<b>,1,S|<b>) tìm được các phần tử thường xuyên sau:
<_c>: 2, <a>:2, <c>:2, <d>:2, <f>:2
Tạo ra các mẫu phổ biến có độ dài 2 như sau:
<(bc)>, <ba>, <bc>, <bd>, <bf>
11


Xét mẫu tuần tự <(bc)>, có S|<(bc)> như sau:
Sid
10
20

S
< (ac)d(cf)>
<(ae)>


Gọi đệ quy hàm PrefixSpan(<(bc)>,2,S|<(bc)>) tìm được các phần tử thường xuyên
sau: <a>:2
Tạo ra mẫu phổ biến độ dài 3 là: <(bc)a>
Xét mẫu tuần tự <bc>, có S|<bc> như sau:
Sid
10
30

S
<d(cf)>
<b>

Không tìm thấy phần tử phổ biến nào. Thuật toán dừng.
Xét mẫu tuần tự <ba>, có S|<ba> như sau:
Sid
10
20

S
<(_c)d(cf)>
<(_e)>

Không tìm thấy phần tử phổ biến nào. Thuật toán dừng.
Xét mẫu tuần tự <bd>, có S|<bd> như sau:
Sid
10
30

S
<(cf)>

<(_f)cb>

Gọi đệ quy hàm PrefixSpan(<bd>,2,S|<bd>) tìm được các phần tử thường xuyên sau:
<c>:2.
Tạo ra mẫu phổ biến độ dài 3 là: <bdc>
Xét mẫu tuần tự <bf>, có S|<bf> như sau:
Sid
30

S
<cb>

Không tìm thấy phần tử phổ biến nào. Thuật toán dừng.
Vậy những mẫu phổ biến được khai phá từ tiền tố <b> là :
<(bc)>, <ba>, <bc>, <bd>, <bf>
<(bc)a>, <bdc>
4. Xét mẫu tuần tự <c>, có S|<c> như sau:
Sid

S
12


10
20
30
40

<(ac)d(cf)>
<(bc)(ae)>

<b>
<bc>

Gọi đệ quy hàm PrefixSpan(<c>,1,S|<c>) tìm được các phần tử thường xuyên sau:
<a>: 2, <b>:3, <c>:3
Tạo ra các mẫu phổ biến có độ dài 2 như sau:
<ca>, <cb>, <cc>
Xét mẫu tuần tự <(ca)>, có S|<(ca)> như sau:
Sid
10
20

S
<(_c)d(cf)>
<(_e)>

Gọi đệ quy hàm PrefixSpan(<ca>,2,S|<ca>) không tìm được các phần tử thường xuyên
nào. Thuật toán dừng.
Xét mẫu tuần tự <(cb)>, có S|<(cb)> như sau:
Sid
20
40

S
<(_c)(ae)>
<(c)>

Gọi đệ quy hàm PrefixSpan(<cb>,2,S|<cb>) không tìm được các phần tử thường
xuyên nào. Thuật toán dừng.
Xét mẫu tuần tự <(cc)>, có S|<(cc)> như sau:

Sid
10
20

S
<d(cf)>
<(_c)(ae)>

Gọi đệ quy hàm PrefixSpan(<cc>,2,S|<cc>) không tìm được các phần tử thường xuyên
nào. Thuật toán dừng.
Vậy những mẫu phổ biến được khai phá từ tiền tố <c> là : <c>, <ca>, <cb>, <cc>
5. Xét mẫu tuần tự <d>, có S|<d> như sau:
Sid
10
20
30

S
<(cf)>
<c(bc)(ae)>
<(-f)cb>

Gọi đệ quy hàm PrefixSpan(<d>,1,S|<d>) tìm được các phần tử thường xuyên sau:
<b>: 2, <c>: 3
13


Tạo ra các mẫu phổ biến có độ dài 2 như sau: <db>, <dc>.
Xét mẫu tuần tự <(db)>, có S|<(db)> như sau:
Sid

20

S
<(_f)>

Gọi đệ quy hàm PrefixSpan(<db>,2,S|<db>) không tìm được các phần tử thường
xuyên nào.
Xét mẫu tuần tự <(dc)>, có S|<(dc)> như sau:
Sid
10
20
30

S
<(_f)>
<(bc)(ae)>
<b>

Gọi đệ quy hàm PrefixSpan(<dc>,2,S|<dc>) tìm được các phần tử thường xuyên như
sau: <b>:2.
Tạo ra các mẫu phổ biến có độ dài 3 như sau: <dcb>
Vậy những mẫu phổ biến được khai phá từ tiền tố <d> là: <db>, <dc>, <dcb>
6. Xét mẫu tuần tự <e>, có S|<e> như sau:
Sid
30
40

S
<(_f)(ab)d(cf)>
<(af)cbc>


Gọi đệ quy hàm PrefixSpan(<e>,1,S|<e>) tìm được các phần tử thường xuyên sau:
<a>:2, <b>:2, <c>:2, <f>:2
Tạo ra các mẫu phổ biến có độ dài 2 như sau: <ea>, <eb>, <ec>, <ef>
Xét mẫu tuần tự <(ea)>, có S|<(ea)> như sau:
Sid
30
40

S
<(_b)d(cf)>
<(_f)cbc>

Gọi đệ quy hàm PrefixSpan(<ea>,2,S|<ea>) tìm được các phần tử thường xuyên như
sau: <b>:2, <c>:2
Tạo ra các mẫu phổ biến có độ dài 3 như sau: <eab>, <eac>
Xét mẫu tuần tự <(eac)>, có S|<(eac)> như sau:
Sid
30
40

S
<(_f)>
<bc>
14


Gọi đệ quy hàm PrefixSpan(<eac>,3,S|<eac>) không tìm được phần tử thường xuyên
nào. Thuật toán dừng.
Xét mẫu tuần tự <(eab)>, có S|<(eab)> như sau:

Sid
30
40

S
<d(cf)>
<bc>

Gọi đệ quy hàm PrefixSpan(<eab>,3,S|<eab>) tìm được các phần tử thường xuyên như
sau: <c>:2
Tạo ra các mẫu phổ biến có độ dài 4 như sau: <eabc>
Xét mẫu tuần tự <(eb)>, có S|<(eb)> như sau:
Sid
30
40

S
<(df)cb>
<c>

Gọi đệ quy hàm PrefixSpan(<eb>,2,S|<eb>) tìm được các phần tử thường xuyên như
sau: <c>:2
Tạo ra các mẫu phổ biến có độ dài 3 như sau: <ebc>
Xét mẫu tuần tự <ebc>, có S|<ebc> như sau:
Sid
30

S
<b>


Gọi đệ quy hàm PrefixSpan(<ebc>,3,S|<ebc>) không tìm được các phần tử thường
xuyên nào. Thuật toán dừng.
Xét mẫu tuần tự <(ef)>, có S|<(ef)> như sau:
Sid
30
40

S
<(ab)(df)cb>
<cbc>

Gọi đệ quy hàm PrefixSpan(<ef>,2,S|<ef>) tìm được các phần tử thường xuyên như
sau: <b>:2, <c>: 2
Tạo ra các mẫu phổ biến có độ dài 3 như sau: <efb>, <efc>
Xét mẫu tuần tự <(efb)>, có S|<(efb)> như sau:
Sid
30
40

S
<(_b)(df)cb>
<c>

Gọi đệ quy hàm PrefixSpan(<efb>,3,S|<efb>) tìm được các phần tử thường xuyên như
sau: <c>: 2
15


Tạo ra các mẫu phổ biến có độ dài 4 như sau: <efbc>
Xét mẫu tuần tự <(efc)>, có S|<(efc)> như sau:

Sid
30

S
<b>

Gọi đệ quy hàm PrefixSpan(<efc>,3,S|<efc>) không tìm được các phần tử thường
xuyên nào. Thuật toán dừng.
Ta có các mẫu phổ biến được khai phá từ tiền tố <e>: <ea>, <eb>, <ec>, <ef>,<ebc>,
<efb>, <efc>, <efbc>
7. Xét mẫu tuần tự <f>, có S|<f> như sau:
Sid
30
40

S
<(ab)(df)cb>
<cbc>

Gọi đệ quy hàm PrefixSpan(<f>,1,S|<f>) tìm được các phần tử thường xuyên sau:
<b>:2, <c>: 2
Tạo ra các mẫu phổ biến có độ dài 2 như sau: <fb>, <fc>
Xét mẫu tuần tự <(fb)>, có S|<(fb)> như sau:
Sid
30
40

S
<(df)cb>
<c>


Gọi đệ quy hàm PrefixSpan(<fb>,2,S|<fb>) tìm được các phần tử thường xuyên như
sau: <c>
Tạo ra các mẫu phổ biến có độ dài 3 như sau: <fbc>
Xét mẫu tuần tự <(fc)>, có S|<(fc)> như sau:
Sid
30
40

S
<b>
<bc>

Gọi đệ quy hàm PrefixSpan(<fc>,2,S|<fc>) tìm được các phần tử thường xuyên như
sau: <b>
Tạo ra các mẫu phổ biến có độ dài 3 như sau: <fcb>
Ta có các mẫu phổ biến được khai phá từ tiền tố f: <fb>, <fc>, <fbc>, <fcb>
Vậy ta tìm tập các mẫu phổ biến như sau:
<a>, <aa>, <ab>, <ac>, <ad>, <af>, <(ab)>, <a(bc)>, <a(bc)a>, <aba>, <abc>,
<(ab)c>, <(ab)d>, <(ab)f>, <(ab)dc>, <acb>, <aca>, <acc>, <adc>,
16


<b>, <(bc)>, <ba>, <bc>, <bd>, <bf>, <(bc)a>, <bdc>,
<c>, <ca>, <cb>, <cc>,
<d>, <db>, <dc>, <dcb>,
< e>, <ea>, <eb>, <ec>, <ef>,<ebc>, <eab>, <eabc> <ecb>, <efb>, <efc>, <efbc>,
<f>, <fb>, <fc>, <fbc>, <fcb>
3.3. PseudoProjection
Những phân tích trên cho thấy chi phí lớn của PrefixSpan là cơ sở dữ liệu chiếu, ví

dụ, hình thành cơ sở dữ liệu chiếu dựa vào đệ quy. Thông thường, một số lượng lớn
các cơ sở dữ liệu chiếu sẽ được tạo ra trong khai thác mô hình tuần tự. Nếu các số
lượng và / hoặc kích thước của cơ sở dữ liệu chiếu có thể được giảm đi, hiệu suất khai
thác mô hình tuần tự có thể được cải thiện hơn nữa.
Một kỹ thuật mà có thể làm giảm số lượng và kích thước của cơ sở dữ liệu chiếu là
pseudoprojection. Ý tưởng này được phác thảo như sau: Thay vì thực hiện phép chiếu
vật lý, có thể đăng ký các chỉ mục (hoặc ký hiệu) của dãy tương ứng và vị trí bắt đầu
của các hậu tố chiếu trong dãy. Sau đó, một phép chiếu vật lý của một dãy được thay
thế bằng cách đăng ký một dãy ký hiệu và vị trí điểm đối chiếu chỉ mục . Pseudo
Projection giảm chi phí của phép chiếu đáng kể khi các cơ sở dữ liệu chiếu có thể đặt
trong bộ nhớ chính.
Phương pháp này dựa trên những quan sát sau đây: Đối với bất kỳ dãy s, mỗi chiếu
có thể được đại diện bởi một vị trí chiếu (một điểm chỉ số) thay vì sao chép toàn bộ
hậu tố như một dãy con chiếu. Hãy xem xét một chuỗi <a(abc)(ac)d(cf)>. Phép chiếu
vật lý có thể dẫn đến việc sao chép lặp đi lặp lại các hậu tố khác nhau của dãy. Một
con trỏ chỉ số vị trí có thể tiết kiệm phép chiếu vật lý của các hậu tố và, do đó, tiết
kiệm cả thời gian và không gian của việc tạo ra nhiều cơ sở dữ liệu chiếu vật lý.
Ví dụ 5 (Pseudoprojection). Đối với cùng một dãy cơ sở dữ liệu S trong bảng 1 với
min_sup = 2, mẫu tuần tự trong S có thể được khai thác bằng phương pháp chiếu
Pseudoprojection như sau:
Giả sử cơ sở dữ liệu chuỗi S trong Table1 có thể được tổ chức trong bộ nhớ chính.
Thay vì xây dựng cơ sở dữ liệu chiếu của <a>, có thể đại diện cho dãy hậu tố chiếu
sử dụng con trỏ (chuỗi id) và hiệu số(s) . Ví dụ, các phép chiếu của chuỗi s 1= (ac)d(cf)> liên quan đến phép chiếu <a> bao gồm hai mẩu thông tin:
1). con trỏ đến 1 s mà có thể là string_id s1
17


2). hiệu số (s), là 1 số nguyên đơn, như 2, nếu đó là 1 điểm chiếu đơn; và 1 tập
hợp số nguyên như là {2,3,6}, nếu đó là điểm chiếu đa. Mỗi một số hiệu được chỉ ra

tại vị trí của nó trong đó vị trí chiếu bắt đầu ở trong dãy.
Các cơ sở dữ liệu chiếu cho các tiền tố <a>, <b>, <c>, <d>, <f>, và <aa> được thể
hiện trong Bảng 3, trong đó $ chỉ ra tiền tố có một sự xuất hiện trong chuỗi hiện tại
nhưng hậu tố chiếu là trống rỗng, trong khi đó Ø chỉ ra rằng không có sự xuất hiện của
các tiền tố trong dãy tương ứng. Từ bảng 3, ta có thể thấy rằng cơ sở dữ liệu chiếu của
Pseudo thường mất ít không gian hơn nhiều so với phép chiếu vật lý của mình.
Sid
10
20
30
40

S
<a(abc)(ac)d(cf)>
<(ad)c(bc)(ae)>
<(ef)(ab)(df)cb>
<eg(af)cbc>

Pseudo Projection tránh sao chép 1 cách máy móc các hậu tố.Vì vậy, nó là hiệu quả
cả về thời gian chạy và không gian. Tuy nhiên, nó có thể không có hiệu quả nếu
Pseudo Projection được sử dụng cho việc truy cập dựa trên đĩa khi truy cập ngẫu
nhiên không gian đĩa là tốn kém. Dựa trên quan sát này, phương pháp tiếp cận đề nghị
là nếu dãy cơ sở dữ liệu ban đầu hoặc các cơ sở dữ liệu chiếu là quá lớn để đặt vào bộ
nhớ chính, phép chiếu vật lý nên được áp dụng, tuy, việc thực hiện cần được trao đổi
để pseudoprojection lần một khi cơ sở dữ liệu chiếu có thể đặt trong bộ nhớ chính.
Phương pháp này được thông qua trong việc thực hiện PrefixSpan của chúng tôi.
Chú ý rằng Pseudo Projection hoạt động hiệu quả như PrefixSpan, nhưng không
nhiều như FreeSpan. Điều này là bởi vì đối với PrefixSpan, một vị trí ký hiệu xác định
rõ ràng các hậu tố và do đó dãycon chiếu dự. Tuy nhiên, FreeSpan, kể từ khi bước tiếp
theo mô hình tăng trưởng có thể ở cả hướng phía trước và phía sau, cần phải đăng ký

nhiều thông tin về các vị trí có thể gia hạn để xác định phần còn lại của dãy con chiếu.
Do đó, chúng ta chỉ tìm hiểu các kỹ thuật chiếu giả cho PrefixSpan.
4. Kết quả thực nghiệm và phân tích
5.Mở rộng và thảo luận
6.Kết luận

18



×