Xây dựng chương trình

Một phần của tài liệu Khai phá luật kết hợp (Trang 68)

Xây dựng các lớp, giao diện sử dụng Java version 1.2.2. Lược đồ các lớp (lấy từ file tài liệu overview-treẹhtml của chươna trình). Mô tả một số lớp chính xem phụ lạc. Lược đồ các lớp

* class javạlang. O bject

* class A p riori (implements TimUipnmcphubicn)

■ class S jn h lu a t (implements Timluatkcthop)

68 ■ class P o c C a c h e * class ( i h l C a c h e ■ class D u c C S P L ■ class (ihiC 'SD L ■ class O n bam

■ class T a p m u e (implements javạiọSerializable) ■ class SF.T

* class javạlans.Throwable (implements javạiọSerializable)

* class javạlang.Exception * class D B E x cei)tio n * class SKTKxccption Các giao diện ■ interface T im lu a tk e th o p * interface T im ta p n n ic p h o h ie n Chức năng của các lớp. các siao diện

• class A p riori (implements Timiapmucphohien) :

Thực hiện thuật toán Apriori tìm các tập mục phố biến, (thuật toán tham khảo "Fast Algorithms for Mining Association Rules" của Rakesh Agrawal và Ramakrishnan Srikant)

■ class S in h lu at (implements Tiinluatkethop)

Thực hiện thuật toán Apriori tìm các luật kết hợp (thuật toán tham khảo "Fast Algorithms for Mining Association Rules" của Rakesh Agrawal và Ramakrishnan Srikant )

■ class L n a lk e th o p (implements javạiọSerializable)

Lớp này mỏ tà luật kết hợp, Luật kết hợp có dans X —> Y (X là nguvên nhân, Y là kết quá). X . Y là các tập các thuộc tính. Luật kết hợp có độ hỗ trợ supp và độ tin cậy conf.

■ class I)oc’( ache

Đọc các tập mục từ vùng nhớ cache ■ class ( t h iC a e h c

Ghi các tập mục vào vùng nhớ cache * class D o c C S D L

Đọc dữ liệu từ C S D L

• class (jhj c s m ,

Ghi các tập thuộc tính (tập mục) vào C SD L * class Ca\ b am

HashTree là cấu trúc dữ liệu đặc biệt được sử dụng đế tạo chỉ mục cho các Vector

các lập mục dùns làm tãng hiệu quả xử lý.

* class T a p m u c (implements ja v a .iọSerializable)

Tập mục là tập có thứ tự các số nguyên xác dịnh các thuộc tính . và số' thực xác định độ hỗ trợcủa tập mục

* class S K T

Sử dụng để sắp xếp và truy vấn thông tin về các tập mục. * interface T im lu a tk e th o p

Được thực hiện bời thuật loán tìm luật kết hợp. * interface T im tu p m u cp h o b ien

Được thực hiện bời thuật toán tìm các tập mục phổ biến. 4.3 K ẾT QUẢ THỬ NGHIỆM

Kết quả thử nghiệm chương trình khai phá trên CSD L về các khoá học với độ hỗ trợ nhỏ nhất minsup = 0.2, độ tin cậy nhỏ nhất m inconf = 0.6 trên máv Pentium III, 6 0 0 M B , 6 4 M B R A M . Kết qủa cho thấy mối quan hệ giữa các môn học. V í dụ luật { 4 4 54 } - > { 4 3 } ( 0 . 2 3 8 2 5 5 0 4 , 1 . 0 ) , tra mã cùa môn học, luật này có nghĩa là “ 100% học viên tham dự môn học C S 612 và CS630 cũng tham dự môn học C S 6 1 1 ” hay “2 3 .8 2 % học viên tham gia cả ba khoá học CS612, C S630. C S 6 1 1” . Độ hỗ trợ và độ tin cậy càng cao thì số luật nhận được càng ít. Kết quả khai phá trên CSD L vé các khoá học với độ hỗ trợ 2 0 % , độ tin cậy 6 0 % cho ra 100 luật như sau:

Khai pha luat ket hop

1. Tim cac tap mue Dho bien 4 lan doc CSDL

2. Hien thi cac tap mue pho bien 2.1. Doc noi dung cache

2.2. Tim cac tap mue pho bien

{45 51 }/[0 . 22483222/0] (2)

{23 }/[0 .25503355/0] (1)

70 {52 }/[0.20469798/0] (1) {30 ị/[0.2080537/0] (1) ị 2 0 ị/ [0.22147651/0] (!) {46 }/[0.2181208/0] (i) {51 54 }/ [0.2147651/0] (2) {42 57 ị/[0.2080537/0] (2) {42 43 44 45 }/[0 .25167784/0] (4) {42 43 44 54 }/ [0.20469798/0] (4) {42 43 44 51 }/[0 .23489933/0] (4) {43 44 57 }/ [0.20134228/0] (3)

3. Tim cac luat kec. hop

4. Hien thi cac luat ket hoe

{51 }-> 45 } (0.22483222, 0.6146789) ị 54 }-> 44 } (0 .23825504, 0.6068376) {51 }-> 44 } (0 .26510066 , 0.7247706) (44 }-> 51 } (0.26510066, 0.647541) {57 }-> 44 } (0.20134228, 0.7594937) {45 }-> 44 } (0.31208053, 0.76229507) {44 }-> 45 } (0.31208053, 0.76229507) {54 }-> 43 } (0.23825504, 0.6068376) {51 }-> 43 } (0.26510066, 0.7247706) {43 }-> 51 } (0.26510066, 0.65289253) {57 }-> 43 } (0.20134228, 0.7594937) {45 }-> 43 } (0.30872482, 0.75409836) {43 }-> 45 } (0 .30872482, 0.7603305) {44 }-> 43 í (0.40604028, 0.99180335) {43 }-> 44 } (0.40604028, 1 .0) {44 54 - >{43 {44 } (0.23825504, 1.0} {43 54 - > } (0.23825504, 1.0) {54 }-> 43 44 } (0.23825504, 0.6068376) {44 51 - >(43 } (0.26510066, 1.0} {43 51 - >{44 } (0.26510066, 1.0) {43 44 - > {51 } (0.26510066, 0.65289253) {51 }-> 43 44 } (0.26510066, 0.7247706) {44 }-> 43 51 ị (0.26510066, 0.647541) {43 }-> 44 51 } (0.26510066, 0.65289253) {44 57 - >(43 } (0.20134228, 1.0) {4 3 57 - >{44 } (0.20134228, 1.0) (57 }-> 43 44 } (0.20134228, 0.7594S37) (44 45 - >{43 } (0.30872482, 0.98924726) {43 45 - >{44 } (0.30872482, 1.0) {43 44 - >{45 } (0.30872482, 0.7603305) 5 }-> 43 44 } (0.30872482, 0.75409836} {44 }-> 43 45 ị (0.30872482, 0.75409836)

(43 1} ->{44 45 } (0.30872482, 0 7603305) {^ - ị\ ->{42 } (0 24832214, 0. 6324786) {43 } - »I - >{42 } (0 34228188, 0. 8429752) {42 >{43 } (0 34228188, 0. 7669173) {43 54 }-> {42 } (0.20469798, 0 8591549) { 42 54 }-> {43 ị (0 . 20469798, 0 8243243) {43 51 }-> {42 } (0.23489933, 0 886076) {42 51 }-> {43 } (0.23489933, 0 8641975) {42 43 }-> {51 í (0 .23489933, 0 6862745) {51 }- >{42 43 } {0.23489933, 0 64220184) {43 45 }-> {42 } (0.25167784, 0 8152174) {42 45 }-> {43 } (0 .25167784, ĩ 0) {42 4 3 }-> {45 } (0.25167784, 0 7352941) {45 }- >{42 43 } {0.25167784, 0 6147541) {43 ìì ->{42 45 í (0.25167784, 0 61983466) {43 44 }-> {42 í (0 . 3 422B188, 0 8429752} {42 44 }-> {43 } (0.34228188, 1 0) {42 43 }-> (44 } (0.34228188, 1 0) ị 44 ì->{42 43 } (0 .34228188 , 0 8360656) {43 }- >{42 44 } (0 .34228188, 0 8429752) {42 }- >{43 44 } (0.34228188, 0 7669173) {43 44 54 ->{42 (0 .20469798, 0.8591549) {42 44 54 ->{43 (0 .20469798, 1 .0) (42 43 54 ->{44 (0 .20469798, 1 .0) {4 4 54 }-> 42 43 (0.20469798, 0.8591549) {43 54 }-> 42 44 (0 . 20469798, 0.8591549) (42 54 }-> 43 44 (0.20469798, 0.8243243) {43 44 51 ->{42 (0.23489933, 0.886076) (42 44 51 ->{43 (0.23489933, 1 .0) {42 43 51 ->{44 (0.23489933, 1 .0) {42 43 44 ->{51 (0.23489933, 0 . 6862745) ị 44 51 }-> 42 43 (0.23489933, 0.886076) {43 51 }-> 42 44 (0.23489933, 0.886076) {42 51 }-> 43 44 (0.23489933, 0.8641975) {42 44 }-> 43 51 (0.23489933, 0.6862745) (42 43 }-> 44 51 (0.23489933, 0.6862745) {51 }- >{42 43 44 (0.23489933, 0.64220184) {43 44 45 ->{42 (0.25167784, 0.81521"4) {42 44 45 ->{43 (0.25167784, 1.0) {42 43 45 ->{44 (0.25167784, 1 .0) {42 43 44 ->{45 (0.25167784, 0 . 7352941) {44 45 }-> 42 43 (0.25167784, 0.80645156) {43 45 }-> 42 44 (0.25167784, 0.8152174) {43 44 }-> 42 45 (0.25167784, 0.61983466)

72 {42 45 } - > { 4 3 44 } (0.25167784, 1.0) í 42 44 }->{43 }->{44 45 } (0.25167784, 0.7352941) ( 4 2V 43 45 } (0.25167784, 0.7352941) {45 } - >{42 4 3 44 } (0.25167784, 0.6147541) {44 {4 3 I - >ị 42 4 3 45 } (0.25167784, 0.6147541) ! - >{42 44 45 } (0.25167784, 0.61983466) {51 } - > {42 } (0 .27181208, 0.7431193) {42 } - >ì 51 } (0 .27181208, 0.60902256) {57 } - > {42 } {0.2080537, 0.7848102) {45 } - >{42 } (0 .25167784, 0.6147541) f s /ì \ 44 } - >{42 } (0.34228188, 0.8360656) (42 } - >{44 } (0 .34228188, 0.7669173) (44 54 }->{42 } (0.20469798, 0.8591549) {42 54 } - > { 4 4 ì } (0.20469798, 0.8243243) {44 51 }->{42 } (0.23489933, 0.886076) {42 {42 51 44 } ->{44 }->{51 } (0.23489933, 0.8641975) {0.23489933, 0.6862745) {51 }->{42 44 } (0.23489933, 0.64220184) {44 45 }->{42 } (0.25167784, 0.80645156) {42 45 } - > { 4 4 } (0.25167784, 1.0) {42 4 4 } ->{45 } (0.25167784, 0.7352941) {45 }->{42 44 } (0.25167784, 0.6147541) {44 }-> {42 45 } (0.25167784, 0.6147541) Hạn ch ế của chương trình:

- Chương trình mới chi khai phá trên dữ liệu thử nghiệm. C S D L khỏnạ phải là CSDL định lượnạ do đó thuật toán hiểu được (khóne phải qua bước tiền xử lý). Đối với các C SD L rất lớn như Yahoo mỏi ngày thu thập được khoảng 50 CiB lúc đó việc khai phá dữ liệu mới thực sự có ý nghĩạ

- Chương trình mới triển khai được ở mức thử nshiộm nên chưa xây dựns siao diện.

Hướng cải liến

- Cái tiến chương trình để có thể bước đầu đưa vào thử nghiệm thực sự đối với C SD L vé y tế chuẩn đoán bệnh sốt mò của Bệnh viện Đống Đa Hà Nộị

K ẾT LUẬN

Luận vãn đã tìm hiểu vấn đề khai phá luật kết hợp. lừ bài toán xuất phát ban đầu đó là bài loán bán hàng trong siêu thị. một số thuật toán khai phá luật kết hợp. so sánh một số thuật toán theo các cách tiếp cận tìm kiếm theo chiều sâu DFS. tìm kiếm theo chiều rộng B F S và theo cách tính độ hỗ trợ.

Đánh aiá độ phức tạp của các thuật toán khai phá luật kết hợp là vấn đé phức tạp. tuy nhiên hoàn toàn có thể quy về việc đánh giá độ phức tạp của bài toán clique hai phíạ Kết quà đánh giá độ phức tạp các thuậi toán khai phá luật kết hợp cho thấv irons đa số trường hợp độ phức tạp thuật toán không phải là đa thức tuy

nhiên trẽn thực tế do đổ thị hai phía rất thưa nên hầu hết các thuật toán hiện tại đéu có độ phức tạp tuyến tính theo kích thước của đổ thị.

Các nẹhiên cứu về cơ sờ lý thuyết của luật kết hợp tuy ít sons kết quả cho thấy nó thực sự quan trọng trong việc đánh giá độ phức tạp thuật loán, xây dựng thuật toán khai phá luật kết hợp hiệu quà. Thuật toán C H A R M là kết quả của việc nàv, nó chi sinh ra các luật kết hợp đóng. Tập các luật kết hợp đóns nhỏ hơn nhiều so với tập tất cà các luật kết hợp nhưng vẫn đảm bảo được tính đúng đắn của việc sinh luật.

Làm rõ hàn chất của luật kết hợp là một trong những nội duns của luận vãn. Theo quan diêm của modal logic có thể đưa luật kết hợp vào mổ hình Kripke, dựa trên mô hình này rất nhiéu tính chất cùa luật kết hợp cũnẹ đã được kiểm trạ Các tinh chất được phát biểu trong các định lý và tính đúng đấn của nó cũng đã được

chứng minh. Kết quả cũ n a cho thấy bản chất logic của luật kết hợp c ó dạng A Xj

A >Y

Kết quá xây dựng chương trình thừ nghiệm khai phá luật kết hợp dựa trên thuật toán Apriori là nội dung cuối cùng của luận văn. Chươns trình cũng đã được chạv thừ nghiệm trên một số CSDL đơn gián như C SD L vé các khoá học, V tế tuy

74

mới chi ờ mức thừ nghiệm nhưns đã cho tháy tám quan trọng cùa khai phá luật kết hợp đôi với các ứng dụng khai phá dữ liệụ

T À I L IỆ U TH A M K H Ả O

Tiếng Việt

[1] Đỏ Văn Thành . Vấn đề phát hiện luật kết hợp và khai phá chuỗị Bài giảng trườns thu Hệ mờ và ứng dụng, Hà nộị tháng 8 -2 0 0 1 .

[2] Nguvẻn Thanh Thuỷ, Khai phá dữ liệu - K v thuật và ứng dụng. Bài giảng trường thu Hệ mờ và ứng dụng, Hà nội, tháng 8-2 0 0 1 .

[3] Đỏ Văn Thành, Phạm Thọ Hoàn một cách tiếp cận nghiên cứu phát hiện tri thức trong các cơ sờ dữ liệu trợ giúp quyết định trích từ Hệ mờ, mạng Nơ ron và ứnạ dụng, Nhà Xuất bản Khoa học và Kỹ thuật, 2 0 0 1 .

T iêng Anh

[4Ị Fayyad, Piatetsky-Shapiro, Smyth, "From Data Mining to Knowledge Discovery: An Overview", in Fayyad, Piatetsky-Shapiro, Smyth, Uthurusamy, Advances in Knowledge Discovery and Data Mining, AAAI Press / The M IT Press, Menlo Park, CA, 1996, pp. 1-34

[5] Ronald J.Branchman and T ej Anand: The Process of Knowledge Discovery in Databasẹ 1996

[6] Rakesh Agrawal. Tom asz Imielinski, Arun Swami: Mining Association Rules between vSets of Items in Large Databases. Proceedings o f the 1993 ACM SIG M O D Conference Washington DC, U SA , May 1993.

[7] Rakesh Agrawal, Ramakrishnan Srikant. Mining Sequential Patterns, Proc. O f the Inter. Conf. On Data Engineering (IC D E), Tapei, Taiwan, March 1995.

[8Ị Rakesh Agrawal, Heikki Mannila, Ramakrishnan Srikant, Hannu Toivonen, ẠInkeri Verkamo: Fast Discovery of Association Rules. In u . Favyad and et al. editors. Advances in Knowledge Discovery and Data mining, Pages 307-328. AAAI Press, Menlo Park, CA, 1996.

[9] Mohammed J. Zaki home page httD:/Av\v\v.cs.rpịcdu/~/.akị High perfromance data mining

76

[10] T. Murai and Y . Satọ Association Rules from a Point o f View of Modal Logic and Rough Sets. In Proceeding o f the Fourth Asian Fuzzv Symposium, May 31, June 3, 2 0 0 0 , Tsukuba, Japan, pp. 4 2 7 -4 3 2 .

[11] Mohammed J. Zaki and Mitsunori Ogihara: Theoretical Foundations of Association Rules. In 3rd A C M SIG M O D Workshop on Research Issues in Data mining and Knowledge Discovery, June 1998.

[12] Mohammed .J Zaki and Ching - Jui Hsiao: C H A RM An Efficient Algorithm for Closed Association Rule Mining, 2 0 0 0

[13] Mohammed J. Zaki and Karam Gouda, Fast Vertical Mining Using Diffsets Jan 2 0 0 1.

[14] c . Agrawal and p. Yụ Online Generation o f Association Rules. In IE E E Inter. Conf. On Data Mining, February 1998.

[15] M ohammed J. Zaki and Srinivasan Parthasarathy, Mitsunori Ogihara, Parallel Data M inins for Association Rules on Shared - Memory Systems, in Knowledge and Information Systems, Volume 3, Number 1, p p l-2 9 Feb 2 001.

[16] Jiuyong Li, Hong Shen, and Rodney Topor, An Adaptive Method of Numerical Attribute Merging for Quantitative Associatin Rule Mining

[17] Jochen Hipp, Ulrich Güntzer, Ghoiamzera Nakhaeizadeh, Algorithms for Association Rule M ining - A General Survey and Comparison. ACM SIGKĐ, July 2000.

[18] M.J.Zaki, S. Parthasarathy, M. Oghara, and w . Li New Algorithms for Fast

PHỤ LỤC

Lứp A prỉori

import javạu t i l ;

import javại o .IOException;

Apriorịjava<p>

Thuc hien thuat toan Apriori tim tat ca cac tap mue pho bien. Tham khao ("Fast Algorithms for Mining Association Rules" Cua Rakesh Aarawal va Ramakrishnan Srikant)

public class Apriori implements Timtapmucphobien

{

private static final int INITIAL_CAPACITY = 10000; // Vector luu cac tap muc

private Vector candidates; private Vector k_frequent; private Vector large;

// eau truc du lieu hashtrees voi cac tap ung eu vien va tap pho bien k muc

private Caybam ht_candidates; private Caybam ht_k_frequent; // luu so lan duyet CSDL private int pass_num; // doc CSDL

private DocCSDL db_reader; private GhiCache cache_writer; // so dong, min_weight

private long num_rows; private long min_weight;

/ * *

* Tim tat ca cac tap mue pho bien

* @param dbReader la doi tuong duoc su dung de doc du lieu tu CSDL

* ffiparam cacheWriter la doi tuong duoc su dung de ghi du lieu vao bo nho

78

* cache

* @param minSupocrt do ho tro nho nhat do nguoi dung xac dinh

* ©return tra lai so lan duyet CSDL

* /

public int Timtapmucphobien(DocCSDL dbReader, GhiCache cacheWriter,

float minSupporc)

{

// aan gia tri cho cac bien db_reader = dbReader;

cache_writer = cacheWriter;

num_rows = dbReader.getNumRows( ) ;

min_weight = (long)(num_rows * minSupport); // khoi tao cac vector

candidates = new Vector(INITIAL_CAPACITY) ; k_frequent = new Vector(INITIAL_CAPACITY) ; large = new Vector(INITIAL_CAPACITY); // khoi tao cau true cay

ht_k_frequent = new Caybam(k_frequent); ht_candidates = new Caybam(candidates) ;

// Khoi tao cac tap ung cu vien ban dau gom cac mue don 1- thuoc tinh

Tapmuc i s ;

for (int i = 1; i <= db_reader.getNumColumns0 ; i + + )

{ is = new Tapmuc(l); i s .ađltem(i); candidates.ađElement(is); ht_candidates.ađ(candidates.size() - 1) ; } // Lan duyet i

for (pass_num = 1 ; ; pass_num++)

{

// tinh trong so cho moi ung cu vien weighCandidates();

// kiem tra xem tap ung eu vien nao la pho bien ( CO do ho tro

// Ion ho do ho tro nho nhat do nguoi dung xac dinh) evaluateCandidates();

// tinh do ho tro cua cac tap mue pho bien o tren int card, maxcard = 0;

for (int 1 = 0 ; i < largẹsize(); i++)

if {(card = ((Tapmuc)largẹeleraentAt(i)).size()) > naxcard)

maxcard = card;

// Neu lan duyet cuoi cung khong sinh ra duoc bat ky tap mue pho bien nao

// thi thuat toan dung if (pass_num > raaxcard)

break;

// Neu ca kiem tra thay tap muc gom tat ca cac muc (thuoc tinh)

//if we just examined the top Tapmuc // thuat toan da duoc thuc hien xonc. if (pass_num >= db_reader.getNumColumns())

break;

// sinh cac tap ung cu vien moi tu cac tap mue p’no bien

truoc do

generateCandidates( ) ;

// thoat neu khong sinh duoc tap ung cu vien moi nao if (candidates.size() == 0)

break;

}

return pass_num;

}

// thu tuc nay duyet CSDL va tinh trong so cua moi // ung cu vien

private void weighCandidates()

{

ht__candidates . prepareForDescent ( ) ;

try

\

Tapmuc row = db_reader.getFirstRow0 ; ht_candidates.update(row); while (db_reader.hasMoreRows()) { row = db_reader.getNextRow{); ht_candidates.update(row); } } catch (Exception e) {

80

System.err.println("Loi đuyet CSDL!!!\n" + e) ;

} }

// thu tuc nay kiem tra xem cac tap mue co phai la tap mue pho bien hay khong

orivate void evaluateCandidates( )

{

Taptnuc is;

for (int i = 0; i < candidates.size(); i++) // neu no la cap mue pho bien

if ({is = (Tapmuc)candidates.elementAt(i)) .getweight0 >= min_weight)

{

// tinh do ho tro cho tap muc nay

i s .setSupport( (float)i s .getWeight()/(float)num_rows) ; // ghi tap muc vao bo nho cache

try { if (cache_writer != null) cache_writer.writeltemset(is); } ' catch (IOException e) { System.err.println("Loi 1Ỉ1\n" + e) ; }

// sau do them vao tap mue pho bien k muc largẹađElement(is);

k_frequent.ađElement(is) ;

ht_k_frequent.ađ(k_frequent.size() - 1) ;

}

// khoi tao lai cac ung cu vien cho lan duvet tiep theo candidates.removeAllElements();

ht_candidates = new Caybam(candidates) ;

}

// thu tuc nay sinh cac ung eu vien moi tu cac tap muc pho bien

private void generateCandidates( )

{

ht_k_frequent.prepareForDescent(); if (k_frequent.s i z e () == 0)

for (int i = 0; i < k_frequent.size( ) - 1; i + + )

for (int j = i + 1; j < k_frequent.size{) ; j+ + )

if ( ! getCandiciate ( i , j ))

break;

,// khoi tao cac tap pho bien k muc cho lan duyet tiep theo

k_f requent. removeAHElements {) ;

ht_k_frequent = new Caybam(k_frequent);

}

// thu tuc nay ket hop cac tap mue i va tap muc j tra lai // true neu thanh cong, false neu khong the ket hop

private boolean getCandidate(int i, int j)

{

Tapmuc is_i = (Tapmuc)k_frequenc.elementAt(i ); Tapmuc is_j = (Tapmuc)k_frequent.elementAt(j ); if (!is_ịcanCombineWith(is_j))

return false; else

J

Tapmuc is = is_ịcombineWith(is_j);

// tap mue pho bien k-frequent itemset CO k-1 tap muc pho

b i e n c o n ( k - 1 ) -

Một phần của tài liệu Khai phá luật kết hợp (Trang 68)

Tải bản đầy đủ (PDF)

(97 trang)