Thuật toán Haipha

Một phần của tài liệu (LUẬN văn THẠC sĩ) tìm hiểu một số thuật toán khai phá tập mục lợi ích cao và ứng dụng (Trang 40)

2.2.1 Cơ sở lý thuyết

Trong [7], Y.Liu đưa ra khái niệm lợi ích của một tập mục tính theo lợi ích của các giao tác chứa nó, gọi là lợi ích TWU (Transaction Weighted Utility).

Định nghĩa 2.10: (Transaction Weighted Utility-TWU). Lợi ích TWU của tập

mục X, ký hiệu twu(X), là tổng lợi ích của tất cả các giao tác chứa X trong

CSDL, tức là:

twu(X) = ∑𝑇𝑞 ∈ 𝐷𝐵 ∧ 𝑇𝑞 ⊇𝑋 𝑡𝑢(𝑇𝑞) Nhận xét: vì u(X,Tq) ≤ tu(Tq) nên u(X) ≤ twu(X)

Có thể coi twu(X) như là cận trên của u(X). Với ngưỡng lợi ích minutil, nếu X là tập mục lợi ích cao thì X cũng là tập mục lợi ích TWU cao vì twu(X) ≥

u(X)≥ minutil , ngược lại, nếu X là tập mục lợi ích TWU thấp thì X cũng là tập

mục lợi ích thấp.

- Ràng buộc lợi ích TWU có tính chất phản đơn điệu, tức là: Mọi tập mục cha của tập mục lợi ích TWU thấp cũng là tập mục lợi ích TWU thấp. Do vậy, nếu X là tập mục lợi ích TWU thấp, twu(X) < minutil , thì tập X và mọi tập cha của X đều là tập mục lợi ích thấp, có thể loại bỏ chúng trong quá trình khai phá tập mục lợi ích cao.

- Tập các tập mục lợi ích cao chứa trong tập các tập mục lợi ích TWU cao. Điều này có nghĩa là, nếu ta tìm được tập các tập mục lợi ích TWU cao thì ta chỉ cần tìm các tập mục lợi ích cao trong tập đó. Do tập mục lợi ích TWU cao có tính chất phản đơn điệu nên có thể sử dụng các phương pháp khai phá của tập mục phổ biến để tìm các tập mục lợi ích TWU cao.

2.2.2 Các bước thực hiện của thuật toán Hai pha

Thuật toán gồm hai pha [7]:

Pha thứ 1. Tìm tất cả các tập mục có lợi ích theo giao tác cao với ngưỡng

minutil

Pha thứ 2. Phát hiện tất cả các tập mục lợi ích cao trong số các tập mục

có lợi ích theo giao tác cao.

Khi đã khám phá được tập tất cả các tập mục có lợi ích theo giao tác thì việc duyệt các tập mục lợi ích cao trong số các tập mục này là rất đơn giản, chỉ cần duyệt CSDL một lần duy nhất.

Thuật toán Hai pha: Tìm tất cả các tập mục lợi ích cao với ngưỡng cho trước Input: CSDL giao tác DB, hàm lợi ích f, ngưỡng lợi ích minutil.

Output: Tập H bao gồm các tập mục lợi ích cao. Method:

1. for mỗi giao tác T ∈ DB

2. Tính lợi ích tu(T) 3. end for ;

// Pha thứ 1: Phát hiện các tập mục lợi ích theo giao tác cao.

4. k=1;

5. WHk = {i / i I and twu(i) ≥ minutil };

//Phát hiện 1-tập mục có lợi ích theo giao tác.

6. repeat

7. k = k+1;

8. Ck = apriori_gen(WHk-1);// Tạo các tập mục ứng viên.

9. for mỗi giao tác T ∈ DB do

10. Ct = subset(Ck, T) ; //Nhận diện các ứng viên thuộc T.

11. for mỗi ứng viên c ∈ Ct do 12. twu(c) = twu(c) + tu(T);

// Cộng thêm lợi ích của giao tác T vào lợi ích theo giao tác của c.

13. end for; 14. end for;

15. WHk = {c/c ∈ Ck twu(c) ≥ minutil}

//Tuyển chọn các k-tập mục có lợi ích theo giao tác cao.

16. until Ck = ∅; 17. WH = WHk ;

// Pha thứ 2: Phát hiện tập mục lợi ích cao.

18. for mỗi giao tác T ∈ DB do

19. Ct = subset(WH, T) ;

//Nhận diện các tập mục có lợi ích theo giao tác cao thuộc T.

20. For mỗi ứng viên s ∈ Ct do 21. u(s)=u(s)+u(s,T);

//Cộng thêm lợi ích của c tại giao tác T vào lợi ích của s.

22. end for; 23. end for ;

24. H={s / s ∈ WH ∧ u(s) ≥ minutil}; //Lọc các tập mục lợi ích cao. Thuật toán Hai pha sử dụng hàm apriori_gen(WHk-1) (bước 8) hoàn toàn

giống như hàm Apriori_gen(Fk-1) trong thuật toán Apriori khai phá tập mục phổ

biến. Nó tạo ra các k-tập mục ứng viên tại bước k bằng cách kết nối các (k-1)- tập mục có lợi ích theo giao tác cao đã tìm được ở bước (k-1), (với giả thiết các tập mục đã được sắp thứ tự từ điển).

Thuật toán Apriori_gen(). Tạo Ck các tập mục ứng viên có lợi ích theo giao tác cao.

Input: Tập các (k-1)- tập mục lợi ích theo giao tác cao WHk-1 Output: Tập các k- tập mục ứng viên Ck

Method:

// Bước nối

1. For (each (k-1) - tập mục S1 WHk-1) do 2. For (each (k-1) - tập mục S2 ∈ WHk-1) do

3. if (S1[1] = S2[1]) and (S1[2] = S2[2]) and ….. and (S1[k-2] = S2[k-2]) and (S1[k-1] < S2[k-1]) then 4. Ck ← {S1[1], S1[2], … S1[k-2],S2[k-1]}; 5. end for; 6. end for; // Bước tỉa cắt 7. for each tập mục ci Ck do 8. for each (k-1)–tập mục s ⊂ ci do 9. if (s ∉ WHk-1) then 10. loại ci khỏi Ck 11. end for; 12. Return Ck; Ví dụ: Xét CDSL cho trong bảng 2.1 và bảng 2.2

Bảng 2.1: CSDL giao tác TID A B C D E T1 0 0 16 0 1 T2 0 12 0 2 1 T3 1 0 1 0 1 T4 1 0 0 2 1 T5 0 0 4 0 2 T6 1 2 0 0 0 T7 0 20 0 2 1 T8 3 0 25 6 1 T9 1 2 0 0 0 T10 0 12 2 0 2 Bảng 2.2: bảng lợi ích

Mục dữ liệu Lợi nhuận ($/đơn vị)

A 3

B 5

C 1

D 3

E 5

Hàm lợi ích f(x,y) = x x y, minutil = 130.

Thuật toán Hai pha thực hiện việc phát hiện các tập mục lợi ích cao trong CSDL này như sau:

Các dòng lệnh 1-3 cho tu(t1) =21, tu(t2) = 71, tu(t3) = 12, tu(t4) = 14, tu(t5)

= 14, tu(t6) = 13, tu(t7) = 111, tu(t8) = 57, tu(t9) = 13, tu(t10) = 72.

Các dòng lệnh 4-16 cho:

Bước k= 1. C1 = {A, B, C, D, E}, twu(A) = 109, twu(B)=280, twu(C)=176, twu(D)= 253, twu(E)=372, WH={B,C, D, E}

Bước k=2. C2 ={BC, BD, BE, CD, CE, DE}. twu(BC)=72, twu(BD)=182, twu(BE)= 254, twu(CD)= 57, twu(CE)=176, twu(DE)=253, WH2={BD,BE, CE, DE};

Bước k=3. C3 ={BDE}. twu(BDE) = 182, WH3={BDE}. Pha 1 kết thúc chỉ sau 3 bước, (vì C4 = ∅)

Ta nhận được WH={B, C, D, E, BD, BE, CE, DE, BDE}.

Pha 2:

Các dòng lệnh 18-23 cho u(B)= 240, u(C)=48, u(D)=36, u(E)=50, u(BD)=172, u(BE)=240, u(CE)=83, u(DE)=56, u(BDE)=182. Dòng lệnh 24 cho H = {B, BD, BE, BDE}. Hình 2.1 dưới đây mô tả không gian tìm kiếm tập mục lợi ích cao trong CSDL bảng 2.1 theo thuật toán Hai pha. Các tập mục đánh dấu 2 sao là tập mục lợi ích cao tìm được.

Hình 2.1: không gian tìm kiếm tập mục lợi ích cao

Hình 2.1 trên (gồm 12 tập mục tô đen) trong dàn tập mục của CSDL bảng 2.1, với minutil = 130. Số ghi trong ô là lợi ích theo giao tác /lợi ích của tập mục. Tập mục đánh dấu * hoặc ** là tập mục có lợi ích theo giao tác cao, trong đó tập mục đánh dấu ** là tập mục lợi ích cao tìm được.

Nhận xét: Thuật toán hai pha có nhiều ưu điểm như: dễ hiểu, dễ cài đặt

bên cạnh đó thuật toán còn có những hạn chế như: duyệt cơ sở dữ liệu nhiều lần, sinh ra nhiều tập ứng viên…

Phần sau đây của luận văn trình bày thuật toán HUI-Miner (Liu & Qu, CIKM 2012) có nhiều ưu điểm và khắc phục được hạn chế của thuật toán hai- pha

2.3 Thuật toán HUI - Miner 2.3.1. Giới thiệu thuật toán 2.3.1. Giới thiệu thuật toán

HUI-Miner là thuật toán khai phá tập mục lợi ích cao trong một cơ sở dữ liệu giao tác được đề xuất bởi nhóm tác giả Mengchi Liu và Junfeng Qu và năm 2012 [8].

Thuật toán HUI-Miner là một trong những thuật toán hiệu quả cho khai phá tập mục lợi ích cao. Một số đóng góp của thuật toán này là:

- Thuật toán đề xuất cấu trúc dữ liệu mới lấy tên là utility-list, lưu tập mục và thông tin về lợi ích của tập mục đó.

- Thuật toán HUI-Miner không sinh ra nhiều các tập ứng viên, xây dựng cấu trúc utility-list từ một cơ sở dữ liệu sau đó khai phá tập mục lợi ích cao từ

utility-list này.

2.3.2 Cấu trúc của utility-list 2.3.2.1 Khởi tạo utility-list 2.3.2.1 Khởi tạo utility-list

Trong thuật toán HUI-Miner, mỗi tập mục có một utility-list. Chức năng của các utility-list là lưu giữ các thông tin hữu ích về một cơ sở dữ liệu được xây dựng bởi hai lần duyệt cơ sở dữ liệu.

Đầu tiên, duyệt CSDL để tính lợi ích theo giao tác (TWU) của các mục dữ liệu. Nếu lợi ích theo giao tác của mục nào nhỏ hơn ngưỡng minutil cho

trước thì mục đó sẽ bị loại trong quá trình khai phá sau này. Đối với các mục dữ liệu có lợi ích theo giao tác lớn hơn ngưỡng minutil cho trước, nó sẽ được sắp xếp theo thứ tự lợi ích theo giao tác tăng dần.

Bảng 2.3: Bảng giao tác

Tid Transaction Count

T1 {b,c,d,g} {1,2,1,1} T2 {a,b,c,d,e} {4,1,3,1,1} T3 {a,c,d} {4,2,1} T4 {c,e,f} {2,1,1} T5 {a,b,d,e} {5,2,1,2} T6 {a,b,c,f} {3,4,1,2} T7 {d,g} {1,5} Bảng 2.4: Bảng lợi ích Item a b c d e f g Utility 1 2 1 5 4 3 1

Ta tính được lợi ích theo giao tác của các mục dữ liệu là:

Itemset {a} {b} {c} {d} {e} {f} {g}

Twu 69 68 66 71 49 27 10

Với ngưỡng cho trước là 30 thì các mục f và g sẽ bị loại bỏ. Các mục còn lại sẽ được sắp xếp lại theo thứ tự lợi ích theo giao tác tăng dần là:

e <c <b <a <d.

Định nghĩa 2.11: Giao tác được sửa đổi là giao tác có tính chất sau:

+ Tất cả các mục có lợi ích theo giao tác nhỏ hơn một ngưỡng minutil

cho trước đã bị xóa khỏi giao tác.

+ Các mục còn lại được sắp xếp tăng dần theo lợi ích theo giao tác của nó.

Cơ sở dữ liệu trong bảng 2.5 liệt kê các giao tác đã sửa đổi có nguồn gốc từ cơ sở dữ liệu trong bảng 2.3.

Bảng 2.5 Dữ liệu sau khi duyệt CSDL

Tid Item Util. Item Util. item Util. item Util. item Util. TU

T1 c 2 b 2 d 5 9 T2 e 4 c 3 b 2 a 4 d 5 18 T3 c 2 a 4 d 5 11 T4 e 4 c 2 6 T5 e 8 b 4 a 5 d 5 22 T6 c 1 b 8 a 3 12 T7 d 5 5

Từ đây ta có qui ước: Một giao tác được coi là đã sửa đổi thì tất cả các mục trong tập phổ biến đều được sắp xếp thứ tự tăng dần theo lợi ích theo giao tác.

Định nghĩa 2.12: Cho một tập mục X và một giao T với X ⊆ T, tập hợp tất cả các mục dữ liệu sau X trong T được ký hiệu là T/X.

Ví dụ: trong bảng 2.5: T2/{eb}={ad}và T2/{c} = {bad}.

Định nghĩa 2.13: Lợi ích còn lại của tập mục X trong giao tác T ký hiệu là

ru(X,T), là tổng tất cả các lợi ích của các mục trong T/X trong T, khi đó: ru(X, T)=∑i (T/X)u(i,T).

Mỗi phần tử trong utility-list của tập mục X chứa 3 trường: tid, iutil và

rutil.

- Trường tid : cho biết giao tác T chứa X

- Trường iutil : là lợi ích của X trong T, tức là u(X,T)

Hình 2.2: utility-list ban đầu

Duyệt cơ sở dữ liệu lần 2, thuật toán khởi tạo utility-list như hình 2.2 Ví dụ: Xét utility-list của tập mục c.

Trong T1, u({c},T1)= 2, ru({c},T1) = u(b,T1) + u(d,T1) = 2+5 = 7

Trong T2, u({c},T2)=3, ru({c},T2)=u(b,T2)+u(a,T2)+u(d,T2)=2+4+5=11

2.3.2.2 Utility-list của 2-tập mục

Không cần phải duyệt lại cơ sở dữ liệu, utility-list của 2-tập mục {x,y} được xây dựng bởi giao của utility-list của {x} và của {y}. Thuật toán xác định các giao tác chung bằng cách so sánh trường tid trong hai utility-lits.

Ví dụ, so sánh các giao tác trong utility-lits của {e} và của {c} trong hình 2.2 được thể hiện trong hình 2.3 (a).

Hình 2.3: Utility-list của 2- tập mục

Đối với mỗi giao tác T chung, thuật toán sẽ tạo ra một phần tử E và thêm nó vào utility-list {x,y}. Trường tid của E là tid của T, trường iutil của E là tổng của iutil kết hợp với T trong utility-list của {x} và {y}.

Giả sử x là trước y thì rutil của E là rutil kết hợp với T trong utility-list {y}.

Hình 2.3(b) mô tả utility-list 2-tập mục của các tập mục với tập {e} là tiền tố.

Ví dụ: để xây dựng utility-list của tập {eb}, thuật toán lấy giao các utility- list của {e} là: {<2, 4, 14>, <4, 4, 2>, <5, 8 14>} và của {b} là:

{<1, 2, 5>, <2, 2, 9>, <5, 4, 10>, <6, 8, 3>}, kết quả là: {<2, 6, 9>, <5, 12, 10>}.

Ta có thể quan sát từ trong cơ sở dữ liệu bảng 2.5, tập {eb} chỉ xuất hiện trong giao tác T2 và T5. Trong T2, u({eb},T2)= u(e,T2)+u(b,T2)= 2+4= 6, và ru({eb},T2)= u(a,T2)+u(d,T2)= 4+5= 9. Tương tự như vậy, trong T5, lợi ích của

{eb} là 8 + 4 = 12, và lợi ích còn lại của {eb} là 5 + 5 = 10.

2.3.2.3 Utility-list của k-tập mục (k ≥ 3)

Để xây dựng utility-list của k-tập mục {i1… i(k-1) ik} với k ≥ 3, chúng ta có thể lấy giao utility-list {i1 ... i(k-2) i(k-1)} với utility-list {i1 ... i(k-2) ik} như chúng ta đã xây dựng các utility-list của 2-tập mục.

Ví dụ: để xây dựng các utility-list {eba}, chúng ta lấy giao nhau utility-

list của {eb} và utility-list của {ea} trong hình 2.3(b). Kết quả utility-list được

mô tả trong hình 2.4(a). Tuy nhiên lợi ích của các tập mục trong T2 và T5 là 10 và 17 chứ không phải là 14 và 25.

a) Kết quả lấy giao trực tiếp b) Các utility-list đúng Hình 2.4: Utility-list của 3-tập mục

Thuật toán xây dựng cấu trúc utility-list

Algorithm 1:Construct Algorithm

Input: P. UL, the utility-list of itemset P; Px.UL, the utility-list of itemset Px ; Py. UL, the utility-list of itemset Py.

Output: Pxy. UL, the utility-list of itemset Pxy.

1.Pxy. UL = NULL;

2.foreach element Ex G Px. ULdo

3. ifEyGPy.UL and Ex.tid==Ey.tidthen 4. ifP.UL is not empty then

5. search such element EP.ULthat E.tid==Ex.tid ;

6. Exy=<Ex.tid,Ex.iutil + Ey.iuti -E.iutil, Ey.rutil >;

7. else

8. Exy=<Ex.tid, Ex.iutil + Ey.iutil, Ey.rutil>;

9. end

10. append Exy to Pxy.UL;

11. end 12.end

Lý do của việc tính toán sai lợi ích của tập mục {eba}(Hình 2.4(a)) trong T2 là do tổng lợi ích {eb} và {ea} trong T2 đều chứa lợi ích của {e}(lợi ích của {e} được cộng 2 lần). Do đó để tính toán các lợi ích của { i1 ... i(k-2)i(k-1) ik} trong T ta dùng công thức:

u({i1...i(k-2)i(k -1)ik},T)= u({i1...i(k-2)i(k-1)},T) + u({i1...i(k-2)ik},T) - u({i1...i(k-2)},T).

2.3.3 Khai phá tập mục lợi ích cao 2.3.3.1 Không gian tìm kiếm 2.3.3.1 Không gian tìm kiếm

Cho một tập các mục I = {i1, i2, i3, ..., in} giả sử i1<i2<... <in, một cây liệt kê biểu diễn cho tất cả các tập mục được xây dựng như sau:

Bước 1, tạo ra gốc.

Bước 2, tạo ra n nút con của nút gốc biểu diễn cho n 1-tập mục tương ứng;

Bước 3, đối với một nút biểu diễn cho tập mục {is ... ie} với 1 ≤ s ≤ e ≤ <n, tạo ra (n - e) nút con biểu diễn cho các tập mục:

{is ... iei(e + 1)}, {is ... iei(e + 2)}, ..., {is ... iein}.

Bước thứ ba là thực hiện lặp lại cho đến khi tất cả các nút lá được tạo ra. Ví dụ, cho I = {e, c, b, a, d} và e <c <b <a <d, một cây liệt kê cho tất cả các tập mục của I được mô tả trong hình 2.5.

Định nghĩa 2.14. Cho một cây liệt kê, một tập mục biểu diễn bởi một nút được

gọi là phần mở rộng của tập mục biểu diễn bởi nút gốc của nút đó. Đối với một tập mục có chứa k mục, mở rộng của nó có chứa (k + i) mục được gọi là i- mở rộng của tập mục này.

Tính chất: Nếu X' là một mở rộng của X thì (X'-X) = (X' / X).

Điều này là hiển nhiên vì bất kỳ mở rộng nào của X cũng là một sự kết hợp của X với các mục dữ liệu đứng sau X.

d

e c b a

ec eb ea ed cb ca cd ba bd ad

ecb eca ecd eba ebd ead cba cbd cad bad

ecba ecbd ecad ebad cbad

ecbad

0

Item order: e<c<b<a<d

Ví dụ, trong hình 2.5, tập mục {eba} và {ebd} là 1-mở rộng của {eb}, và {ebad} là 2- mở rộng của {eb}. Bắt đầu từ gốc của một cây liệt kê, cho một tập mục, HUI-Miner kiểm tra đầu tiên tất cả 1- mở rộng của nó bằng cách xây dựng các utility-list của chúng. Sau khi xác định và xuất các tập mục lợi ích cao từ các mở rộng, HUI- Miner xử lý tiếp theo cách đệ quy các mở rộng.

2.3.3.2 Chiến lược tỉa

Bổ đề 2.1: Cho utility-list của tập mục X, nếu tổng của tất cả các iutils và rutils

trong utility-list nhỏ hơn ngưỡng minutil cho trước, thì bất kỳ mở rộng X' nào

Một phần của tài liệu (LUẬN văn THẠC sĩ) tìm hiểu một số thuật toán khai phá tập mục lợi ích cao và ứng dụng (Trang 40)