Sử dụng weka để phân lớp trên Dataset SpamBase11.Giới thiệu về Dataset SpamBase11.1. Khái niệm về email và spam mail11.2.Giới thiệu về dataset SpamBase.12. Thực hành phân lớp trên weka32.1. Tiền xử lý dữ liệu42.1.1. Nạp dữ liệu42.1.2. Lọc thuộc tính52.2. Phân lớp bằng thuật toán Naive Bayer82.2.1. Thuật toán Naive Bayer82.2.2. Phân lớp trên weka122.2.3. Nhận xét16
Trang 1Họ 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
Trang 21.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
Trang 3 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_make
2.word_freq_address
3.word_freq_all
4.word_freq_3d
5.word_freq_our
6.word_freq_over
7.word_freq_remove
8.word_freq_internet
9.word_freq_order
10.word_freq_mail
11.word_freq_receive
12.word_freq_will
13.word_freq_people
14.word_freq_report
15.word_freq_addresses
16.word_freq_free
17.word_freq_business
18.word_freq_email
19.word_freq_you
20.word_freq_credit
21.word_freq_your
22.word_freq_font
23.word_freq_000
24.word_freq_money
25.word_freq_hp
26.word_freq_hpl
27.word_freq_george
28.word_freq_650
29.word_freq_lab
30.word_freq_labs
31.word_freq_telnet
32.word_freq_857
33.word_freq_data
Trang 435.word_freq_85
36.word_freq_technology
37.word_freq_1999
38.word_freq_parts
39.word_freq_pm
40.word_freq_direct
41.word_freq_cs
42.word_freq_meeting
43.word_freq_original
44.word_freq_project
45.word_freq_re
46.word_freq_edu
47.word_freq_table
48.word_freq_conference
49.char_freq_;
50.char_freq_(
51.char_freq_[
52.char_freq_!
53.char_freq_$
54.char_freq_#
55.capital_run_length_average
56.capital_run_length_longest
57.capital_run_length_total
58.class
2 Thực hành phân lớp trên weka
Sau khi cài đặt xong, mở weka, chọn explorer
Trang 52.1 Tiền xử lý dữ liệu
2.1.1 Nạp dữ liệu
Thô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
Trang 62.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
Trang 8Để xem kết quả lọc tất cả các thuộc tính: Chọn Visualize All
Trang 9Sau 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 Bayer
YÊ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
Trang 10mộ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 tốn xác suất sẽ dựa vào cơng thức Nạ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ện
Xá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 :
Trang 11P(Bk/A) = (P(ABk) )/(P(A) ) = (P(Bk) P(A/Bk) )/(ΣP(Bi) P(A/Bi)) P(Bi) P(A/Bi))
Phương pháp phân loại Nạ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 tốn địi hỏi phải dự đố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-non-spam thành non-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 :
Trang 12(P(C=spam | X=x) )/(P(C=non-spam | X=x)) > λ
Mặt khác
P(C=spam | X=x) = 1 - P(C=non-spam | X=x) và P(C=spam | X=x) > t
Như 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
Trang 13Thay 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 spam
nn : số email chứa token trong kho non-spam
s : số lần token xuất hiện trong kho spam
n : số lần token xuất hiện trong kho non-spam
Ns : tổng số email trong kho spam
Nn : tổng số email trong kho non-spam
2.2.2 Phân lớp trên weka
Trê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
Trang 14Ấn start
Trang 15Kế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%
Trang 16Classify 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
Trang 172.2.3 Nhận xét
Nế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