Tiểu luận khai phá dữ liệu sử dụng weka để phân lớp trên dataset spambase

20
Họ và tên: Nguyễn Thị Phượng Lớp hệ thống thông tin 6 Sử dụng weka để phân lớp trên Dataset SpamBase Contents Sử dụng weka để phân lớp trên Dataset SpamBase.......................1 1.Giới thiệu về Dataset SpamBase.....................................1 1.1. Khái niệm về email và spam mail................................1 1.2.Giới thiệu về dataset SpamBase..................................1 2. Thực hành phân lớp trên weka......................................3 2.1. Tiền xử lý dữ liệu.............................................4 2.1.1. Nạp dữ liệu................................................4 2.1.2. Lọc thuộc tính.............................................5 2.2. Phân lớp bằng thuật toán Naive Bayer...........................8 2.2.1. Thuật toán Naive Bayer.....................................8 2.2.2. Phân lớp trên weka........................................12 2.2.3. Nhận xét..................................................16

Transcript of Tiểu luận khai phá dữ liệu sử dụng weka để phân lớp trên dataset spambase

Page 1: Tiểu luận khai phá dữ liệu sử dụng weka để phân lớp trên dataset spambase

Họ và tên: Nguyễn Thị PhượngLớp hệ thống thông tin 6

Sử dụng weka để phân lớp trên Dataset SpamBase

ContentsSử dụng weka để phân lớp trên Dataset SpamBase.....................................................................................1

1.Giới thiệu về Dataset SpamBase...............................................................................................................1

1.1. Khái niệm về email và spam mail.....................................................................................................1

1.2.Giới thiệu về dataset SpamBase.........................................................................................................1

2. Thực hành phân lớp trên weka.................................................................................................................3

2.1. Tiền xử lý dữ liệu.............................................................................................................................4

2.1.1. Nạp dữ liệu................................................................................................................................4

2.1.2. Lọc thuộc tính............................................................................................................................5

2.2. Phân lớp bằng thuật toán Naive Bayer..............................................................................................8

2.2.1. Thuật toán Naive Bayer.............................................................................................................8

2.2.2. Phân lớp trên weka..................................................................................................................12

2.2.3. Nhận xét...................................................................................................................................16

Page 2: Tiểu luận khai phá dữ liệu sử dụng weka để phân lớp trên dataset spambase

1.Giới thiệu về Dataset SpamBase

1.1. Khái niệm về email và spam mail

Thư điện tử, hay email (từ chữ electronic mail), đôi khi được dịch không chính xác là điện thư, là một hệ thống chuyển nhận thư từ qua các mạng máy tính.

Email là một phương tiện thông tin rất nhanh. Một mẫu thông tin (thư từ) có thể được gửi đi ở dạng mã hoá hay dạng thông thường và được chuyển qua các mạng máy tính đặc biệt là mạng Internet. Nó có thể chuyển mẫu thông tin từ một máy nguồn tới một hay rất nhiều máy nhận trong cùng lúc.

Spam mail, còn gọi là thư rác, chính là những email được phát tán một cách rộng rãi không theo bất cứ một yêu cầu nào của người nhận với số lượng lớn.

Hiện nay cùng với sự bùng nổ số người sử dụng internet và tất nhiên cùng với nó là những cơ hội quảng cáo .Và từ đây Spam mail đã phát triển nhanh chóng. Các thư rác có thể vô hại nhưng mỗi ngày một người dùng có thể vì các thư rác này mà bị đầy cả một hộp thư, thường gây khó chịu cho người dùng, thậm chí có thể dẫn dụ những người nhẹ dạ, tìm đọc số thẻ tín dụng và các tin tức cá nhân của họ.

Do sự gia tăng hàng năm của thư rác, việc phân biệt xem email nào là thư rác, và email nào không phải trở nên cần thiết để tránh những phiền toái trên.

1.2.Giới thiệu về dataset SpamBase.Dataset SpamBase chứa kết quả của cuộc tổng hợp về các thư rác từ bưu điện và các cá nhân nhận được thư rác. Dataset có 58 thuộc tính, trong đó thuộc tính class cuối cùng nhận giá trị 0,1 để xác định xem đó có phải thư rác không.

48 thuộc tính đầu “word_freq_” nói về tỉ lệ % của các từ trong thư phù hợp với nội dung của thuộc tính nhắc đến. Ví dụ: word_freq_address: tỉ lệ % các từ trong thư phù hợp với địa chỉ gửi.

6 thuộc tính tiếp “char_freq_” tỉ lệ phần trăm các kí tự trong thư phù hợp với ký tự nhắc đến trong thuộc tính.

3 thuộc tính tiếp

capital_run_length_average: chiều dài trung bình không bị gián đoạn của chuỗi chữ viết hoa.

Page 3: Tiểu luận khai phá dữ liệu sử dụng weka để phân lớp trên dataset spambase

capital_run_length_longest: chiều dài lớn nhất không bị gián đoạn của chuỗi chữ viết hoa.

capital_run_length_total: tổng số lượng chữ in hoa trong email

Thuộc tính class cuối cùng nhận giá trị 0,1 để xác định xem đó có phải thư rác không.

Danh sách 58 thuộc tính:

1.word_freq_make2.word_freq_address3.word_freq_all4.word_freq_3d5.word_freq_our6.word_freq_over7.word_freq_remove8.word_freq_internet9.word_freq_order10.word_freq_mail11.word_freq_receive12.word_freq_will13.word_freq_people14.word_freq_report15.word_freq_addresses16.word_freq_free17.word_freq_business18.word_freq_email19.word_freq_you20.word_freq_credit21.word_freq_your22.word_freq_font23.word_freq_00024.word_freq_money25.word_freq_hp26.word_freq_hpl27.word_freq_george28.word_freq_65029.word_freq_lab30.word_freq_labs31.word_freq_telnet32.word_freq_85733.word_freq_data

Page 4: Tiểu luận khai phá dữ liệu sử dụng weka để phân lớp trên dataset spambase

34.word_freq_41535.word_freq_8536.word_freq_technology37.word_freq_199938.word_freq_parts39.word_freq_pm40.word_freq_direct41.word_freq_cs42.word_freq_meeting43.word_freq_original44.word_freq_project45.word_freq_re46.word_freq_edu47.word_freq_table48.word_freq_conference49.char_freq_;50.char_freq_(51.char_freq_[52.char_freq_!53.char_freq_$54.char_freq_#55.capital_run_length_average56.capital_run_length_longest57.capital_run_length_total58.class

2. Thực hành phân lớp trên wekaSau khi cài đặt xong, mở weka, chọn explorer

Page 5: Tiểu luận khai phá dữ liệu sử dụng weka để phân lớp trên dataset spambase

2.1. Tiền xử lý dữ liệu

2.1.1. Nạp dữ liệuThông thường, định dạng chuẩn file dữ liệu của Weka la file ARFF (Attribute Relation File Format), tuy nhiên rất nhiều DBMS và Spreadsheet cho phép tổ chức file dữ liệu dưới dạng file .csv (comma-separated values) và một điều thuận lợi là Weka cho phép đọc dữ liệu từ file .csv.

Trong bài này, ta chọn Spambase.arff

Sau khi dữ liệu được nạp lên, panel bên trái thể hiện các thuộc tính của file dữ liệu, panel bên phải thể hiện các thống kê tương ứng với thuộc tính bên trái

Page 6: Tiểu luận khai phá dữ liệu sử dụng weka để phân lớp trên dataset spambase

2.1.2. Lọc thuộc tính

Ở bước tiền xử lý này ta sẽ tiến hành loại bỏ những dữ liệu lỗi hoặc những thuộc

tính có quá nhiều giá trị rời rạc như trường ID, hoặc những giá trị bất thường.

Weka cung cấp cho ta chức năng filter những giá trị lỗi đó.

Trên giao diện Weka, chọn choose/Filter/unsupervise/Dicretize/Apply

Page 7: Tiểu luận khai phá dữ liệu sử dụng weka để phân lớp trên dataset spambase
Page 8: Tiểu luận khai phá dữ liệu sử dụng weka để phân lớp trên dataset spambase

Để xem kết quả lọc tất cả các thuộc tính: Chọn Visualize All

Page 9: Tiểu luận khai phá dữ liệu sử dụng weka để phân lớp trên dataset spambase

Sau quá trình tiền xử lý, ta bước sang phân lớp (classification)

2.2. Phân lớp bằng thuật toán Naive Bayer

2.2.1. Thuật toán Naive BayerYÊU CẦU BÀI TOÁN

Yêu cầu đặt ra là ngăn chặn spam bằng cách phân loại một email gửi đến là spam hay non-spam. Cần đạt được hiệu quả phân loại email thật khả quan. Tuy nhiên cần tuyệt đối tránh lỗi sai cho rằng email non-spam là spam vì có thể gây hậu quả nghiêm trọng hơn là khả năng lọc spam thấp. Do đó yêu cầu đối với hệ thống là phải nhận ra được email spam càng nhiều càng tốt và giảm thiểu lỗi nhận sai email non-spam là email spam.

HƯỚNG THỰC HIỆN

Ý tưởng của phương pháp là tìm cách xây dựng một bộ phân loại nhằm phân loại cho

Page 10: Tiểu luận khai phá dữ liệu sử dụng weka để phân lớp trên dataset spambase

một mẫu mới bằng cách huấn luyện từ những mẫu có sẵn. Ở đây mỗi mẫu mà ta xét đến chính là mỗi một email, tập các lớp mà mỗi email có thể thuộc về là y={spam, non-spam}

Khi ta nhận được 1 email mới gửi đến, khi đó ta dựa vào một số đặc điểm hay thuộc tính nào đó của email để tăng khả năng phân loại chính xác email đó. Các đặc điểm của 1 email như: tiêu đề, nội dung, có tập tin đính kèm hay không… Càng nhiều những thông tin như vậy xác suất phân loại đúng càng lớn, tất nhiên còn phụ thuộc vào kích thước của tập mẫu huấn luyện.

Việc tính toán xác suất sẽ dựa vào công thức Naïve Bayes, từ xác suất thu được ta đem so sánh với một giá trị ngưỡng t nào đó mà ta xem là ngưỡng để phân loại email spam hay non-spam. Nếu lớn hơn t thì email đó là spam, ngược lại là non-spam. Như ta đã biết khi phân loại email có hai lỗi : lỗi nhận 1 email non-spam thành spam và lỗi cho qua một email spam. Loại lỗi thứ nhất nghiêm trọng hơn, vì vậy ta xem mỗi một email non-spam như là λ email non-spam. Như vậy khi lỗi nhận 1 email non-spam thành spam xảy ra ta xem như là λ lỗi, và khi phân loại đúng xem như λ lần thành công. Ngưỡng để phân loại t sẽ phụ thuộc và chỉ số λ này.

CƠ SỞ LÝ THUYẾT

Công thức xác suất có điều kiệnXác suất điều kiện của biến cố A với điều kiện biến cố B đã xảy ra là một số không âm, ký hiệu là P( A/B ) nó biểu thị khả năng xảy ra biến cố A trong tình huống biến cố B đã xảy ra.P( A/B ) = (P( AB ))/(P( B ))Suy ra P( A/B ) . P( B ) = P( B/A ) . P( A ) = P( AB )

Công thức xác suất đầy đủ Giả sử B1, B2, … Bn là 1 nhóm đầy đủ các biến cố. Xét biến cố A sao cho A xảy ra chỉ khi một trong các biến cố B1, B2, … Bn xảy ra. Khi đó :P(A) = ∑ P(Bi) . P(A/Bi)

Công thức xác suất Bayes Từ các công thức ở trên ta có công thức xác suất Bayes :

Page 11: Tiểu luận khai phá dữ liệu sử dụng weka để phân lớp trên dataset spambase

P(Bk/A) = (P(ABk) )/(P(A) ) = (P(Bk) .P(A/Bk) )/(ΣP(Bi) .P(A/Bi))

Phương pháp phân loại Naïve-Bayesian

Phân loại Bayesian là phương pháp phân loại sử dụng tri thức các xác suất đã qua huấn luyện. Phương pháp này thích hợp với những lớp bài toán đòi hỏi phải dự đoán chính xác lớp của mẫu cần kiểm tra dựa trên những thông tin từ tập huấn luyện ban đầu

Giả thiết mỗi một email được đại diện bởi một vector thuộc tính đặc trưng là x = (x1, x2,…,xn) với x1, x2, …, xn là giá trị của các thuộc tính X1, X2,…,Xn tương ứng trong không gian vector đặc trưng X

Dựa vào công thức xác suất Bayes và công thức xác suất đầy đủ ta có được xác suất 1 email với vector đặc trưng x thuộc về loại c là :P(C=c | X=x) = (P(C=c) .P(X=x | C=c) )/(∑P(C=k) .P(X=x | C=k)) với C là email được xét , c € {spam, non-spam}

Xác suất P(C=c) được tính dễ dàng từ tập huấn luyện. Thực tế rất khó để tính được xác suất P(X=x | C=c) . Giả thiết rằng tất cả các biến cố X1, X2…Xn là độc lập với nhau do đó chúng ta có thể tính được xác suất P(X=x | C=c) dựa theo công thức:P(X=x | C=c) = ∏ P(Xi=xi | C=c)

Như vậy công thức tính xác suất 1 email là spam sẽ được viết thành : P(C=c | X=x) = (P(C=c) . ∏ P(Xi=xi | C=c) )/(∑ P(C=k) .∏ P(Xi=xi | C=k))

Từ xác suất này ta so sánh với một giá trị ngưỡng t là ngưỡng để phân loại email là spam hay không, nếu xác suất này lớn hơn t, ta cho email đó là spam, ngược lại email đó là non-spam

Trong phân loại email có 2 loại sai lầm, một là sai lầm nhận 1 email spam thành non-spam và sai lầm thứ 2 là nhận 1 email non-spam thành spam. Rõ ràng sai lầm thứ 2 là nghiêm trọng hơn vì người dùng có thể chấp nhận một email spam vượt qua bộ lọc nhưng không thể chấp nhận một email hợp lệ quan trọng lại bị bộ lọc chặn lại.

Giả sử ta gọi S->N và N->S tương ứng với 2 loại lỗi ở trên. Để hạn chế loại lỗi thứ 2 ta giả sử rằng lỗi N->S có chi phí gấp λ lỗi S->N nghĩa là ta phân loại 1 email là spam dựa theo :

Page 12: Tiểu luận khai phá dữ liệu sử dụng weka để phân lớp trên dataset spambase

(P(C=spam | X=x) )/(P(C=non-spam | X=x)) > λ

Mặt khácP(C=spam | X=x) = 1 - P(C=non-spam | X=x) và P(C=spam | X=x) > tNhư vậy ta giá trị ngưỡng t phụ thuộc vào λ, cụ thể : t = λ / (λ + 1)

PHƯƠNG PHÁP THỰC HIỆN

Để đánh giá 1 email ta phải chuyển mỗi một email sang một vector x = (x1,x2,...xn) với x1,x2,..xn là giá trị các thuộc tính X1,X2…Xn trong không gian vector đặc trưng X. Mỗi thuộc tính được thể hiện bởi một token đơn. Theo phương pháp đơn giản nhất ta có thể lập ra một từ điển chứa các token. Sau đó với mỗi token trong email nếu nó xuất hiện trong từ điển thì giá trị thuộc tính sẽ là 1, ngược lại thì là 0. Tuy nhiên trên thực tế, tập huấn luyện của ta không thường là một bộ từ điển như vậy. Thay vào đó tập huấn luyện lúc này sẽ gồm có 2 kho ngữ liệu. Kho ngữ liệu Spam sẽ chứa một list các email đã được xác định là spam trước đó, và tương tự với kho ngữ liệu Non-spam sẽ chứa các email hợp lệ.

Như vậy nếu ta vẫn để giá trị các thuộc tính là 0 hoặc 1 thì sẽ rất khó đánh giá được 1 email là spam hay không. Đặc biệt nếu email nhận được là dài, khi đó nếu ta vẫn sử dụng giá trị thuộc tính là 0 hoặc 1 thì sự xuất hiện của 1 token 100 lần cũng tương đương với việc xuất hiện chỉ 1 lần.

Để khắc phục vấn đề này giá trị thuộc tính bây giờ ta sẽ thay bằng xác suất spam của token đó. Xác suất này tương đương với xác suất spam của 1 email chỉ chứa token đó và là email spam. Việc tính xác suất này thì có nhiều phương pháp. Ta có thể tính dựa trên số lần xuất hiện của token này trong mỗi kho ngữ liệu học ban đầu. Ví dụ một token w có số lần xuất hiện trong kho ngữ liệu spam là s và non-spam là n, số email tổng cộng ở kho spam và non-spam tương ứng là Ns và Nn thì xác suất spam của token w này sẽ là :P(X=w | C=spam) = (s/Ns)/(s/Ns+n/Nn)

Tuy nhiên nhược điểm của phương pháp này khả năng spam của một token xuất hiện 100 lần ở 100 email khác nhau là bằng với khả năng spam của một token xuất hiện 100 lần chỉ ở trong 1 email.

Page 13: Tiểu luận khai phá dữ liệu sử dụng weka để phân lớp trên dataset spambase

Thay vào việc tính xác suất này dựa theo số lần xuất hiện của token trong từng kho ngữ liệu ta có thể dựa vào số email chứa token trong từng kho ngữ liệu. Ví dụ một token w có số email chứa nó trong kho ngữ liệu spam và non-spam là ns và nn thì xác suất spam của token w này sẽ là :P(X=w | C=spam) = (s/Ns)/(ns/Ns+nn/Nn)

Nhược điểm của phương pháp này là khả năng spam của một token xuất hiện 1 lần trong 1 email là bằng với khả năng spam của một token xuất hiện 100 lần trong 1 email.

Vì vậy chúng ta sử dụng cách thứ ba là tổng hợp của hai cách trên :P(X=w | C=spam) = ((s*ns)/Ns)/((ns*s)/Ns+(nn*n)/Nn))

Còn đối với các token chỉ xuất hiện trong kho ngữ liệu này mà không xuất hiện trong kho ngữ liệu kia thì không thể kết luận một token chỉ xuât hiện ở kho ngữ liệu spam thì không bao giờ xuất hiện trong kho ngữ liệu non-spam và ngược lại. Cách thích hợp thì ta sẽ gán cho chúng một giá trị phù hợp. Với những token chỉ xuất hiện trong kho ngữ liệu spam thì ta gán xác suất spam cho nó là giá trị N gần với 1 ( chẳng hạn 0,9999) và ngược lại thì gán xác suất spam là giá trị M gần với 0 ( chẳng hạn 0,0001).

Như vậy ta có công thức tính xác suất spam của token dựa trên số lần xuất hiện và số email chứa nó là : P = Max ( M, Min ( N, ((ns*s)/Ns)/((ns*s)/Ns+(nn*n)/Nn) ) )

ns : số email chứa token trong kho spamnn : số email chứa token trong kho non-spams : số lần token xuất hiện trong kho spamn : số lần token xuất hiện trong kho non-spamNs : tổng số email trong kho spamNn : tổng số email trong kho non-spam

2.2.2. Phân lớp trên wekaTrên giao diện weka, chọn classify/Choose/bayers/NaiveBayers

Mục Cross-validation để mặc định 10

Chọn More option để thiết lập ouput. Tại đây ta tích thêm vào mục output predictions để hiện thêm phần dự báo.

Page 14: Tiểu luận khai phá dữ liệu sử dụng weka để phân lớp trên dataset spambase

Ấn start

Page 15: Tiểu luận khai phá dữ liệu sử dụng weka để phân lớp trên dataset spambase

Kết quả:

Kết quả thống kê cho thấy có 3890 mẫu được phân loại đúng chiếm 84,5468%, và 711 mẫu phân loại sai chiếm 15.4532% .

Page 16: Tiểu luận khai phá dữ liệu sử dụng weka để phân lớp trên dataset spambase

Classify output còn cung cấp cho chúng ta thấy Confusion Matrix để biểu diễn rằng:

- 1433 mẫu của class 1 thì có 380 mẫu được phân lọa đúng và có 1 mẫu sai thành class 0.

- 2457 mẫu class 0 thì có 331 mẫu phân loại đúng có 1 mẫu phân lớp sai thành class 1.

Ouput cũng hiển thị chi tiết dự đoán trong quá trình thực hiện thuật toán.

Có lỗi ở mẫu #7,#13,#14, đã phân lớp sai, thực tế thuộc class 0, lại phân thành class 1.

Page 17: Tiểu luận khai phá dữ liệu sử dụng weka để phân lớp trên dataset spambase

2.2.3. Nhận xétNếu so sánh với thuật toán khác ví dụ như C4.5 (phân lớp bằng cây quyết định j48) thì việc phân lớp bằng Naive Bayers đối với dataset Spambase nhanh hơn nhiều và cũng chính xác hơn, cụ thể

Với Naive Bayers, kết quả thống kê cho thấy có 3890 mẫu được phân loại đúng chiếm 84,5468%, và 711 mẫu phân loại sai chiếm 15.4532% . Với J48, 3868 mẫu được phân loại thì đúng chiếm 84,0687% và sai chiếm 15,9313%. Trong khi thời gian phân lớp của Naive Bayers vẫn nhanh hơn J48.