khai pha luat tuan tu

27
Chương 2 . CƠ SLÝ THUYT 2.1 Gii thiu Trong lĩnh vc khai thác dliu trên CSDL chui, khai thác mu tun tlà bài toán đầu tiên được đề xut bi Agrawal và Srikant vào năm 1995 [3] và đã thu hút nhiu nghiên cu [4], [5], [10], [17], [18], [20], [23]. Cho CSDL chui, khai thác mu tun tlà xác định nhng mu mà sxut hin ca chúng trong CSDL tha ngưỡng htrti thiu. Khai thác mu tun tđược ng dng trong nhiu lĩnh vc như: phân tích thtrường, phân tích mu truy cp web, dđoán nhu cu mua sm ca khách hàng… Lut tun tđược sinh tmu tun t, nó biu din mi quan hgia hai lot skin, lot skin này sxy ra sau lot skin kia. Lut tun tmrng khnăng sdng và ý nghĩa biu đạt ca mu tun t, thhin tri thc tim n ca dliu tun t. 2.2 Ý nghĩa lut tun tLut tun tbiu din mi quan hgia các mu tun ttheo thi gian. Có thcoi lut tun tlà mrng tnhiên ca mu tun t, tương tnhư lut kết hp là mrng tnhiên ca tp phbiến [2]. Mt lut tun tbiu thdưới dng XY, nghĩa là trong các chui dliu, nếu mu X xut hin thì mu Y cũng xut hin theo sau mu X vi độ tin cy cao. So vi các mu tun t, các lut giúp ta hiu tt hơn vthtthi gian thhin trong CSDL chui. Ví d, mt người mua đĩa phim Star Wars phn 4 smua tiếp phn 5 và phn 6. Như vy mu mua hàng (4, 5, 6) là mu thhin hot động mua. Tuy nhiên, trong thc tế mt ca hàng bán đĩa có hàng trăm khách hàng vi sthích khác nhau. Do đó, mu (4, 5, 6) có xu hướng xut hin vi độ htrthp. Khai thác vi độ htrthp vn trvcác mu, tuy nhiên snhiu mu sai và không thích hp. Nếu như sdng lut, có thloi bđi các mu - 10 -

Upload: pham-thuy-kieu

Post on 27-Oct-2015

126 views

Category:

Documents


6 download

TRANSCRIPT

Page 1: Khai Pha Luat Tuan Tu

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 -

Page 2: Khai Pha Luat Tuan Tu

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 -

Page 3: Khai Pha Luat Tuan Tu

chuỗi là tổng số item có trong chuỗi, ký hiệu là . Chuỗi có chiều dài k còn

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

∑=

=n

jisl

1

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 { }( )D i isup f S D f S= ∈ ⊆ . Độ 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 -

Page 4: Khai Pha Luat Tuan Tu

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 -

Page 5: Khai Pha Luat Tuan Tu

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 -

Page 6: Khai Pha Luat Tuan Tu

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ợ

1 ⟨(A)⟩: 4, ⟨(B)⟩: 5, ⟨(C)⟩: 4

⟨(AB)⟩: 4, ⟨(BC)⟩: 3

2

⟨(A)(B)⟩: 3, ⟨(A)(C)⟩: 3, ⟨(AB)(B)⟩: 3, ⟨(AB)(C)⟩: 3

⟨(B)(A)⟩: 3, ⟨(B)(B)⟩: 5, ⟨(B)(C)⟩: 4,

⟨(B)(AB)⟩: 3, ⟨(B)(BC)⟩: 3

3 ⟨(A)(B)(B)⟩: 3, ⟨(A)(B)(C)⟩: 3, ⟨(B)(B)(B)⟩: 4, ⟨(B)(B)(C)⟩: 4,

⟨(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ự,

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

Độ tin cậy

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 -

Page 7: Khai Pha Luat Tuan Tu

⟨(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%

⟨(A)(B)⟩→⟨(B)⟩, 3/3×100% = 100%

Có Có

⟨(A)(B)(C)⟩: 3 ⟨(A)⟩→⟨(B)(C)⟩, 3/4×100% = 75%

⟨(A)(B)⟩→⟨(C)⟩, 3/3×100% = 100%

Có Có

⟨(B)(B)(B)⟩: 4 ⟨(B)⟩→⟨(B)(B)⟩, 4/5×100% = 80%

⟨(B)(B)⟩→⟨(B)⟩, 4/5×100% = 80%

Có Có

⟨(B)(B)(C)⟩: 4 ⟨(B)⟩→⟨(B)(C)⟩, 4/5×100% = 80%

⟨(B)(B)⟩→⟨(C)⟩, 4/5×100% = 80%

Có Có

⟨(AB)(B)(B)⟩: 3 ⟨(AB)⟩→⟨(B)(B)⟩, 3/4×100% = 75%

⟨(AB)(B)⟩→⟨(B)⟩, 3/3×100% = 100%

Có Có

⟨(AB)(B)(C)⟩: 3 ⟨(AB)⟩→⟨(B)(C)⟩, 3/4×100% = 75%

⟨(AB)(B)⟩→⟨(C)⟩, 3/3×100% = 100%

Có Có

⟨(B)(B)(BC)⟩: 3 ⟨(B)⟩→ ⟨(B)(BC)⟩: 3/5×100% = 60%

⟨(B)(B)⟩→ ⟨(BC)⟩: 3/5×100% = 60%

Không 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 -

Page 8: Khai Pha Luat Tuan Tu

- 17 -

• 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

Đối tượng Sự kiện

1 A, B, C

2 A, D, E, F

3 B, E

Biểu diễn dọc

Sự kiện Đối tượng

A 1, 2

B 1, 3

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.

Page 9: Khai Pha Luat Tuan Tu

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 -

Page 10: Khai Pha Luat Tuan Tu

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

đủ 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.

∑=

−=n

i

ni

nC1

12

Đố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 -

Page 11: Khai Pha Luat Tuan Tu

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 -

Page 12: Khai Pha Luat Tuan Tu

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 -

Page 13: Khai Pha Luat Tuan Tu

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ũ,

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.

1 21 2 ...m m mr

rn p p p=

Cho hai số nguyên a, b được biểu diễn dưới dạng chuẩn và

. Ước chung lớn nhất của hai số a và b kí hiệu

1

iaa

a

mr

i ia p

== ∏

( , )i

n a b p=1

ibb

b

mr

i ib

== ∏ p im

iucl ∏ ,

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 -

Page 14: Khai Pha Luat Tuan Tu

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 -

Page 15: Khai Pha Luat Tuan Tu

0000 (1)

1000 (2) 0100 (3)

0110 (15) 1001 (14) 1010 (10) 1100 (6)

0001 (7) 0010 (5)

0101 (21) 0011 (35)

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

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 {3, 7} 2G

= = .

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 NmG

= khối liên tiếp, trong

- 24 -

Page 16: Khai Pha Luat Tuan Tu

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

một tập con . S G⊆

[ ]iB jLấy 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 [ ] [ ]{ }( , ) Bi jiv B G G j= ⊗

1 0 0 1.3 .5 .7 2.7 14

.

Ví dụ, cho Bi = 1001và G ={2, 3, 5, 7} thì ( , ) 2iv B G = = = . Nếu

thì . 0000iB = ( ,iv B ) 1 G =

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à { }( , ) ( , ) :1iv B G v B G i m= ≤ ≤ . Có thể viết tắt là

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

có độ dài

( , )iv B G ( )iv B

( , )v B G ( )v B

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 { }1( ) 2, 7 14v B = ⊗ =

1( )v B {= ⊗ 2, 7} 14 = , và 2( ) 2, 3, 5} 30v B { = = 3( ) 3} 3v B {= ⊗ =

14, 30, 3}{

. Do đó, khối nguyên

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

tác đảo ngược như sau { }1 1(1 14) (30) (3)v v− 1−( 14, 30, 3 )v v− − 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, ( ) [ ]

1, A

A

j fA j

j f≤⎧

= ⎨ >⎩>

- 25 -

Page 17: Khai Pha Luat Tuan Tu

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ì

Af = 3 và ( )A>

( (v

= 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í dụ,

mà . Do đó,

theo định nghĩa trên ta có ({ .

( ( )) (( ) )v A v A=>

1111) (1111) {7,v({5, 15, 3}) =>

>

(( ) ) 001001100100) ) (000111111111) (0001) ( 210, 210}v A v v v = = = => >

( ( )) 001001100100)) ({ (0010) (0110) (0100)})v A v v v= => > >

5, 15, 3}) (7, 210, 210) =>

((v

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 -

Page 18: Khai Pha Luat Tuan Tu

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 -

Page 19: Khai Pha Luat Tuan Tu

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 -

Page 20: Khai Pha Luat Tuan Tu

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 ( ) i Gvi Sssup s v

∈= ∑ . 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 -

Page 21: Khai Pha Luat Tuan Tu

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)(A)⟩

⟨(B)⟩ ⟨(C)⟩ ⟨(A)⟩

⟨(A)(A)(A)⟩

⟨(A)(AB)⟩

⟨(A)(A)(C)⟩

⟨(A)(A)(B)⟩

⟨(A)(AC)⟩

⟨(A)(B)⟩ ⟨(AB)⟩

⟨(A)(B)(A)⟩

⟨(A)(BC)⟩

⟨(A)(B)(B)⟩

⟨(A)(B)(C)⟩

⟨(AB)(A)⟩

⟨(AB)(C)⟩

⟨(AB)(B)⟩

⟨(ABC)⟩

⟨(A)(C)⟩ ⟨(AC)⟩

⟨(B)(A)⟩⟨(B)(B)⟩

⟨(B)(C)⟩ ⟨(BC)⟩

Mở rộng theo Itemset

Mở rộng theo chuỗi

1-sequence

2-sequence

3-sequence

k-sequence…

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 -

Page 22: Khai Pha Luat Tuan Tu

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

1(30, 2) 11101000v − =

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à P1

B ={210, 2} thì ucln(P1⟨(A)⟩, P1

B)

= {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à:

( ( ) ) 14 2G

sup AB = = .

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

- 31 -

Page 23: Khai Pha Luat Tuan Tu

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à P1

B ={210, 2} thì 1 1( )(( ) , ) ({14, 3} , {210, 2}) ({105, 210}, {210, 2})BAucln P P ucln ucln = => >

=.

- 32 -

Page 24: Khai Pha Luat Tuan Tu

(105, 210), (210, 2)} {105, 2}{ucln ucln = = Mà 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)⟩.

1(105,2) 01111000v− =

• 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 -

Page 25: Khai Pha Luat Tuan Tu

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 2G

= 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 -

Page 26: Khai Pha Luat Tuan Tu

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 -

Page 27: Khai Pha Luat Tuan Tu

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 -