Quét CSDL một lần để xây dựng CSDL bitmap dọc (xem bảng 3.2), đồng thời đếm độ hỗ trợ của các item đơn.
Với mỗi item phổ biến s, nó gọi thủ tục “SEARCH”. Thủ tục này xuất ra mẫu〈{s}〉và đệ quy dò tìm các mẫu ứng viên bắt đầu bằng tiền tố〈{s}〉.
Thủ tục SEARCH(hình 3.2) nhận bốn tham số đầu vào là: một mẫu tuần tự
pat, hai tập các items Sn, In được dùng để nối thêm vào mẫu pat nhằm tạo cácứng viên và ngưỡngminsup. Sn là tập các items được nối thêm vào mẫu
pat bởi việc mở rộng chuỗi s-extension. Kết quả của việc mở rộng
s-extension giữa một mẫu 〈i1, i2,…, in〉với itemx là 〈i1, i2,…, in,{x}〉 [4]. In
SPAM(CSDL chuỗi D, minsup)
1. Quét CSDL đểtạo V(D)và xác định Sinit(danh sách các items phổbiến). 2. FOR each item s∈Sinit,
3. SEARCH(〈s〉, Sinit, tập các items từSinitcó thứtựtừ điển lớn hơns, minsup).
SEARCH(pat, Sn, In, minsup)
1. Đầu ra: mẫu pat.
2. Stemp:= Itemp:=
3. FOR each item i∈Sn,
4. IF mởrộng s-extension của pat là phổbiến THEN Stemp:= StempU {i}.
5. FOR each item j∈Stemp,
6. SEARCH(mởrộng s-extension của pat với j, Stemp, các phần tửtrong Stemp
lớn hơnj, minsup).
7. FOR each item i∈In,
8. IF mởrộng i-extension của pat là phổbiến THEN Itemp := ItempU {i}.
9. FOR each item j∈Itemp,
10. SEARCH(mởrộng i-extension của pat với j, Stemp , tất cảcác phần tửtrong
là tập các items được nối thêm vào mẫu pat bởi việc mở rộng itemset
i-extension. Kết quả của việc mở rộng i-extension giữa một mẫu 〈i1, i2,…,
in〉với itemx là〈i1, i2,…, inU {x}〉 [4].
Hình3.3 Mở rộng s-extension
Hình3.4 Mở rộng i-extension
Với mỗi ứng viên pat’ được tạo ra bởi mở rộng s-extension và i-extension,
& result S-step process & result
thủ tục SEARCH tính toán bit vector bv(pat’) bằng cách thực thi một phép
logic AND [4] giữa các bit vector của pat và của item được nối thêm vào. Độ hỗ trợ của ứng viên được tính mà không cần phải quét lại CSDL bằng cách đếm số bit 1 đại diện cho các chuỗi phân biệt trong bit vectorbv(pat’). Ví dụ trong hình 3.3,〈{a}, {b}〉có độ hỗ trợ là 2 (do có hai bit 1 cùng nằm trên một chuỗi nên chỉ tính là 1).
Nếu mẫu pat’ là phổ biến thì nó được sử dụng trong lời gọi đệ quy tới thủ tục SEARCH để tạo ra các mẫu bắt đầu bằng tiền tố pat’. Chú ý rằng trong lời gọi đệ quy, chỉ những items có thể dẫn đến một mẫu phổ biến bởi việc mở rộng (s-extension và i-extension) mẫu pat thì mới được xem xét cho việc mở rộngpat’ [4]. Những mẫu không phổ biến thì không được mở rộng bởi thủ tục SEARCH bởi vì tính chất Apriori (bất kỳ mẫu tuần tự không phổ biến nào đều không thể được mở rộng để trở thành một mẫu tuần tự phổ biến).
3.2.3 Các chiến lược tăng hiệu quả khai thác dữ liệu
Chiến lược 1:Tăng ngưỡng hỗtrợ đểcắt tỉa không gian tìm kiếm
Đây cũng là ý tưởng chính của thuật toán TKS:
Đặtminsup = 0.
Tìm kiếm các mẫu tuần tự phổ biến bằng cách áp dụng thủ tục SPAM Search.
Dùng danh sách Lđể chứa các mẫu phổ biến đã tìm được cho tới hiện nay
(Lđược sắp xếp theo độ hỗ trợ).
Khi có đúngk mẫu được tìm thấy, tăng minsup lên bằng độ hỗ trợ của mẫu phổ biến có độ hỗ trợ thấp nhất trongL.
Sau đó, mỗi khi một mẫu phổ biến được tìm thấy và thêm vào L thì loại bỏ các mẫu có độ hỗ trợ thấp nhấttrong L cho tới khi L chỉ chứa đúng k mẫu, đồng thời tăng minsup lên bằng độ hỗ trợ của mẫu có độ hỗ trợ thấp nhất
Dừng khi không thể tạo được thêm một mẫu nào nữa.
Nhận xét: Có thể dễ dàng thấy rằng thuật toán này là đúng đắn và đầy đủ. Tuy nhiên, thuật toán có hiệu quả kém về thời gian thực thi bởi vì không gian tìm kiếm quá lớn, cần phải sử dụng thêm các chiến lược bổ sung để nâng cao hiệu quả của thuật toán.
Chiếnlược 2: Mởrộng các mẫu triển vọng nhất
Ý tưởng: Nếu các mẫu có độ hỗ trợ cao được tìm thấy sớm hơn thì nó cho phép thuật toán tăng minsup nhanh hơn. Vì vậy, cắt tỉa được phần không gian tìm kiếm lớn hơn.
Chiến lược: Thêm vào biến R chứa k mẫu có độ hỗ trợ cao nhất và có thể được sử dụng để tạo ra nhiều mẫu khác.Mẫu có độ hỗ trợ cao nhất luôn ở trongR và luôn
được mở rộng đầu tiên.
Mã giả của thuật toán TKS phiên bản kếthợp chiến lược 1 và 2 được trình bày ở hình 3.5
Hình3.5 Thuật toán TKS
TKS(CSDL chuỗi D, k)
1. R := Ø. L := Ø. minsup := 0.
2. Quét CSDLđểtạo V(D).
3. Cho Sinitlà danh sách các items trong V(D).
4. FOR each item s∈Sinit, IF s là phổbiến tương ứng với bv(s) THEN
5. SAVE(s, L, k, minsup).
6. R := R U {<s, Sinit, các items từSinitlớn hơns theo thứtựtừ điển>}. 7. WHILE∃<r, S1, S2>∈R AND sup(r) ≥minsup DO
8. Chọn bộba <r, S1, S2> với mẫu rcó độhỗtrợcao nhất trong R. 9. SEARCH(r, S1, S2, L, R, k, minsup). 10. Loại bỏ<r, S1, S2> từR. 11. Loại bỏtừR tất cảcác bộ<r, S1, S2>∈R | sup(r) < minsup. 12. END WHILE 13. RETURN L.
Hình3.6 Thủ tục tạo ứng viên đãđược sửa đổi
Hình3.7 Thủ tục SAVE
Thực hiện: Đầu tiên, thuật toán TKS khởi tạo các biến R, L là các tập rỗng và đặtminsup = 0 (dòng 1). Sau đó, quét CSDL chuỗiDđể tạo raV(D) (dòng 2), đồng thời một danh sách của tất cả các items trong D được tạo ra (Sinit) (dòng 3). Với mỗi item s, độ hỗ trợ của nó được tính toán dựa trên bit vector bv(s) của nó trong
V(D). Nếu item là phổ biến thì thủ tục SAVE được gọi để lưu〈s〉vào L, với〈s〉và L
SAVE(r, L, k, minsup)
1. L := L U {r}.
2. IF |L| > k THEN
3. IF sup(r) > minsup THEN
4. WHILE |L| > k AND∃s∈L | sup(s) = minsup, Loại bỏs từL.
5. END IF
6. Đặt minsup bằng độhỗtrợthấp nhất của các mẫu trong L.
7. END IF
SEARCH(pat, Sn, In, L, R, k, minsup)
1. Stemp:= Itemp:= Ø 2. FOR each item i∈Sn,
3. IF mởrộng s-extension của pat là phổbiến THEN Stemp := StempU {i}.
4. FOR each item j∈Stemp,
5. SAVE(s-extension của pat với j, L, k, minsup).
6. R := R U {<s-extension của pat với j, Stemp, tất cảcác phần tửtrong Stemp lớn
hơnj>}.
7. FOR each item i∈In,
8. IF mởrộng i-extension của pat là phổbiến THEN Itemp := ItempU {i}.
9. FOR each item j∈Itemp,
10. SAVE(i-extension của pat với j, L, k, minsup).
11. R := R U {<s-extension của pat với j, Stemp , tất cảcác phần tửtrong Itemplớn
là các đối số đầu vào (dòng 4 và 5). Ngoài ra, bộ ba <s, Sinit, các items từ Sinit lớn hơns theo thứ tự từ điển> được lưu vàoRđể chỉ định rằng〈s〉có thể được mở rộng đểtạo các ứng viên (dòng 6). Sau đó, một vòng lặp WHILE được thực thi. Nó chọn đệ quybộ ba (tuple) đại điện cho mẫurcó độ hỗ trợ cao nhất trongR sao cho sup(r)
≥ minsup (dòng 7 và 8). Tiếp đó, thuật toán sử dụng bộ ba để tạo ra các mẫu bằng cách gọi thủ tục SEARCH trong hình 3.6 (dòng 9) và loại bỏ bộ ba khỏi R ngay khi
tất cả các bộ ba cho các mẫu đã trở nên không phổ biến (dòng 11). Ý tưởng của vòng lặp WHILE là luôn mở rộng các mẫu có độ hỗ trợ cao nhất đầu tiên bởi vì nó hầu như luôn tạo ra các mẫu có độ hỗ trợ cao và vì vậy, cho phép tăng minsup
nhanh hơn để cắt tỉa nhiều không gian tìm kiếm hơn. Vòng lặp kết thúc khi không có mẫu nào trong R có độ hỗ trợ cao hơn minsup. Lúc này, L chứa k mẫu tuần tự phổ biến (dòng 13).
Thủ tục SAVE được trình bày trong hình 3.7. Nhiệm vụ của nó là tăng minsup
và cập nhật danh sáchL khi có một mẫu phổ biến mớirđược tìm thấy. Đầu tiên, thủ tục SAVE thêm mẫu r vào L (dòng 1). Sau đó, nếu L chứa nhiều hơn k mẫu và độ hỗ trợ cao hơn minsup thì các mẫu trong L có độ hỗ trợ bằng với minsup có thể được loại bỏ cho đến khi chỉ cònđúngk mẫu được giữ lại (dòng 3, 4, 5). Cuối cùng,
minsup được tăng lên bằng độ hỗ trợ nhỏ nhất của các mẫu trong L (dòng 6). Bằng
cách này, k mẫu tuần tự phổ biến tìm thấy được lưu giữ trongL.
Nhận xét:Chọn cấu trúc dữ liệu cho L và R cũng rất quan trọng, nó ảnh hưởng đến hiệu suất của thuật toán.Để nâng cao hiệu quả của thuật toán TKS, các tậpR và L nên được thực hiện bằng các cấu trúc dữ liệu hỗ trợ thêm, xóa và tìm kiếm phần tử lớn nhất/nhỏ nhất một cách hiệu quả. Trong phần thi công của mình, tác giả sử dụng Fibonacci heap choL và R với chi phí cho việc thêm và tìm kiếm phần tử lớn nhất/nhỏ nhất là O(1), xóa là O(log(n)).
Chiến lược 3: Loại bỏcác items không phổbiến trong khi tạoứng viên
Ý tưởng: Chúng ta thấy rằng một chi phí lớn cho việc tạo ứng viên là thực thi các phép giao (AND) bit vector bởi vì các bit vector có thể rất dài đối với các bộ dữ liệu lớn. Chiến lược này cải thiện thời gian thi hành của thuật toán bằng cách giảm
số phép giao giữa các bit vector được thực thibởi thủ tục SEARCH.
Thực hiện:
Dùng một bảng băm để lưu các itemsđã trở nên không phổ biến khi minsup
được tăng lên bởi thuật toán. Điều này được thực hiện trong dòng 4 của thủ tục SAVE bằng cách thay thế “Loại bỏ s từL” bằng “Loại bỏ s từL và IF s
chứa một item đơnTHENđặtnó vào bảng bămchứacác items bị loại bỏ”.
Mỗi khi thủ tục SEARCH xem xét mở rộng (s-extension và i-extension) một mẫu tuần tự với một item, item đó sẽ được kiểm tra trong bảng băm. Nếu bảng băm chứa item đó thì item đó sẽ bị bỏ qua (mẫu mở rộng sẽ không được tạo ra). Điều này cho phép tránh thực hiện các phép giao bit vector tốn kém trên các item này.
Tích hợp chiến lược này không làm ảnh hưởng đến kết quả của thuật toán bởi vì nối thêm một item không phổ biến vào một mẫu tuầntự không thể tạo ra một mẫu tuần tự phổ biến.
Chiến lược 4: Cắt tỉaứng viên với Precedence Map (bản đồthứtự ưu tiên)
Ý tưởng: Đưa ra một cấu trúc dữ liệu mới gọi là Precedence Map (PMAP) cho
biết số lần mà mỗi item xuất hiện sau mỗi item khác bởi s-extension và i-extension.
Mỗi lần mở rộng một mẫu với một item, thuật toán sẽ tra vào PMAP để phát hiện sớm mẫu mở rộng là không phổ biến nhằm tránh thực hiện phép giao bit vector không cần thiết và tốn nhiều chi phí. Từ đó cải thiện được thời gian thực thi của thuật toán.
Cấu trúcPMAP:
Item iđược trình bày bằng 1 danh sách các bộ ba theo mẫu<j, m, x> với m
là số chuỗi chứa cả i, j và j xuất hiện sau i trong CSDL bởix-extension (x {i, s})
Item i xuất hiện sau item j trong chuỗi〈A1, A2, …, An〉bởis-extension nếu j Axvà iAyvớix, y là số nguyên và 1≤x < y≤n.
Item i xuất hiện sau item j trong chuỗi 〈A1, A2, …, An〉bởi i-extension nếu i, jAxvớix là số nguyên, 1≤x≤n và i lớn hơnj theo thứ tự từ điển.
Ví dụ:Cấu trúc dữ liệuPMAPđược xây dựng cho CSDLD4 ở bảng3.1
Bảng3.3 Cấu trúc dữ liệu PMAP được xây dựng từ CSDL chuỗi D4
Item Pair of type <item, support>
a <a,1,s> <b,2,s>, <b,2,i>, <c,2,s>, <d,1,i>, <e,2,s>, <e,1,i>, <f,2,s>, <f,1,i>, <g,1,s>
b <a,1,s>, <b,1,s>,<c,1,s>, <e,2,s>, <e,1,i>, <f, 4,s>, <f,1,i>, <g,2,s> c <a,1,s>, <b,1,s>, <e,2,s>, <f,2,s>, <g,1,s> d <a,1,s>, <b,1,s>,<c,1,s>, <e,1,s>, <f,1,s> e <f,1,i> f <e,2,s>, <g,2,i> g <e,1,s>
Trong ví dụ này, item f liên kết với bộ ba <e, 2, s> vì e xuất hiện sau f bởi
s-extension trong 2 chuỗi, item f liên kết vớibộ ba<g, 2, i> vì g xuất hiện sau f bởi
i-extension trong 2 chuỗi.
Thực hiện:
PMAP được xây dựng chỉ với 1 lần quét CSDL và được xây dựng trong lần quét cơ sở dữ liệu thứ hai để các item không phổ biến có thể được loại trừ khỏiPMAP nhằm làm giảm kích thước củanó.
Thực hiện PMAP bằng một bảng băm (hash table) chứa các tập băm (hash set) để tránh lãng phí bộ nhớ khi làm việc với các tập dữ liệu thưa (sparse datasets).
Cấu trúc PMAP được sử dụng trong thủ tục SEARCH. Trước khi tạo ra một ứng viên bằng cách thêm mộtitem x vào mộtmẫupat, kiểm tra trongPMAP.
Nếu ∃a∈pat mà a liên kết vớimộtbộ<x, m, s> (s-extension) hoặc<x, m, i> (i-extension) và m < minsup thì mẫu mở rộng sẽ là mẫu không phổ biến
và sẽ không được tạo ra.
Điều này giúp tránh được việc thực thi phép giao bit vector của x và pat. Item x có thể được loại bỏ khỏiStemp(Itemp).
Ví dụ: Cho cấu trúc dữ liệu PMAP ở bảng 3.3, xét mẫu 〈{a}, {b}〉 và item c.
Vớiminsup = 2,〈{a}, {b}, {c}〉là mẫu không phổ biến do itemb liên kết với bộ ba
<c, 1, s>
3.2.4 Nhận xét
Mặc dù đã áp dụng một số chiến lược để nâng cao hiệu quả khai thác dữ liệu, tuy nhiên, thuật toán TKS vẫn còn nhược điểm là sử dụng bit vector có kích thước cố định vốn đòi hỏi rất nhiều bộ nhớ để lưu trữ và tiêu tốn rất nhiều thời gian để thực thi các phép giao bit vector. Để cải tiến thuật toán, luận văn này đề xuất sử dụng Roaring bitmap thay thế cho bit vector có kích thước cố định nhằm làm giảm bộ nhớ được sử dụng và giảm thời gian thực thi phép giao trên các bit vector này.
3.3 ROARING BITMAP
3.3.1 Giới thiệu
Một bitmap (còn gọi là bitset hay chuỗi bit – bit vector) là một mãng nhị phân mà chúng ta có thể xem như là một thể hiện nhỏ gọn và hiệu quả của một tập số
nguyên S. Cho một bitmap có n bits, bit thứ i được đặt là 1 nếu số nguyên thứ i
trong khoảng [0, n] tồn tại trong tập này. Ví dụ, các tập {3, 4, 7} và {4, 5, 7} có thể được lưu trữ dưới dạng nhị phân như 10011000 và 10110000. Chúng ta có thể tính toán phép giao hoặc phép hội giữa hai danh sách tương ứng này bằng các phéptoán trên bit như AND, OR trên các bitmap (ví dụ trong trường hợp này là 10011000 và 10110000).
Khi số phần tử (số bit 1) của S là khá lớn so với kích thướt n (ví dụ |S| > n/64
trên các bộ xử lý 64 bit), Các bitmap thường được thực hiện bằng các cấu trúc dữ liệu có thể so sánh được khác như mảng (array), tập băm (hash set) hoặc cây (tree). Tuy nhiên, trên các bitmap có mật độ thấp hơn (n/10000 < |S| < n/64) thì các bitmap
nén có thể được ưa thích hơn.
Roaring bitmap là một dạng bitmap nén, nó phân chia vùng [0, n] thành nhiều đoạn và lưu trữ các đoạn có mật độ bit 1 dày và thưa khác nhau. Các số nguyên 32 bit được lưu trữ trong một cấu trúc dữ liệu chỉ mục 2 cấp hiệu quả và nhỏ gọn. Các đoạn có mật độ dày được lưu bằng các bitmap, các đoạn có mật độ thưa thì sử dụng các mảng đóng gói chứa các số nguyên 16 bit (ví dụ {0, 62, 124, …}). Roaring bitmap chỉ sử dụng 16 bit cho mỗi số nguyên và có khả năng truy cập nhanh một phần tử ở vị trí bất kỳ. Trong các thực nghiệm trên dữ liệu thực tế, Roaring bitmap thực thi nhanh hơn và nén tốt hơn các loại bitmap nén khác nhiều lần [16].
Một thành phần chính trong hiệu suất của Roaring bitmap là các chỉ thị xử lý đếm bitmới(chẳng hạn nhưpopcnt) hiện đã có sẵn trong các bộ xử lý của máy tính để bàn trong thời gian gần đây (2008). Các chỉ thị mới này cho phép tính toán nhanh mật độ của các đoạn mới và trích ra một cách hiệu quả vị trí của các bit 1