Tải bản đầy đủ (.pdf) (22 trang)

Tiểu luận môn CÔNG NGHỆ TRI THỨC VÀ ỨNG DỤNG TÌM HIỂU VÀ CÀI ĐẶT THUẬT TOÁN PHÂN LỚP NAIVE BAYES

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (898.53 KB, 22 trang )



MỤC LỤC
Trang
LỜI NÓI ĐẦU 1
CHƯƠNG I PHƯƠNG PHÁP PHÂN LỚP BAYES 2
1. Phân lớp là gì? 2
2. Phương pháp phân lớp Bayes 3
2.1. Tổng quan 3
2.2. Định lý Bayes 4
2.3. Phân lớp Naïve Bayes (NBC) 6
2.4. Phương pháp sửa lỗi Laplace 7
2.5. Ưu khuyết điểm 9
2.5.1. Ưu điểm 9
2.5.2. Khuyết điểm 10
CHƯƠNG II CÀI ĐẶT THỬ NGHIỆM VÀ KẾT QUẢ 11
1. Cài đặt thử nghiệm 11
1.1. Các lớp cấu trúc cơ sở dữ liệu (gói dataset) 11
1.2. Các lớp mô hình và thuật toán phân lớp NaiveBayesian (gói model) 12
2. Kết quả thử nghiệm 16
CHƯƠNG III KẾT LUẬN 20
TÀI LIỆU THAM KHẢO 21
Bài thu hoạch môn Công nghệ tri thức GS.TSKH. Hoàng Văn Kiếm

SVTH: Trầm Hoàng Nam - CH1301100 Trang 1/21

LỜI NÓI ĐẦU
Cùng với sự phát triển nhanh chóng, vượt bậc của ngành công nghiệp máy tính,
nhu cầu của người dùng đối với máy tính ngày một cao hơn, không chỉ giải quyết
những công việc lưu trữ, tính toán bình thường, người dùng còn mong đợi máy tính có
khả năng thông minh hơn, có thể giải quyết vấn đề như con người. Theo đó, bất kỳ


một lĩnh vực nào cũng ứng dụng công nghệ tri thức vào quá trình hoạt động, từ đó
lượng dữ liệu không ngừng tăng lên một cách bùng nổ. Mỗi công ty, doanh nghiệp
phải lưu trữ hệ thống cơ sở dữ liệu đa dạng, khổng lồ. Tuy nhiên, vấn đề bất cập hiện
nay là chúng ta đang “ngập” trong biển dữ liệu nhưng lại “đói” tri thức.
Chính vì vậy, vấn đề đặt ra là liệu chúng ta có thể khai thác được gì từ những biển
dữ liệu tưởng chừng như vô nghĩa đó? Do đó, khai mỏ dữ liệu - Data Mining ra đời
như một hướng giải quyết hữu hiệu cho vấn đề trên, giúp khai thác, rút trích ra những
thông tin, tri thức hữu ích từ các cơ sở dữ liệu đó. Trong lĩnh vực khai phá dữ liệu,
phân lớp dữ liệu giúp phân loại các mẫu dữ liệu nhằm mô tả các lớp quan trọng hay
dự đoán khuynh hướng dữ liệu trong tương lai. Qua đó, các nhà lãnh đạo sẽ đánh giá
các tri thức để xem xét xây dựng chiến lược hoạt động phù hợp trong tương lai.
Chính vì lợi ích thực tiễn trên mà phân lớp được ứng dụng rộng rãi trong nhiều
lĩnh vực, đặc biệt là thương mại. Có nhiều phương pháp phân lớp dữ liệu, trong đó
Naïve Bayes là phương pháp được triển khai rộng rãi vì sự đơn giản, dễ triển khai và
hiệu quả khá cao. Tiểu luận này là kết quả lĩnh hội được sau khi học môn Công nghệ
tri thức và ứng dụng, đặc biệt là phần khai mỏ dữ liệu. Tiểu luận chủ yếu trình bày các
vấn đề chính về thuật toán phân lớp dữ liệu Naïve Bayes và tiến hành cài đặt
thuật toán này bằng ngôn ngữ Java với gói thư viện OpenCSV.
Em xin chân thành cảm ơn GS. TSKH Hoàng Văn Kiếm, giảng viên môn Công
nghệ Tri thức và Ứng dụng, đã truyền đạt cho chúng em những kiến thứ quý báu về
môn học, giúp chúng em có cái nhìn xa hơn về một thời đại công nghệ và sự phục vụ
của các hệ tri thức.
Do kiến thức còn hạn hẹp, nên tiểu luận không tránh khỏi những sai sót nhất định.
Kính mong Thầy góp ý giúp em hoàn thiện tiểu luận cũng như cũng cố vốn kiến thức
của bản thân. Em xin chân thành cảm ơn!
Bài thu hoạch môn Công nghệ tri thức GS.TSKH. Hoàng Văn Kiếm

SVTH: Trầm Hoàng Nam - CH1301100 Trang 2/21

CHƯƠNG I

PHƯƠNG PHÁP PHÂN LỚP BAYES
1. Phân lớp là gì?
Phân lớp dữ liệu (data classification) là việc phân loại các mẫu dữ liệu vào một
trong các nhóm đã xác định trước sao cho đặc tính của mẫu dữ liệu gần với đặc tính
của nhóm đó nhất.
Phần lớp dữ liệu gồm hai bước: xây dựng mô hình và vận hành mô hình.
Bước 1: Xây dựng mô hình nhằm mục tiêu mô tả một tập những lớp được định
nghĩa trước, trong đó mỗi bộ hoặc mẫu sẽ được gán về một lớp đã xác định trước bởi
thuộc tính nhãn lớp. Tập hợp những bộ được dùng để xây dựng mô hình được gọi là tập
dữ liệu học. Mô hình được biểu diễn dưới dạng luật phân lớp, cây quyết định hoặc công
thức toán học

Hình 1: Xây dựng mô hình
Bước 2: Vận hành mô hình nhằm mục đích xác định lớp của dữ liệu tương lai
hoặc phân lớp những đối tượng chưa biết. Trước khi vận hành mô hình cần đánh giá
độ chính xác của mô hình trong đó các mẫu kiểu kiểm tra được đem so sánh với kết
quả phân lớp của mô hình.
Độ chính xác (accuracy) của bộ phân lớp trên tập kiểm tra cho trước là phần trăm
của các mẫu trong tập kiểm tra được bộ phân lớp xếp lớp đúng.


Lưu ý, tập kiểm tra và tập học là hai tập độc lập với nhau.
sampltest ofnumber total
sampletest classifiedcorrectly
Accuracy
Bài thu hoạch môn Công nghệ tri thức GS.TSKH. Hoàng Văn Kiếm

SVTH: Trầm Hoàng Nam - CH1301100 Trang 3/21



Hình 2: Vận hành mô hình
2. Phương pháp phân lớp Bayes
2.1. Tổng quan
Trong lĩnh vực Data Mining, Bayes Theorem (hay Bayes’ Rule) là kỹ thuật phân
lớp dựa vào việc tính xác suất có điều kiện. Bayes’ Rule được ứng dụng rất rộng rãi
bởi tính dễ hiểu và dễ triển khai.
Mục đích của Naïve Bayes: cho biết mẫu dữ liệu mới thuộc vào lớp nào với độ
chính xác cao nhất có thể.
Dữ liệu đầu vào: tập dữ liệu huấn luyện, mẫu dữ liệu mới cần kiểm tra
Dữ liệu đầu ra: phân lớp của mẫu dữ liệu cần kiểm tra.
Thông thường, giải thuật Naïve Bayes giả định rằng tất cả các thuộc tính (biến)
đều quan trọng như nhau và độc lập với nhau. Tức là, nếu có sự hiện diện hay vắng
mặt của một thuộc tính sẽ không làm ảnh hưởng đến sự hiện diện hay vắng mặt của
thuộc tính khác.
Ví dụ như: một quả táo có thể xem là một quả táo khi nó có: màu là đỏ, hình dạng
là cầu, đường kính là khoảng 3 inch, … Nếu thiếu đi thuộc tính hình dạng là cầu thì
hai thuộc tính còn lại vẫn đóng góp độc lập vào xác suất để xác định là quả táo.
Mặc dù giải thuật Naïve Bayes khá đơn giản nhưng trong thực tế lại cho kết quả
khá tốt. Năm 2006, một thống kê so sánh toàn diện cho thấy phân lớp Naïve Bayes
cho kết quả tốt hơn các giải thuật phân lớp khác, chẳng hạn như sự tăng của cây cối và
rừng tự phát.
Lợi thế của Naïve Bayes là có thể ước tính các thông số (trung bình và phương sai
của các thuộc tính – biến ) cần thiết cho việc phân lớp chỉ cần nhờ vào một tập dữ liệu
huấn luyện nhỏ. Giả định các biến là độc lập với nhau nên khi một thuộc tính thay đổi
Bài thu hoạch môn Công nghệ tri thức GS.TSKH. Hoàng Văn Kiếm

SVTH: Trầm Hoàng Nam - CH1301100 Trang 4/21

thì chỉ cần xác định lại các thông số thuộc tính đó chứ không cần phải xác định lại
thông số toàn bộ thuộc tính.

Ứng dụng của định lý Bayes thường dựa trên một giả thiết có tính triết học
Bayesian probability ngầm định rằng độ bất định và kỳ vọng có thể tính toán được
giống như là xác suất. Định lí Bayes được đặt theo tên của Reverend Thomas Bayes
(1702—1761), người nghiên cứu cách tính một phân bố với tham số là một phân bố
nhị phân. Người bạn của ông, Richard Price, chỉnh sửa và giới thiệu công trình năm
1763, sau khi Bayes mất, với tựa đề An Essay towards solving a Problem in the
Doctrine of Chances. Pierre-Simon Laplace mở rộng kết quả trong bài luận năm 1774.
Bayes Thoerem được triển khai rất rộng rãi trong Data Mining vì dễ hiểu, dễ triển
khai. Tuy nhiên, Bayes Theorem giả thiết rằng các biến trong mô hình là độc lập nhau.
Nếu các biến không độc lập nhau thì Bayes Theorem cho kết quả thiếu chính xác.
Hiện nay có rất nhiều Data Mining Software triển khai Naïve Bayes Classifier như
Weka, XMMiner, StatSoft,…
2.2. Định lý Bayes
Định lý Bayes cho phép tính xác suất xảy ra của một sự kiện ngẫu nhiên C khi biết
sự kiện liên quan E đã xảy ra. Xác suất này được ký hiệu là P(C|E), và đọc là “xác
suất của C nếu có E”. Đại lượng này được gọi xác suất có điều kiện hay xác suất hậu
nghiệm vì nó được rút ra từ giá trị được cho của E hoặc phụ thuộc vào giá trị đó.
posterior
tconsgnormalizin
priorlikelihood
EP
CPCEP
ECP 




tan_)(
)()|(
)|(


Từ đó dẫn tới
)()|()()()|( CPCEPECPEPECP 

 P(C|E): Xác suất xảy ra C khi E đã xảy ra.
 P(E|C): Xác suất xảy ra E khi C đã xảy ra. Đại lượng này gọi là khả năng
(likelihood) xảy ra E khi biết C đã xảy ra.
 P(C): Xác suất xảy ra C, không quan tâm đến B. Đây được gọi xác suất
tiên nghiệm (prior), nó là "tiên nghiệm" theo nghĩa rằng nó không quan tâm
đến bất kỳ thông tin nào về B.
 P(E): Xác suất xảy ra E, không quan tâm đến C. Đại lượng này còn gọi là
hằng số chuẩn hóa (normalising constant), vì nó luôn giống nhau, không
Bài thu hoạch môn Công nghệ tri thức GS.TSKH. Hoàng Văn Kiếm

SVTH: Trầm Hoàng Nam - CH1301100 Trang 5/21

phụ thuộc vào sự kiện A đang muốn biết.
Theo định lí Bayes, xác suất xảy ra C khi biết E sẽ phụ thuộc vào 3 yếu tố:
 Xác suất xảy ra C của riêng nó (prior), không quan tâm đến E. Kí hiệu là
P(C) và đọc là xác suất của C. Đây được gọi là xác suất biên duyên hay
xác suất tiên nghiệm, nó là “tiên nghiệm” (trước khi kiểm chứng) theo
nghĩa rằng nó không quan tâm đến bất kỳ thông tin nào về E.
 Xác suất xảy ra E của riêng nó, không quan tâm đến C. Kí hiệu là P(E) và
đọc là “xác suất của E”. Đại lượng này còn gọi là hằng số chuẩn hóa
(normalising constant), vì nó luôn giống nhau, không phụ thuộc vào sự
kiện C đang muốn biết.
 Xác suất xảy ra E khi biết C xảy ra. Kí hiệu là P(E|C) và đọc là "xác suất
của E nếu có C". Đại lượng này gọi là khả năng (likelihood) xảy ra E khi
biết C đã xảy ra. Chú ý không nhầm lẫn giữa khả năng xảy ra E khi biết C
và xác suất xảy ra C khi biết E.

Ví dụ minh họa
75% người mắc bệnh quai bị thì bị cúm. Tỉ lệ một người bình thường mắc bệnh
quai bị là 1/15000. Tỉ lệ một người bình thường mắc bệnh cúm là 1/1000. Hỏi: Nếu
một người đang mắc bệnh cúm thì xác suất người đó cũng mắc bệnh quai bị là bao
nhiêu?
Giải
 Gọi C là thuộc tính bị bệnh quai bị.
 Gọi E là thuộc tính bị bệnh cúm.
Ta có:
 Xác suất người mắc bệnh cúm trên người mắc bệnh quai bị: P(E|C) = 75%
= ¾
 Xác suất một người bình thường mắc bệnh quai bị: P(C) = 1/15000
 Xác suất một người bình thường mắc bệnh cúm: P(E) = 1/1000
Như vậy:
P(E)
P(C) C)|P(E
)|(

ECP

Bài thu hoạch môn Công nghệ tri thức GS.TSKH. Hoàng Văn Kiếm

SVTH: Trầm Hoàng Nam - CH1301100 Trang 6/21


20/105.0
1000
1
)
15000

1
4
3
(
)|( 

ECP

2.3. Phân lớp Naïve Bayes (NBC)
 Gọi F (field) là các thuộc tính của tập dữ liệu
 Gọi E (evidence) = (E
1,
E
2
, E
3
, …, E
n
) là các giá trị quan sát (thu thập) ứng
với từng thuộc tính. E là mẫu dữ liệu điều kiện.
 Gọi C (class) là thuộc tính phân lớp dữ liệu (C có bao nhiêu giá trị khác
nhau thì dữ liệu sẽ phân thành bấy nhiêu lớp tương ứng).
Công thức Naïve Bayes như sau:
)(
)|( )|()|()(
)|(
21
EP
CCEPCCEPCCEPCCP
ECCP

knkkk
k



Hay:







c
k
k
ni
kik
k
ECCP
CCEPCCP
ECCP
1
1
)|(
)|()(
)|(

Trong đó:
 K: giá trị quy định cho C

k
là thuộc tính phân lớp nào.
 P(E): tổng xác suất mà mẫu dữ liệu điều kiện E có thể xảy ra trên tất cả các
giá trị của thuộc tính phân lớp hay tổng các likelihood(C = C
k
).



c
k
k
ECCPEP
1
)|()(
. K quy định cho C
k
thay đổi lần lượt ứng với từng
thuộc tính phân lớp.




ni
ki
CCEP
1
)|(
: ứng với likelihood


)(
k
CCP 
: ứng với prior




c
k
k
ECCP
1
)|(
: ứng với normalzing_contant = tổng các likelihood(C = C
k
)

)|( ECCP
k

: ứng với posterior
Nên ta có thể biểu diễn:
tconsgnormalizin
priorlikelihood
posterior
tan_




Bài thu hoạch môn Công nghệ tri thức GS.TSKH. Hoàng Văn Kiếm

SVTH: Trầm Hoàng Nam - CH1301100 Trang 7/21

Mô tả như sau:

Các xác suất tính bằng thống kê tần suất:
 Xác suất một phân lớp xảy ra
P(C
k
) = P(C = C
k
) = (số mẫu thuộc lớp C
k
)/(tổng số mẫu)
 Xác suất một giá trị quan sát (của một thuộc tính) xảy ra ứng với một phân lớp
R
i
(e
i
| C
k
) = P(E
i
= e
i
| C = C
k
) = (số mẫu trong lớp C
k

E
i
= e
i
)/(số mẫu của lớp C
k
)
trong đó:
+ E
i
: thuộc tính thứ i
+ e
i
: giá trị trong thuộc tính E
i

2.4. Phương pháp sửa lỗi Laplace
Tránh xác suất bằng 0 hoặc bằng 1.
 P(C = C
k
) = (số mẫu thuộc lớp C
k
+ 1)/(tổng số mẫu + tổng số phân lớp của
thuộc tính phân lớp)
 R
i
(e
i
| C
k

) = P(E
i
= e
i
| C = C
k
) = (số mẫu trong lớp C
k
E
i
= e
i
+ 1)/(số mẫu
của lớp C
k
+ số giá trị quan sát của thuộc tính E
i
) trong đó:
E
i
: thuộc tính thứ I; e
i
: giá trị trong thuộc tính E
i

 Tập dữ liệu huấn luyện ghi nhận các ngày đi chơi và không đi chơi với thời
tiết dựa trên các thuộc tính: Ngoài trời, Nhiệt độ, Gió. Thuộc tính phân
lớp là: đi chơi.

Bài thu hoạch môn Công nghệ tri thức GS.TSKH. Hoàng Văn Kiếm


SVTH: Trầm Hoàng Nam - CH1301100 Trang 8/21

Ngày
Ngoài trời
Nhiệt độ
Gió
Đi chơi
1
Nắng
Nóng
Yếu
Không
2
Nắng
Mát
Mạnh
Không
3
Âm u
Lạnh
Yếu

4
Mưa
Mát
Yếu

Bảng thống kê tần suất :
Thuộc tính

Giá trị quan sát (thu thập)
Tần suất
Tỉ lệ

Không

Không
Ngoài trời
Nắng
0
2
0/2
2/2
Âm u
1
0
1/2
0/2
Mưa
1
0
1/2
0/2
Nhiệt độ
Nóng
0
1
0/2
1/2
Mát

1
1
1/2
1/2
Lạnh
1
0
1/2
0/2
Gió
Mạnh
0
1
0/2
1/2
Yếu
2
1
2/2
1/2
Đi chơi
2
2
2/4
2/4
Cho mẫu dữ liệu điều kiện (E) như sau:
Ngoài trời
Nhiệt độ
Gió
Đi chơi

Nắng
Mát
Mạnh
?
Với mẫu dữ liệu điều kiện như trên, ta có nên đi chơi ?
Từ bảng thống kê tần suất: R
ngoài trời
(Nắng,Có ) = P(Ngoài trời = Nắng | Có) = 0/2
Vì xác suất không thể bằng 0 nên ta phải dùng kỹ thuật sửa lỗi Laplace. Ta sẽ có
bảng thống kê tần suất mới như sau:
Bảng thống kê tần suất sau khi sửa lỗi Laplace:





Bài thu hoạch môn Công nghệ tri thức GS.TSKH. Hoàng Văn Kiếm

SVTH: Trầm Hoàng Nam - CH1301100 Trang 9/21

Thuộc tính
Giá trị quan sát
(thu thập)
Tần suất
Tỉ lệ

Không

Không
Ngoài trời

Nắng
1
3
1/5
3/5
Âm u
2
1
2/5
1/5
Mưa
2
1
2/5
1/5
Nhiệt độ
Nóng
1
2
1/5
2/5
Mát
2
2
2/5
2/5
Lạnh
2
1
2/5

1/5
Gió
Mạnh
1
2
1/4
2/4
Yếu
3
2
3/4
2/4
Đi chơi
3
3
3/6
3/6
Lúc này R
ngoài trời
(Nắng,Có ) = P(Ngoài trời = Nắng | Có) = 1/5
Prior(có) = 3/6
Prior(không) = 3/6
Likelihood(có) = 1/5 × 2/5 × 1/4 = 1/50 = 0,02
Likelihood(không) = 3/5 × 2/5 × 2/4 = 3/25 = 0,12
Normalzing_contant = 0,02 + 0,12 = 0,14
Xác suất phân lớp C = “Có” xảy ra ứng với mẫu dữ liệu điều kiện E
07,0
14,0
6
3

02,0
P(E)
prior(có) (có)likelihood
)|""( 



 ECóCP

Xác suất phân lớp C = “Không” xảy ra ứng với mẫu dữ liệu điều kiện E
429,0
14,0
6
3
12,0
P(E)
(không)prior (không)likelihood
)|""( 



 EKhôngCP

 Như vậy: P(C = “Có” | E) < P(C = “Không”|E) nên xác suất lựa chọn không
đi chơi là cao hơn.
2.5. Ưu khuyết điểm
2.5.1. Ưu điểm
 Dễ hiểu, cài đặt nhanh do giả định các thuộc tính là độc lập.
 Cho kết quả khá chính xác trong thực tế mặc dù chịu những giả thuyết về
Bài thu hoạch môn Công nghệ tri thức GS.TSKH. Hoàng Văn Kiếm


SVTH: Trầm Hoàng Nam - CH1301100 Trang 10/21

tính độc lập thống kê của thuộc tính.
 Phân lớp không yêu cầu phải ước lượng một cách chính xác.
 Có thể ước tính các thông số (trung bình và phương sai của các thuộc tính –
biến ) cần thiết cho việc phân lớp chỉ cần nhờ vào một tập dữ liệu huấn
luyện nhỏ.
 Chạy được cả trong trường hợp một số mẫu bị thiếu dữ liệu.
2.5.2. Khuyết điểm
 Giả thiết về tính độc lập điều kiện của các thuộc tính làm giảm độ chính
xác.
 Dữ liệu có nhiều thuộc tính dư thừa thì Naïve Bayes không còn hiệu quả.
 Dữ liệu liên tục có thể không tuân theo phân phối chuẩn.
Bài thu hoạch môn Công nghệ tri thức GS.TSKH. Hoàng Văn Kiếm

SVTH: Trầm Hoàng Nam - CH1301100 Trang 11/21

CHƯƠNG II
CÀI ĐẶT THỬ NGHIỆM VÀ KẾT QUẢ
1. Cài đặt thử nghiệm
Chương trình minh họa thuật toán Naïve Bayesian được viết bằng ngôn ngữ Java.
Trong đó, có sử dụng gói thư viện OpenCSV để đọc ghi file dữ liệu định dạng csv.
Do hạn chế về thời gian cài đặt thuật toán, nên chương trình chỉ mới xử lý trên dữ
liệu dạng thể loại (categorical data) hoặc dữ liệu số đã được rời rạc hóa (discretized
data). Dữ liệu số liên tục sẽ được xem xét đưa vào chương trình khi điều kiện thời
gian cho phép.
Mã nguồn chương trình gồm 2 gói: gói dataset chứa các cấu trúc dữ liệu cần xử lý
và gói model chứa mô hình và thuật toán phân lớp Naïve Bayesian.
dataset

model

Hình 1: Mô hình 2 gói dataset và model
1.1. Các lớp cấu trúc cơ sở dữ liệu (gói dataset)

Hình 2: Các lớp cấu trúc dữ liệu – Gói dataset
a. Lớp Attribute: biểu diễn một thuộc tính trong bộ dữ liệu
- Các thuộc tính:
o String name: tên thuộc tính
o String value: giá trị thuộc tính
Bài thu hoạch môn Công nghệ tri thức GS.TSKH. Hoàng Văn Kiếm

SVTH: Trầm Hoàng Nam - CH1301100 Trang 12/21

o Boolean isPredict: thể hiện thuộc tính này có phải là thuộc tính cần tiên
đoán không (nếu thuộc tính này là thuộc tính cần tiên đoán thì gía trị sẽ
được gán bằng true).
b. Lớp Itemlist: biểu diễn một dòng trong bộ dữ liệu, bao gồm một tập hợp
các Attribute.
- Các thuộc tính:
o ArrayList<Attribute> itemList: danh sách các thuộc tính của dòng dữ
liệu
- Các phương thức:
o getItem(int i): lấy thuộc tính thứ i trong danh sách
o addItem(Attribute a): thêm thuộc tính a vào danh sách
c. Lớp TrainingDataset/TestingDataset: biểu diễn bộ dữ liệu đào tạo/thử
nghiệm
- Các thuộc tính:
o ArrayList<Itemset> dataRows: danh sách các dòng dữ liệu thuộc bộ dữ
liệu đào tạo.

o ArrayList<String> attributeNames: danh sách tên thuộc tính thuộc bộ dữ
liệu đào tạo.
o int attributeCount: tổng số thuộc tính trong bộ dữ liệu đào tạo.
- Các phương thức:
o readFromCSVFile(String filename): đọc dữ liệu từ file .csv và đưa vào
bộ dữ liệu đào tạo/thử nghiệm.
o setPredictAttID(int i): gán thuộc tính tiên đoán cho bộ dữ liệu đào tạo
qua chỉ số i.
o setPredictAttName(String name): gán thuộc tính tiên đoán cho bộ dữ
liệu qua tên thuộc tính.
o getPredicAttID(): lấy chỉ số của thuộc tính tiên đoán.
1.2. Các lớp mô hình và thuật toán phân lớp NaiveBayesian (gói model)
Bài thu hoạch môn Công nghệ tri thức GS.TSKH. Hoàng Văn Kiếm

SVTH: Trầm Hoàng Nam - CH1301100 Trang 13/21


Hình 4: Các lớp mô hình (gói model)
a. Lớp BayesianAttribute: Chứa một thuộc tính tương ứng với một lớp trong
mô hình phân lớp (ví dụ: thuộc tính Tuổi trong lớp Độ an toàn = Có)
- Các thuộc tính:
o String name: tên thuộc tính
o String className: tên lớp
o ArrayList<values>: danh sách các giá trị của thuộc tính.
o HashTable<String, Integer> frequencyTable: bảng băm thống kê tần suất
xuất hiện của mỗi giá trị của thuộc tính name xuất hiện trong lớp
className: có key là giá trị của thuộc tính, và value là số lần xuất hiện
của giá trị key tương ứng với lớp classname.
Ví dụ 1: Xét bộ dữ liệu về thông tin khách hàng của một ngân hàng có các
thuộc tính Tuổi, Thu nhập, Nghề nghiệp, Tình trạng sở hữu nhà, Độ an toàn. Trong

đó, Độ an toàn là thuộc tính cần tiên đoán, có 2 giá trị Có và Không. Vậy thuộc tính
với thuộc tính Tuổi ta có 02 đối tượng BayesianAttribute tương ứng với 2 lớp Có và
Không. Dưới đây là minh họa về thuộc tính Tuổi tương ứng với lớp Có
Thuộc tính
Giá trị
name
Tuoi
className
Co
values
<Tre, Trung Nien, Gia>
Bài thu hoạch môn Công nghệ tri thức GS.TSKH. Hoàng Văn Kiếm

SVTH: Trầm Hoàng Nam - CH1301100 Trang 14/21

frequencyTable
Key
Value
Tuoi = Tre | Co
20
Tuoi = Trung Nien |
Co
24
Tuoi = Gia | Co
30

- Các phương thức:
o update(Attribute a): cập nhật giá trị của bảng băm frequencyTable khi
duyệt bộ dữ liệu đào tạo và gặp một thuộc tính a. Nếu giá trị đã tồn tại
trong bảng băm thì tăng tần suất xuất hiện của giá trị đó lên 1, ngược lại

thì thêm giá trị đó vào bảng băm và gán tần suất xuất hiện bằng 1.
o laplaceCorrection(): sửa lỗi Laplace cho thuộc tính tương ứng với một
lớp khi không tìm thấy một key (ví dụ: Tuoi = Thanh nien | Co), khi đó
thêm key chưa tìm thấy vào bảng tần suất xuất hiện frequencyTable,
gán value bằng 1 cho key đó, và tăng tần suất xuất hiện của tất cả các
key còn lại trong bảng frequencyTable lên 1.
b. Lớp NaiveBayesianModel: biểu diễn một mô hình phân lớp NaiveBayes
đã được đào tạo. Mô hình chứa số liệu thống kê về tần suất xuất hiện của tất
cả các giá trị của các thuộc tính tương ứng với các lớp trong dữ liệu đào tạo.
- Thuộc tính:
o TrainingDataset trainingData: bộ dữ liệu đào tạo
o ArrayList<String> classes: danh sách tên các lớp cần tiên đoán
o int classCount: số lượng các lớp cần tiên đoán
o ArrayList<BayesianAttribute> countTable: danh sách các đối tượng
kiểu BayesianAttribute chứa tần suất xuất hiện của các giá trị thuộc tính
tương ứng với các tên lớp trong toàn bộ dữ liệu đào tạo.
Ví dụ 2: Với bộ dữ liệu đã nên trong bộ Ví dụ 1, countTable sẽ chứa 8 đối tượng
kiểu BayesianAttribute bao gồm:
<Tuổi, Độ an toàn = Có>
<Tuổi, Độ an toàn = Không>
<Thu nhập, Độ an toàn = Có>
<Thu nhập, Độ an toàn = Không>
Bài thu hoạch môn Công nghệ tri thức GS.TSKH. Hoàng Văn Kiếm

SVTH: Trầm Hoàng Nam - CH1301100 Trang 15/21

<Nghề nghiệp, Độ an toàn = Có>
<Nghề nghiệp, Độ an toàn = Không>
<Tình trạng sở hữu nhà, Độ an toàn = Có>
< Tình trạng sở hữu nhà, Độ an toàn = Không>

- Các phương thức
o exploreData(): Phương thức này đọc toàn bộ dữ liệu đào tạo và đưa vào
mô hình phân lớp. Quá trình hoạt động gồm 2 bước:
Bước 1: duyệt qua bộ dữ liệu đào tạo để xác định tất cả các giá trị của
thuộc tính tiên đoán để lấy danh sách các nhãn cần tiên đoán đưa vào
danh sách classNames.
Bước 2: duyệt bộ dữ liệu đào tạo lần thứ 2: với mỗi thuộc tính của
mỗi dòng dữ liệu đào tạo, cập nhật bảng tần suất xuất hiện của giá trị
của thuộc tính đang xét vào trong đối tượng kiểu BayesianAttribute
tương ứng.
Kết thúc phương thức này, thông tin về tần suất xuất hiện của mỗi giá
trị thuộc tính tương ứng với từng lớp trong bộ dữ liệu đào tạo đã được
cập nhật vào mô hình phân lớp (chứa trong bảng countTable)
o int getAttributeIndex(String attName, String className): lấy từ trong
danh sách countable chỉ số của đối tượng BayesianAttribute có tên
thuộc tính là attName và thuộc lớp className.
o ArrayList<BayesianAttribute> getCountTable(): trả về toàn bộ bảng
thống kê tần suất xuất hiện của giá trị thuộc tính.
c. Lớp NaiveBayesianAlgo: biểu diễn thuật toán Naïve Bayesian với một mô
hình phân lớp cho trước.
- Các thuộc tính:
o NaiveBayesianModel model: mô hình phân lớp đã được đào tạo.
- Phương thức:
o String predict(Itemset dataRow): trả về kết quả tiên đoán là nhãn được
gán cho dataRow sau khi đưa vào mô hình phân lớp model. Phương thức
xử lý như sau: tuần tự xét từng lớp C
i
: với mỗi thuộc tính a thuộc
dataRow, tính xác suất độc lập của giá trị của a tương ứng với kết quả
Bài thu hoạch môn Công nghệ tri thức GS.TSKH. Hoàng Văn Kiếm


SVTH: Trầm Hoàng Nam - CH1301100 Trang 16/21

phân lớp là C
i
. Sau đó nhân dồn các xác suất độc lập của các thuộc tính
này với xác suất của lớp C
i
. Kết quả nhãn phân lớp thuộc về lớp có xác
xuất cao nhất.
Trình tự khi muốn thực hiện một bài toán phân lớp là:
- Khởi tạo bộ dữ liệu đào tạo từ file car_training.csv (trong thư mục
testdata).
- Gán thuộc tính tiên đoán cho bộ dữ liệu đào tạo.
- Khởi tạo mô hình phân lớp.
- Đào tạo mô hình phân lớp bằng cách đọc bộ dữ liệu đào tạo bằng phương
thức exploreData().
- Khởi tạo bộ dữ liệu thử nghiệp từ file car_testing.csv (trong thư mục
testdata).
- Yêu cầu mô hình phân lớp tiên đoán nhãn cho từng dòng trong dữ liệu thử
nghiệm và ghi kết quả ra file car_results.csv (trong thư mục ketqua).
Lưu ý: tất cả file có định dạng CSV với ký hiệu phân cách là dấu chấm phẩy (“;”).
VD:
buying; mant; doors; person; lug_boot; safety
vhigh; vhigh; 2; 2; small; low
vhigh; vhigh; 2; 2; small; high
vhigh; vhigh; 2; 2; med; med.
2. Kết quả thử nghiệm
Thử nghiệm được triển khai trên bộ dữ liệu CAR được cung cấp bởi UCI
Repository. Bộ dữ liệu có 6 thuộc tính dạng thể loại (categorical data) để mô tả thông

tin của một chiếc xe hơi, bao gồm:
buying: chi phí cho mua xe
mant: chi phí cho bảo trì xe
doors: số cửa
persons: số chỗ ngồi
lug_boot: kích thước hành lý
safety: tính an toàn
evaluation: đánh giá
Bài thu hoạch môn Công nghệ tri thức GS.TSKH. Hoàng Văn Kiếm

SVTH: Trầm Hoàng Nam - CH1301100 Trang 17/21

Trong đó evaluation là thuộc tính phân lớp, có 4 giá trị: unacc (không chấp nhận
được), acc (chấp nhận được), good (tốt), vgood (hoặc rất tốt). Mục đích của thao tác
phân lớp là dự đoán một loại xe với các đặc trưng cho sẵn sẽ được đánh giá ra sao:
không chấp nhận được, chấp nhận được, tốt, hoặc rất tốt.
Toàn bộ dữ liệu có 1728 mẫu. Bộ dữ liệu được chia làm 2 phần không giao nhau:
- Bộ dữ liệu đào tạo – training dataset: 864 mẫu
- Bộ dữ liệu kiểm thử - testing dataset: 864 mẫu, trong đó số mẫu thuộc mỗi
lớp phân bố không đều nhau, được liệt kê ở bảng sau:
Tên lớp

Số mẫu
unacc

613
acc

186
good


30
vgood

35
Để kiểm tra độ chính xác của thuật toán với khi thay đổi số mẫu dữ liệu đào tạo, ta
giảm dần số lượng mẫu dữ liệu trong tập đào tạo, mỗi lần 10%, kết quả được mô tả ở
bảng sau:
#training
item
864
432
288
216
172
144
123
108
96
86
#correct
730
726
697
681
695
687
652
675
660

649
accuracy
84%
84%
81%
79%
80%
80%
75%
78%
76%
75%

Biểu đồ sau thể hiện sự biến thiên của độ chính xác phân lớp khi số lượng mẫu dữ
liệu đào tạo giảm dần.
Bài thu hoạch môn Công nghệ tri thức GS.TSKH. Hoàng Văn Kiếm

SVTH: Trầm Hoàng Nam - CH1301100 Trang 18/21


Qua thí nghiệm trên, có thể thấy thuật toán Naïve Bayesian thực hiện khá tốt thao
tác phân lớp trên tập dữ liệu CAR. Kể cả khi số mẫu dữ liệu giảm đến 90%, thì độ
chính xác của thuật toán chỉ suy giảm 9% (từ 84% xuống 75%). Kết quả trên cho thấy
thuật toán Naïve Bayesian có thể ứng dụng trên những bài toán phân lớp có yêu cầu
độ chính xác không quá cao, hoặc trong trường hợp hạn chế về số mẫu dữ liệu đào
tạo.

Bài thu hoạch môn Công nghệ tri thức GS.TSKH. Hoàng Văn Kiếm

SVTH: Trầm Hoàng Nam - CH1301100 Trang 19/21



Thử nghiệm này cũng chưa xét đến độ nhạy cảm của thuật toán khi xử lý dữ liệu
bất đối xứng. Tuy nhiên, qua thống kê ban đầu, có thể thấy thuật toán tiên đoán tốt
trên lớp chiếm ưu thế hơn. Điều này có thể bắt nguồn từ sự bất đối xứng trong bộ dữ
liệu đào tạo, khi số lượng mẫu dữ liệu chiếm ưu thế cao hơn rất nhiều so với số lượng
mẫu dữ liệu thuộc các lớp còn lại.

Bài thu hoạch môn Công nghệ tri thức GS.TSKH. Hoàng Văn Kiếm

SVTH: Trầm Hoàng Nam - CH1301100 Trang 20/21

CHƯƠNG III
KẾT LUẬN
Khai mỏ dữ liệu – Data mining tuy là một hướng tiếp cận mới nhưng thu hút
được rất nhiều sự quan tâm của các nhà nghiên cứu nhờ vào những ứng dụng thực
tiễn rộng rãi. Hầu hết các lĩnh vực y học, kinh doanh, tài chính và thị trường chứng
khoán, công nghệ thông tin, điện tử viễn thông… đã vận dụng linh hoạt để cải thiện
cũng như cho ra đời các sản phẩm, dịch vụ phù hợp với người dùng trong thời đại
công nghệ mới.
Trong đó, Bayes Theorem là kỹ thuật phân lớp dựa vào việc tính xác suất có điều
kiện. Bayes’ Rule được ứng dụng rất rộng rãi bởi tính dễ hiểu và dễ triển khai.
Tiểu luận đã trình bày các kiến thức kỹ thuật phân lớp dữ liệu Naïve Bayes và tiến
hành cài đặt thử nghiệm với ngôn ngữ lập trình Java
Hướng phát triển tiếp theo của em là tiếp tục cài đặt kiểm định thuật toán với
lượng dữ liệu lớn và ứng dụng vào thực tiễn. Đồng thời, tiếp tục tìm hiểu, cài đặt thử
nghiệm các thuật toán như luật kết hợp, gom cụm, tập thô, khai phá văn bản…
Một lần nữa em xin chân thành cảm ơn GS. TSKH Hoàng Văn Kiếm đã hướng
dẫn, truyền đạt tận tình kiến thức và kinh nghiệm quý báu về Công nghệ tri thức cho
chúng em. Từ đó giúp em có thêm kiến thức mới về ngành Công nghệ thông tin, qua

đó cũng giúp em hoàn thành tiểu luận này.
Em xin chân thành cảm ơn!
Bài thu hoạch môn Công nghệ tri thức GS.TSKH. Hoàng Văn Kiếm

SVTH: Trầm Hoàng Nam - CH1301100 Trang 21/21

TÀI LIỆU THAM KHẢO
[1] GS.TSKH Hoàng Văn Kiếm, Slide bài giảng Công nghệ Tri thức và Ứng dụng.
[2] GS.TSKH Hoàng Văn Kiếm, TS. Đỗ Phúc, TS. Đỗ Văn Nhơn – Giáo trình Các
hệ Cơ sở Tri thức, Nhà xuất bản Đại học Quốc gia TPHCM, 2009.
[3] PGS.TS. Đỗ Phúc, Khai thác dữ liệu, NXB Đại học Quốc gia TP.HCM, 2005.
[4] Đỗ Thanh Nghị, “Bài giảng Phương pháp học Bayes Bayesian classification”,
Đại học Cần Thơ, 2008.
[5] Huỳnh Ngọc Tín, Nguyễn Trác Thức, Tôn Thất Hòa An, Giáo trình lập trình
Java, NXB Đại học Quốc gia TP.HCM, 2005.
[6] Neil, M. and Fenton, N. (1996): “Predicting software quality using Bayesian
Belief Networks” Proceeding of 21st Annual Software Engineering Workshop,
NASA/Goddard Space Flight Center, December 4-5, 1996.
[7] Brian S. G. E. Sahely; David M. Bagley (2001): “Diagnosing upsets in
anaerobic wastewater treatment using Bayesian Belief Networks.” Journal of
Environmental Engineering 127(4) (2001).

×