Cấu trúc dữ liệu...9 PHẦN II: DEMO ỨNG DỤNG THUẬT TỐN NẠVE BAYES ĐỂ DỰ ĐỐN KHẢ NĂNG SINH VIÊN TỐT NGHIỆP...10 1... Giới thiệu thuật tốn Naive Bayes Naive Bayes NB là phương pháp phân loạ
Trang 1MỤC LỤC
MỤC LỤC 1
LỜI MỞ ĐẦU 1
ĐẶT VẤN ĐỀ 2
PHẦN I: TỔNG QUAN VỀ THUẬT TỐN NẠVE BAYES 4
I Giới thiệu thuật tốn Naive Bayes 4
II Định lý Bayes và sự phân hoạch 4
1 Định lý Bayes 4
2 Sự phân hoạch 5
III Bộ phân lớp và các bước tính tốn 6
1 Bộ phân lớp Nạve Bayes 6
2 Các bước tính tốn 7
IV Sơ đồ và cấu trúc dữ liệu 7
1 Sơ đồ thực hiện 7
2 Sơ đồ khối của thuật tốn 8
3 Cấu trúc dữ liệu 9
PHẦN II: DEMO ỨNG DỤNG THUẬT TỐN NẠVE BAYES ĐỂ DỰ ĐỐN KHẢ NĂNG SINH VIÊN TỐT NGHIỆP 10
1 Tính xác xuất 10
2 Các thuật tốn chính được sử dụng để tạo Demo 11
3 Chương trình Demo 24
KẾT LUẬN 1 Tĩm tắt kết quả đạt được 29
2 Hướng phát triển 29
TÀI LIỆU THAM KHẢO 30
HVTH: Nguyễn Huỳnh Thuý Nga_MSSV: CH1301041_Lớp Cao học khĩa 8 Trang 1/ 30
Trang 2LỜI MỞ ĐẦU
Ngày nay, lĩnh vực cơng nghệ thơng tin (CNTT) đang phát triển trong thời
kỳ đỉnh cao nhất của nĩ Ngày càng cĩ nhiều ứng dụng ra đời nhằm đáp ứng yêucầu thiết yếu của con người Từ những yêu cầu đơn giản đến những yêu cầu cực
kỳ khắt khe về kỹ thuật
Trước khi đầu tư vào một lĩnh vực hay cần ra một quyết định quan trọng.Hầu hết mọi người đều muốn dự đốn trước mức độ rủi ro và tỉ lệ thành cơng rồimới đưa ra quyết định cuối cùng Vì vậy lĩnh vực dự đốn là một phần cực kỳquan trọng trong các ứng dụng hiện nay
Cĩ thể liệt kê ra một số ứng dụng quen thuộc như:
Dự đốn kết quả bầu cử
Đánh giá kết quả phát triển trong các lãnh vực nơng nghiệp
Định hướng phát triển thị trường
Phân lớp dữ liệu
Dự đốn khả năng tốt nghiệp của sinh viên
Các ứng dụng địi hỏi cĩ các thuật tốn đạt tính chính xác cao Một trongcác thuật tốn đĩ là thuật tốn phân lớp đối tượng Bayes (Thuật tốn xác suấtBayes)
Thuật tốn Nạve Bayes cĩ rất nhiều ứng dụng vào thực tiễn Tuy nhiên,với năng lực cịn hạn chế, cũng như khơng cĩ nhiều thời gian để cĩ thể nghiêncứu sâu vào tất cả các ứng dụng, nên em xin phép chọn đề tài “Ứng dụng thuậttốn Nạve Bayes để dự đốn khả năng sinh viên tốt nghiệp”
Em xin chân thành cảm ơn Thầy PGS.TS Đỗ Phúc Những tiết giảng quýbáu của Thầy đã cung cấp cho em những kiến thức nền tảng về các thuật tốn hỗtrợ ra quyết định bước khởi đầu giúp em nghiên cứu ứng dụng các thuật tốntrên nhiều lĩnh vực
Học Viên Cao Học Khĩa 8
NGUYỄN HUỲNH THUÝ NGA
HVTH: Nguyễn Huỳnh Thuý Nga_MSSV: CH1301041_Lớp Cao học khĩa 8 Trang 2/ 30
Trang 3
Một sinh viên năm cuối điểm trung bình 1,85, học lực trung bình, hình
thức đào tạo liên thông…
Những trường hợp này có thể ra trường không? Giảng viên cố vấn phải
quyết định tư vấn thế nào? Sinh viên phải quyết định ra sao? Học tiếp hay
chuyển điểm sang hình thức đào tạo thấp hơn phù hợp với năng lực?
Từ thực tế đó đòi hỏi phải có 1 phần mềm dự đoán tương đối chính xác khảnăng sinh viên tốt nghiệp Để góp phần cho giảng viên cố vấn học tập có thể đưa
ra quyết định tư vấn chính xác, sinh viên có thể đưa ra quyết định đúng đắn hơn
HVTH: Nguyễn Huỳnh Thuý Nga_MSSV: CH1301041_Lớp Cao học khóa 8 Trang 3/ 30
Trang 4
PHẦN I: TỔNG QUAN VỀ THUẬT TỐN NẠVE BAYES
I Giới thiệu thuật tốn Naive Bayes
Naive Bayes (NB) là phương pháp phân loại dựa vào xác suất được sửdụng rộng rãi trong lĩnh vực máy học của [Good,1965] [Mitchell, 1996][Joachims, 1997] [Jason, 2001], được sử dụng lần đầu tiên trong lĩnh vực phânloại bởi Maron vào năm 1961 [Maron, 1961] sau đĩ trở nên phổ biến dùngtrong nhiều lĩnh vực như trong các cơng cụ tìm kiếm [Rijsbergen et al, 1970],các bộ lọc email [Sahami et al, 1998]…
Định lý Bayes cho phép tính xác xuất xảy ra của một sự kiện ngẫu nhiên
A khi biết sự kiện ngẫu nhiên B liên quan đã xảy ra Xác xuất này được ký hiệu
là P(A/B) và đọc là “xác xuất của A nếu cĩ B” đại lượng này được gọi là xácxuất cĩ điều kiện hay xác xuất hậu nghiệm vì nĩ được rút ra từ giá trị được chocủa B hoặc phụ thuộc vào giá trị đĩ
Bayes dùng cho việc mơ hình hĩa tri thức trong các hệ thống y học, kỹthuật, xư lý ảnh, dung hợp dữ liệu và các hệ hỗ trợ quyết định
Bayes dùng để phân lớp dữ liệu, Email…
II Định lý Bayes và sự phân hoạch
1 Định lý Bayes
Giải thuật Naive Bayes chủ yếu dựa vào định lý xác suất của Bayes với
giả thuyết là các thuộc tính (Biến, Chiều) độc lập nhau và độ quan trọng của các thuộc tính bằng nhau:
Trong đĩ mẩu tin E=[E1, E2, E3 En] Cĩ n giá trị thuộc tính được biết như
là giá trị dữ liệu cần dự báo và H là lớp (nhãn) dự báo
P(H): Xác suất trước (tiên nghiệm) của giả thuyết (phân loại) H
HVTH: Nguyễn Huỳnh Thuý Nga_MSSV: CH1301041_Lớp Cao học khĩa 8 Trang 4/ 30
Trang 5
P(E): Xác suất trước (tiên nghiệm) của việc quan sát dữ liệu E.
P(E|H): Xác suất có điều kiện của việc quan sát được dữ liệu E nếu biết giả thuyết (phân loại) H là đúng
Với một tập giải thuyết các (phân lớp) H, là hệ thống học sẽ tìm ra giả
thử và được gọi là xác suất tiền nghiệm ( apriori probability) Xác suất P(A|Hi) cho biết khả năng tham gia của Hi vào việc xảy ra biến cố A Xác suất P(A|Hi) được gọi là xác suất hậu nghiệm ( a posteriori probability) Có thể tính các xác suất hậu nghiệm từ các xác suất tiền nghiệm theo công thức sau:
HVTH: Nguyễn Huỳnh Thuý Nga_MSSV: CH1301041_Lớp Cao học khóa 8 Trang 5/ 30
Trang 6
( ) ( | ) ( | )
III Bộ phân lớp và các bước tính tốn
1 Bộ phân lớp Nạve Bayes
Cho V1,V2, …, Vn là phân hoạch khơng gian mẫu V, mỗi Vi là một lớp
Khơng gian các thể hiện X gồm các thể hiện được mơ tả bởi tập thuộc tính A1, A2, …, An Khơng gian các thể hiện X là tập học Khi cĩ thể hiện mới với giá trị <a1,a2,…, an>, bộ phân lớp sẽ xuất hiện giá trị hàm phân lớp f(x) là một
P a a a
max ( ) ( , , ,P v P a a i 1 2 a v n| )i (4.1)Trong cơng thức trên cĩ hai số hạng cần quan tâm là P(v1) và P(a1,a2,…,an)
Ta tính P(vj) bằng cách đếm số lần xuất hiện của giá trị đích vj trong tập học Đểtính P(a1,a2,…,an) ta giả thuyết ban đầu các thuộc tính là độc lập Nĩi cách
khác, xác suất của một thể hiện quan sát được <a1, a2, …, an> trên mỗi lớp vj làtích của các khả năng của từng thuộc tính riêng biệt trên vj
- với NB là viết tắt của cụm từ Nạve Bayes
Bộ phân lớp Bayes liên quan đến bước học trong đĩ P(vj) và P(a1,a2,…,an) được tính dựa trên tập học
HVTH: Nguyễn Huỳnh Thuý Nga_MSSV: CH1301041_Lớp Cao học khĩa 8 Trang 6/ 30
Trang 7
Bước 1: Xác định các nhãn trong tập dữ liệu học.
Bước 2: Phân lớp các nhãn trên tập dữ liệu học
Dựa vào nhãn đã phân lớp, thống kê các loại mẩu tin trong nhãn theo phân
lớp Yes(Có) hay phân lớp No (Không) trên tập dữ liệu học
Bước 3: Tính tỷ lệ các loại mẩu tin theo phân lớp Yes (Có) hoặc No (Không) trên tập dữ liệu học
Bước 4: Tính xác suất của mẩu tin trên tập dữ liệu kiểm thử và đưa ra kết
luận
Tính xác suất của mẩu tin trong tập dữ liệu kiểm thử theo phân lớp Yes (Có)
và tinh xác suất của mẩu tin trong tập dữ liệu kiểm thử theo phân lớp No
(Không)
So sánh 2 kết quả:
Nếu xác suất dự báo mẩu tin cho lớp Yes (Có) lớn hơn lớp No (Không) thì
Naive Bayes gán cho lớp Yes (Có)
Nếu xác suất dự báo mẩu tin cho lớp No(Không) lớn hơn lớp Yes(Có) thì
Naive Bayes gán cho lớp No(Không)
IV Sơ đồ và cấu trúc dữ liệu
Trang 82 Sơ đồ khối của thuật toán
HVTH: Nguyễn Huỳnh Thuý Nga_MSSV: CH1301041_Lớp Cao học khóa 8 Trang 8/ 30
Trang 9 Cấu trúc dữ liệu lưu vector X(X1,X2, ,XN)
o public List<string> Vector;
o public List<string> VectorNameHeader;
* Diễn giải cấu trúc dữ liệu
Ta sử dụng một datatable như là một bảng dữ liệu Ở đó nó có thể chứa dữliệu rất lớn giống như một tài liệu Excel Sẽ có các cột, các dòng tùy theo sốlượng dữ liệu chúng ta quy định Đặc biệt thuận lợi khi lưu trữ dữ liệu dạngbảng số
List<Kiểu dữ liệu> Tên biến: Khai báo một dang sách liên kết đơn, nó giốngnhư một kiểu mảng Array lưu trữ dữ liệu một cách uyển chuyển và linh hoạt Nóchứa các phương thức Add (Thêm một phần tử), Sort (Sắp xếp dữ liệu), BinarySeach (Tìm kiếm nhị phân)
Ngoài ra còn một số cấu trúc dữ liệu đơn giản khác mà chúng em xin được phép không đưa vào báo cáo này Chúng em tập trung chủ yếu vào các cấu trúc
dữ liệu hay được sử dụng trong chương trình
HVTH: Nguyễn Huỳnh Thuý Nga_MSSV: CH1301041_Lớp Cao học khóa 8 Trang 9/ 30
Trang 10
PHẦN II: DEMO ỨNG DỤNG THUẬT TỐN NẠVE BAYES ĐỂ DỰ
ĐỐN KHẢ NĂNG SINH VIÊN TỐT NGHIỆP
1 Tính xác xuất
Xét bảng dữ liệu sau đây thơng qua việc xét một sinh viên đại học năm 4 cĩ khả năng tốt nghiệp khơng?
Cho t p d li u traning nh sau: ập dữ liệu traning như sau: ữ liệu traning như sau: ệu traning như sau: ư sau:
Hoc_luc_nam_HT Loai_hinh_DT Do_Tuoi no_mon Tot_nghiep
Gioi
Lien_thong_tu_x
V i t p d li u trên hãy áp d ng gi i th t Nạve Bayes ập dữ liệu traning như sau: ữ liệu traning như sau: ệu traning như sau: ụng giải thật Nạve Bayes để xác định phân ải thật Nạve Bayes để xác định phân ập dữ liệu traning như sau: để xác định phân xác định phân nh phân
l p cho m u sau: ẩu sau:
Hoc_luc_nam_HT Loai_hinh_DT Do_Tuoi No_mon Tot_nghiepGioi
Từ tính tốn trên, ước lượng xác suất dự báo mẫu tin X cho lớp
HVTH: Nguyễn Huỳnh Thuý Nga_MSSV: CH1301041_Lớp Cao học khĩa 8Trang 10/30
Trang 11
Tot_nghiep = no lớn hơn ước lượng xác suất lớp Tot_nghiep = yes, NB
gán nhãn X cho lớp no
+ Trường hợp nếu giá trị của thuộc tính không xuất hiện trong tất cả các lớp, chúng ta có thể áp dụng ước lượng Laplace để tránh trường hợp xác suất bằng 0 Giả sử μ là hằng số dương và pi là các hệ số dương mà ở đó p i 1 Công thức ước lượng xác suất cộng thêm cho tử số một giá trị là piμ và mẫu số
là μ để tính xác suất
+ Trường hợp dữ liệu liên tục:
Ở Bước 2 khi làm việc với dữ liệu liên tục, giả thuyết dữ liệu tuân theo phân phối chuẩn (GAUSS) Công thức tính xác suất dựa trên hàm mật độ xác suất
2 Các thuật toán chính được sử dụng để tạo Demo
Thuật toán tính xác xuất No cho dữ liệu liên tục
public double TinhNoNumFc (int _va,
Trang 12countStr = new double[arrM_Str.Count];
for (int i = 0; i < arrM_Str.Count; i++)
(RemoveSign4VietnameseString(CutStr(dt.Rows[j][m - 1].ToString())) ==
"no")) && (RemoveSign4VietnameseString(CutStr(dt.Rows[j]
[(int)arrM_Str[i]].ToString())) ==
(RemoveSign4VietnameseString(CutStr(gvi.GetRowCellDisplayText(_va, gvi.Columns[(int)arrM_Str[i]]).ToString())))))
countNum = new double[arrM_Num.Count];
for (int i = 0; i < arrM_Num.Count; i++)
Trang 13_ro = Math.Sqrt((double)_tamro / (tlyes_Num - 1));
// f = (1 / (Math.Sqrt(2 * Math.PI) * _ro)) * (Math.Pow(Math.E, (66 - _mi) * (double.Parse(gvi.GetRowCellDisplayText(_va,
((-gvi.Columns[(int)arrM_Num[i]]).ToString()) - _mi)) / (2 * _ro * _ro))));
f = (1 / (Math.Sqrt(2 * Math.PI) * _ro)) * (Math.Pow(Math.E, ((double.Parse(gvi.GetRowCellDisplayText(_va,
gtyes = (double)gtyes * (double)((double)t / dt.Rows.Count);
for (int i = 0; i < arrM_Num.Count; i++)
Trang 14}
return gtyes;
}
Thuật toán Tính xác xuất No cho dữ liệu không liên tục
public double TinhNoStrFnc(int _va,
count = new double[m];
for (int i = 0; i < m - 1; i++)
(RemoveSign4VietnameseString(CutStr(dt1.Rows[j][m - 1].ToString())) ==
"no")) && (RemoveSign4VietnameseString(CutStr(dt1.Rows[j]
[i].ToString()))==
(RemoveSign4VietnameseString(CutStr(gvi.GetRowCellDisplayText(_va, gvi.Columns[i]).ToString())))))
{
k++;
}
if ((RemoveSign4VietnameseString(CutStr(dt1.Rows[j][m - 1].ToString())) == "khong") ||
count[i] = (double)k / tlyes;
// MessageBox.Show("mang no" + (double)k / tlyes);
}
HVTH: Nguyễn Huỳnh Thuý Nga_MSSV: CH1301041_Lớp Cao học khóa 8Trang 14/30
Trang 15
countStr = new double[arrM_Str.Count];
for (int i = 0; i < arrM_Str.Count; i++)
(RemoveSign4VietnameseString(CutStr(dt.Rows[j]
[(int)arrM_Str[i]].ToString())) ==
(RemoveSign4VietnameseString(CutStr(gvi.GetRowCellDisplayText(_va, gvi.Columns[(int)arrM_Str[i]]).ToString())))))
{
k++;
}
if ((RemoveSign4VietnameseString(CutStr(dt.Rows[j][m - 1].ToString())) == "co") ||
Trang 16countStr[i] = (double)k / tlyes;
countNum = new double[arrM_Num.Count];
for (int i = 0; i < arrM_Num.Count; i++)
_ro = Math.Sqrt((double)_tamro / (tlyes_Num - 1));
f = (1 / (Math.Sqrt(2 * Math.PI) * _ro)) * (Math.Pow(Math.E, ((double.Parse(gvi.GetRowCellDisplayText(_va,
(-gvi.Columns[(int)arrM_Num[i]]).ToString()) - _mi) *
(double.Parse(gvi.GetRowCellDisplayText(_va,
gvi.Columns[(int)arrM_Num[i]]).ToString()) - _mi)) / (2 * _ro * _ro))));
HVTH: Nguyễn Huỳnh Thuý Nga_MSSV: CH1301041_Lớp Cao học khóa 8Trang 16/30
Trang 17
gtyes = (double)gtyes * (double)((double)t / dt.Rows.Count);
for (int i = 0; i < arrM_Num.Count; i++)
Thuật toán Yes cho dữ liệu không liên tục
public double TinhYesStrFnc(int
count = new double[m];
for (int i = 0; i < m - 1; i++)
Trang 18if (((RemoveSign4VietnameseString(CutStr(dt1.Rows[j][m - 1].ToString())) == "co") ||
(RemoveSign4VietnameseString(CutStr(dt1.Rows[j][m - 1].ToString())) ==
"yes")) && (RemoveSign4VietnameseString(CutStr(dt1.Rows[j]
[i].ToString())) ==
(RemoveSign4VietnameseString(CutStr(gvi.GetRowCellDisplayText(_va, gvi.Columns[i]).ToString())))))
{
k++;
}
if ((RemoveSign4VietnameseString(CutStr(dt1.Rows[j][m - 1].ToString()) )== "co") ||
// MessageBox.Show("Là yes" + gtyes);
gtyes = (double)gtyes * (double)((double)t / dt1.Rows.Count);
int count1; int count2;
int count3; int count4;
HVTH: Nguyễn Huỳnh Thuý Nga_MSSV: CH1301041_Lớp Cao học khóa 8Trang 18/30
Trang 19
CLASS.ClsQuery obj_que_h2 = new CLASS.ClsQuery();
dt1 = obj_que_h2.get_S_F_NoneW(txtDuongdan.Text, _value +
" ,count(*) as 'Tổng Số' ", "group by " + _value);
dt1 = obj_que_h2.get_S_F_NoneW(txtDuongdan.Text, _value +
" ,count(*) as 'Tổng Số' ", "group by " + _value);
DataTable dt2 = new DataTable();
count1 = 0; count2 = 0; count3 = 0; count4 = 0;
for (int k = 0; k < dttemp.Rows.Count; k++)
{
if
(((RemoveSign4VietnameseString(CutStr(dttemp.Rows[k][n -
1].ToString())) == "co") || (CutStr(dttemp.Rows[k][n - 1].ToString()) ==
"yes")) && (CutStr(dttemp.Rows[k]
== "co") || (CutStr(dttemp.Rows[k][n - 1].ToString()) == "yes"))
HVTH: Nguyễn Huỳnh Thuý Nga_MSSV: CH1301041_Lớp Cao học khóa 8Trang 19/30
Trang 20
tlyes_Num = 0; _total = 0; _tamro = 0;
for (int c = 0; c < dttemp.Rows.Count; c++)
_mi = (double)_total / tlyes_Num;
for (int l = 0; l < dttemp.Rows.Count; l++)
{
HVTH: Nguyễn Huỳnh Thuý Nga_MSSV: CH1301041_Lớp Cao học khóa 8Trang 20/30
Trang 21
_mino = (double)_totalNo / tlyes_NumNo;
for (int l = 0; l < dttemp.Rows.Count; l++)
Trang 22== "khong") || (RemoveSign4VietnameseString(CutStr(dttemp.Rows[l][n - 1].ToString())) == "no"))
((RemoveSign4VietnameseString(gridVi_InPut.GetRowCellDisplayText(0, gridVi_InPut.Columns[0])) == "yes")))
Trang 23dtnum.Rows.Add("Stddev","", _ro,ro_no);
gridView3.Columns.Clear();
grid_child_label.DataSource = dtnum.DefaultView; }
(RemoveSign4VietnameseString(CutStr(dt.Rows[k][n - 1].ToString())) ==
"yes")))
count1++;
if (((RemoveSign4VietnameseString(CutStr(dt.Rows[k][n - 1].ToString())) == "khong") ||