Thuật toán APRIORI-TID

Một phần của tài liệu Ứng dụng luật kết hợp trên hệ thống thông tin nhị phân để xây dựng bài toán tư vấn xây dựng (Trang 56)

Thuật toán Apriori-TID được cải tiến từ thuật toán Apriori nhằm tránh việc duyệt database quá nhiều lần để đếm số lần xuất hiện của các tập ứng viên trong các giao dịch.

Thuật toán AprioriTID sử dụng tập Ck để tính độ hồ trợ cho các phần tử của tập Ck khi k >1 thay cho việc duyệt CSDL. Mỗi phần tử của tập Ck có dạng <TID, x> với X là tập các ứng viên thuộc Ck tương ứng với giao dịch t có mã TID hay chúng ta cũng có thể viết <t.TID, {ceCk I c có trong t}>. Nếu giao dịch t không chứa một tập ứng viên nào (Xk = 0 ) thì giao dịch t không được đưa vào Ck. Do đó, số phần tử của Ck có thể nhỏ hơn số lượng các giao dịch trong CSDL, đặc biệt khi k lớn. Khi số phần tò của Ck nhỏ hơn số lượng các giao dịch trong CSDL thì việc duyệt Ck để tính độ hỗ trợ cho từng phần tò của ck phục vụ cho việc xác định Lk sẽ nhanh hơn duyệt CSDL.

Thuât toán a.Tính ck

ck được tạo từ Lk_i qua 2 bước

Bướcl. Nổi Lk.j với chỉnh nó

Select p.HạngMụci,p.HạngMục2, .. .p.HạngMụck_i, q.HạngMụCk-1

From Lk_i as p, Lk_i as q;

Where (p.HạngMụci= q.HạngMụci)A...A(p.HạngMụck-2 = q.HạngMụCk-2) A(p.HạngMụck_i < q.HạngMụck_i);

Bước 2. Loại bớt các tập hợp cổ tập con không thuộc Lk_i

b. Tính Ck, Lk

ck =0;

For all te C*1 Do Begin

c t = {c G c k I (c-c[k]) G t.X A C -c[k-l] G t.X};

For all UngVien c G c t Do c.count ++;

if (Ct*0) then Ck+= < t.TID, c t >;

End

L k = {c G Ck \ c.count > minsup}

Ghi chú: Trong quá trình tính toán Count(TID) không thay đổi. Vì vậy chúng ta có thể thay minsup bằng một số nguyên nào đó và do đó sup sẽ là count.

Nhân xét

Với k=l, số phần tử của Cl bằng số giao dịch trong CSDL; tập X (ứng mồi phần tò của Ci) có số lượng thành viên bằng số item trong giao dịch tương ứng trong CSDL.

Với k nhỏ (k>l), số lượng phần tử của Ck bằng hoặc nhỏ hơn không đáng kể so với số giao dịch trong CSDL; tập X (ứng mỗi phần tò của Ck) có thể có số lượng thành viên lớn hơn số item trong giao dịch tương ứng trong CSDL vì số phần tử của Ck nhiều khi k nhỏ và khả năng các ứng viên của tập c k có trong giao dịch là lớn (trong ví dụ trên tập X trong giao dịch có TID 300 có số thành viên là 6 trong kho trong CSDL chỉ có 4 item).

Với k lớn, số lượng phần tử của Ck nhỏ hơn so với số giao dịch trong CSDL; tập X (ứng mỗi phần tử của Ck) có thể có số lượng thành viên nhỏ hơn số item trong giao dịch tương ứng trong CSDL vì số phần tò của c k không nhiều khi k lớn và khả năng các ứng viên của tập Ck có trong giao dịch là nhỏ.

Kết quả chạy thực nghiệm của R. Agrawal cho thấy với k nhỏ, thuật toán Apriori chạy nhanh hơn thuật toán AprioriTID; ngược lại với k lớn, thuật

toán AprioriTID chạy nhanh hơn. Khi k nhỏ, số lượng phần tử của Ck không ít hơn số giao dịch của CSDL nên việc tính độ hỗ trợ dựa trên Ck không nhanh hơn so với dựa trên CSDL; ngoài ra, mồi phần tử của Ck có tập X lớn nên mất thời gian để tính toán Ck, tập Ck cũng chiếm bộ nhớ lớn nên có thể vượt khả năng lưu trữ ở bộ nhớ trong máy tính và phải sử dụng đến bộ nhớ ngoài nên mất thêm thời gian đọc và ghi đĩa. Do đó, thuật toán AprioriTID chạy chậm khi k nhỏ. Khi k lớn, số lượng phần tử của Ck nhỏ hơn số giao dịch của CSDL nên viêc tính độ hỗ trợ dựa trên Ck nhanh hơn so với dựa trên CSDL; tập c k nhỏ lại, không cần sử dụng đến bộ nhớ ngoài . Do đó, thuật toán AprioriTID chạy nhanh khi k lớn.

2.5.3. Thuật toán phát hiện tập chỉ báo và luật kết họp nhị phân

Thuật toán phát triển tò thuật toán Apriori-Tid. Để phát hiện các tập chỉ báo nhị phân phổ biến từ các luật kết hợp nhị phân từ hệ thông tin nhị phân. Thuật toán này làm việc với các bit trong bộ nhớ và không làm việc với CSDL trên đĩa, vì thế có thể cải tiến tốc độ quá trình phát hiện luật. Cho một CSDL và hai ngưỡng độ hỗ trợ tối thiểu minsup và độ tin cậy tối thiểu minconf của luật kết hợp. Thuật toán Apriori-Tid có hai pha:

Pha 1 : Phát hiện các tập chỉ báo phổ biến dựa trên ngưỡng minsup cho trước.

Pha 2: Xây dựng các luật kết hợp dựa trên một ngưỡng minconf cho trước. Cho ma trận thông tin nhị phân Sb = (O, D, B, %) và một ngưỡng 0, ß e(0, 1). Trong đó 0 là minsup và ß là minconf.

Chi tiết thuật toán Apriori-Tid như sau:

Pha 1 : Phát hiện tập chỉ báo phổ biến nhị phân 1. TraLoi = 0 ;

2. Sinh LB1 từ SB theo thủ tục 1 .a. dưới đây ; 3. for (k = 2; LB,k<> {}; k++) (adsbygoogle = window.adsbygoogle || []).push({});

4.{Sinh Lß k từ Lb k-1 theo thủ tục 2.a. dưới đây ; 5. TraLoi = u k LB,k-i; 6.} 7. Return TraLoi; // = = = = = = = = 1.a. Sinh Ljj 1 1 . L B ,1 = 0 ; 2. for (i = 1; i <= m; i++) 3. if(card(supB(vB({di}))) > 0 * card(O)) 4. { SaveLargeSet({di}, VSB,i); 5. SaveDescriptorVector(vB({di}, VSB l )); 6. } 7. TraLoi = Lß 1; 8. Return TraLoi;

// Trong đó m = card(D) là lực lượng của lập D.

2.a. Sinh LB k

Dựa trên ứiuộc tính VS e Lß, T (Z s thì T e LB, chúng sinh ra Lßktu Lßk-1-

Kết quả như sau:

Tạo một ma trận có các dòng và cột là các thành phần của LB k_i

1 • LB,k = 0 ;

2. for (Mỗi X e Lß;k-1 && X o Y ) 3.{T = X u Y ;

4. if(card(supB(vB(T)) > 0*card(O)) && card(T) == k) 5. { SaveLargeSet(T, LB k);

6. SaveDescriptorVector(vB(T), VSB k));

8.}

9. TraLoi = Lß,k ; 10. Return TraLoi ; Trong đó:

SaveLargeSet(T, LB k) là một hàm để ghi một tập chỉ báo phổ biến nhị phân T

vào LB;k.

SaveDescriptorVector(vB(T), VSßk)) là một hàm để lưu một vectơ chỉ báo phổ biến nhị phân V b ( T ) vào VSB k-

Dựa vào (1) và (2), ta có thể tính rất nhanh supB(vB(T)) tại bước thứ k của vòng lặp ở trên, từ các phần tử của VSB k-1-

Pha 2: Phát hiện các luật phổ biến nhị phân

1. RB ß = 0 ; // Khởi tạo tập luật ban đầu là rồng

2. for (Mỗi L G Lb)

3. { for(Mồi X, Y G L và XnY ={}) 4. { if(CFB(X => Y) > ß)

5. SaveRule(X=>Y, Rß ß); // ghi luật X=>Y vào Rß ß 6. if(CFB(Y =>X) > ß)

7. SaveRule(Y=>X, Rß ß); // ghi luật Y = > x vào RB ß

8. }

9.}

10. TraLoi = Rb ß ;

11. Return Rb ß ; // Kết thúc

2.6. Xác định các thuật toán tiền xử lý của luật kết hợp nhị phân Thuật toán 1. Nhập các Item và các giao dịch Thuật toán 1. Nhập các Item và các giao dịch

BƯỚC 1: Tạo 2 bảng:

Bảng 1- Tên bảng B ltem (Maltem C(5), Tenltem C(20), Nhan C(l))

Trong đó: (adsbygoogle = window.adsbygoogle || []).push({});

B ltem: Bảng Item Maltem: Mã Item Tenltem: Tên Item Nhan: Nhãn của Item

Nhập nội dung cho bảng này, khi nhập nhãn nên bắt đầu bởi chữ A và sau đó theo chiều tăng của từ điển

Sắp xếp nhãn theo từ điển (chức năng sort hoặc thuật toán nỗi bọt)

Chẳng hạn, sau khi nhập ta được Bảng B_Item

Maltem Tenltem Nhan Sup

003 ? c 004 ?? D 002 ??? B 001 ???? A 005 7 7 7 7 7 7 E Bảng 2.13. Các Item và nhãn

(đã được nhập Sau khi sắp xếp nhãn theo từ điển ta được ) Bảng B ltem

Maltem Tenltem Nhan Sup

001 ???? A

002 ??? B

003 ? c

004 ?? D

005 9 9 9 9 9 E

Dùng hàm n = Count(B_Item) để biết số Item, theo ví dụ trên ta được số Item là n = 5 Bảng 2- Tên bảng: B_GD (MaGD C(5), ND GD C(30)) Trong đó: B_GD : Bảng giao dịch MaGD: Mã giao dịch

ND_GD: Nội dung giao dịch - gồm các Item tham gia vào giao dịch

Nhập nội dung cho bảng B_GD, phải chặn sao cho trong một giao dịch các Item là duy nhất.

Chẳng hạn, sau khi nhập ta được

Bảng B_GD MaGD ND_GD Ti ACD t2 BCE t3 ABCE t4 BE Bảng 2.15. Bảng giao dịch |T| = 4

Dùng hàm T = Count(B GD) để đếm số giao dịch. Ví dụ trên ta được số giao dịch T = 4

Thuật toán 2. Chuyển bảng giao dịch sang dạng bảng giao dịch nhị phân B_GD_NP

Var Sứ: integer;

Strl = “o”

For j = 1 to n

Strl = Strl & ‘d’ &Str(j) & “Number(l)” & ‘7 ’ Andíor

Strl = “dl Number(l), d2 Number(l), d(n)Number(l),” Strl = Left(Strl, len(Strl) - 1) {Cần khử dấu cuối}

Strl = “dl Number(l), d2 Number(l), dn Number(l)” { Kết quả ta khử

{Tạo bảng B_GD_NP }

Create table B_GD_NP( & Strl) {Kết quả có bảng dạng sau} B_GD_NP

o d l d 2 ... d n

Bảng 2.16. Bảng B_GD_NP (adsbygoogle = window.adsbygoogle || []).push({});

Chú ý rằng các Nhan giao dịch đã được xếp tăng theo từ điển sẽ tương ứng với di, d2, dn

Tạo mảng một chiều Array A_Nhan(n) of Char;

{Nạp các nhãn cho A_Nhan} For i = 1 To n

A_Nhan(i) = B_Item.Nhan

Skip {Chuyển đến bản ghi tiếp theo} EndFor

For i = 1 To n

B GD NP.O = “o” & Str(i)

For j = 1 To Count(B_GD.ND_GD) If A_Nhan(i) = B_GD.ND_GD(j) Then B_GD_ND. d & (j) = 1 Else B_GD_ND. d & (j) = 0 Endlf

Skip B_GD Endfor Skip B_GD_NP Endfor o d l d 2 dn O l * * * o 2 * * * ... ... ... ... Om * * Bảng 2.17. Bảng B GD NP đã được nạp nhập dữ liệu Trong đó * là o hoặc 1 Chẳng hạn từ bảng 2.2. ta có 0 d l d 2 ¿ 3 d 4 d 5 Ol 1 0 1 1 0 0 2 0 1 1 0 1 0 3 1 1 1 0 1 o 4 0 1 0 0 1 Bảng 2.18. Bảng B GD NP đã được nạp nhập dữ liệu thực tế

Kết luận chương 2

Trong chương này đã trình bày tổng quan về khai phá dữ liệu, khai phá luật kết hợp. Để đi vào những nghiên cứu cụ thể ở chương sau, chương này cung cấp những hiểu biết cần thiết về bài toán khai phá luật kết họp. Đặc biệt trình bày chi tiết thuật toán Apriori tìm tập mục phổ sinh ra các ứng cử, sinh ra luật kết hợp tò tập mục phổ biến.

Việc tìm kiếm các luật kết hợp trong CSDL nhị phân được thực hiện theo thuật toán nguyên thuỷ Apriori. Một hạn chế đáng kể của các thuật toán này là chỉ làm việc với dữ liệu ở dạng nhị phân, tức là giá trị của các thuộc tính chỉ nhận 2 giá trị là 0 và 1. Chính vì thế thuật toán khó có thể áp dụng trực tiếp trên những CSDL thực tế - những CSDL không chỉ chứa thuộc tính nhị phân, mà còn chứa cả dữ liệu số và hạng mục. Muốn thực hiện được điều này, người ta phải tiến hành ròi rạc hóa dữ liệu cho các thuộc tính số để chuyển chúng về thuộc tính nhị phân.

Chương 3. ỨNG DỤNG LUẬT KẾT HỢP TRÊN HỆ THỐNGO • • • •

THÔNG TIN NHI PHÂN ĐẺ XÂY DƯNG BÀI TOÁN TƯ VẤN XÂY DƯNG• • •

3.1. Yêu cầu của bài toán

Bài toán tư vấn xây dựng:

Cho giao dịch thực tế với các tập mục I = { ii, i2,...,in}, tập các giao dịch TID = {ti, t2, ...,tk} và minsup = 6, minconf= p . Hãy xác định luật kết họp trên cơ sở những thông tin đã cho đó.

3.2. Cách giải quyết yêu cầu của bài toán

Dựa vào cơ sở dữ liệu SQL và các thuật toán được viết trên Microsoft Access.

3.3. Chương trình ứng dụng.

\*\ Microsoft Access - [Forml: Form] r ^ l g l « j l ¿3 Nhap so lieu SuaSolieu Nhập sò trong giao dịch Khai phá Ketthuc Type 0 question for help . 0 X

if c H a a i d A ? I « a I -11 A liU i t I ;-i. .'im i -■ I a_____________________________________________________________________________________

TRƯỜNG ĐẠI HỌC SƯ PHẠM HÀ NỘI 2

KHOA CÔNG NGHỆ THÔNG TIN

CHƯƠNG TRÌNH DEMO LUẬN VĂN TỐT NGHIỆP

T C W I IIÂ M W AM . ỨNG DỤNG L U Ậ T K Ế T HỢ P T R Ẽ N H Ệ THỐNG TH Õ N G T IN NHỊ PHÂN Đ Ể X Â Y DỰNG BÀI TOÁN T Ư VẤN Xâ yd ự n g

Người th ự c hiện: Lồ T H Ị VÂN

HÀ NỘI, 12-2015 I ỈKIiạịJỈjI] 1

Hình 3.1. Giao diên chính

i n Nhap 50 lieu Sua So lieu Nhập 50 tronq qiao dịch Khai pha Ketttiu e (adsbygoogle = window.adsbygoogle || []).push({});

N H Í.P CÃC c ử i TU Ö N G , ĨH A M G ä G uvo d i c h J FỊI4Ỉ J3 ■“Jt•“ W i-C K H " ö “ ä a N H Ạ P C Â C G I A Ũ D ỊC H H ử n h K ■ H r f u n * *0* h :r.:rr- II it II I f .5« ! 3 B s n g S o : T a b le Hình 3.3. Các Form nhập GD A B c D E F ► 1 20 45 36| ũ| a 0 2 22 40 35 ũ 0 0 3 24 40 39 41 25 10 4 17 25 41 41 30 16 5 0 0 10 45 40 12 s 0 0 10 41 30 16 * (Aul oN umber) Ũ 0 Ũ Ũ 0 0 Hình 3.4. Nhập gỉao dịch số 3 B a n g M o H o a : T a b le G D A B c D E F ì rA i.tn M i.n o ln n rk 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 1 1 0 1 1 1 1 1 1 a a 0 1 1 0 a a 0 1 1 1 k fl fl n n n n J K J . m n TU W 3 THÍM an UKnew Hình 3.5. Nhập gỉao dịch nhị phân ỊSII 1...

SỬA SAI GÁC GIAO DICH

-y[ iw a tirin s '.-¿■«■■ri

I I I I -

Micrescrfl OfBct

Nhieis Minsup guiO'-sl OK

Cancel

c=|

Hình 3.7. Các MỉnSup và Conf

KÉT QUẢ KHAI PHÁ

M icrcscft Office Access

L l = {Ả. B, c, ạ E}; 12 = {ÂB. AC, EC, DE}; L3 = {ABC}; L4 = {}. Vay cac lust la: A = > B( B => A, A = > Ç c => K B => Ç. c => B. A => BÇ BC => A, B => AC,AC=> B,

c = > ÂB.. AB => c

OK

Microsoft Office Access

{Nhổn ccng = > Can bc ky thu át}, {Căn bữ kythuat => Nhầr ccn g }, {Nhản còng = > Ccng cu va v a ttu }r {Cong cu va vattu => Nhẩn cỏng}, {Can bc kythuat} = > {Cong cu va v e t t u }, {Ccng cu va v a ttu ] => {Can bc ky thuat}, {Nhổn ccng} => {Can bc ky thuat, Cong cu va vattu}, {Can bc kythuat, Ccng cu va vattu}= > {Nhản ccn g Ị, {Cán bc kythuat} => {Nhản còng , Cong cu va v a ttu }, {Nhản còng .. Cong cu va Vát tu} = > {Can bo ky thuat}.. {Ccng cu va vattu}=> {Nhan còng

,Can bc ky thuat}, {Nhản còng, Can bc ky thust }- > {Ccng cu va vattu}

OK

KẾT LUẬN

Luân văn đã hoàn thành đươc môt sổ kết quả cu thể như sau:• • • T . •

- Tìm hiểu về khai phá dữ liệu và phát hiện tri thức.

- Tìm hiểu hai thuật toán tiêu biểu để khai phá dữ liệu là Apriori và

Apriori-TID

- Tìm hiểu và đưa ra chi tiết thuật toán khai phá luật kết họp nhị phân. - Cài đặt thuật toán khai phá luật kết hợp nhị phân để ứng dụng vào

phát hiện luật kết hợp tại trường Trung cấp Xây dựng số 4. Hướng phát triển tiếp theo

Trên cơ sở những nghiên cứu đã được trình bày trong luận văn, tiếp tục nghiên cứu sâu hơn về thuật toán khai phá luật kết hợp nhị phân, tìm các giải pháp nhằm khắc phục các nhược điểm của thuật toán hiện có. Phát triển ứng dụng để có thể đem sử dụng trong thực tế.

Một phần của tài liệu Ứng dụng luật kết hợp trên hệ thống thông tin nhị phân để xây dựng bài toán tư vấn xây dựng (Trang 56)