Các hệ thống thông minh nhân tạo và ứng dụng Các hệ thống thông minh nhân tạo và ứng dụng Khoa CNTT, ĐH KHTN HCM 1 HƯỚNG DẪN THỰC HÀNH MÁY HỌC – NAÏVE BAYES 1 Các cấu trúc dữ liệu cần dùng Các cấu trú[.]
Các hệ thống thông minh nhân tạo ứng dụng HƯỚNG DẪN THỰC HÀNH MÁY HỌC – NAÏVE BAYES Các cấu trúc liệu cần dùng Các cấu trúc liệu cần sử dụng cài đặt thuật toán Naïve Bayes để phân loại mẫu mới, bao gồm: Mẫu liệu: mẫu tương ứng với loại nấm liệu Tập liệu: bao gồm nhiều mẫu liệu số lượng mẫu lớp tương ứng (ăn hay có độc Giá trị xác suất thuộc tính cho lớp NaiveBayes: biểu diễn thuật tốn Nạve Bayes lưu giá trị thống kê có từ liệu 1.1 Mẫu liệu – nấm struct Mushroom{ char loaiNam; char hinhDang; char beMat; char mauSac; char vetTham; char muiHuong; char mauBaoTu; char phanBo; char moiTruong; }; Để sử dụng cấu trúc trên, khai báo sau: Mushroom m; 1.2 Tập liệu struct TapDuLieu{ vector duLieu; int soLuongCoDoc; int soLuongAnDuoc; }; Để sử dụng cấu truc trên, khai báo sau: TapDuLieu d; Giá trị xác suất cho giá trị thuộc tính cho lớp Khoa CNTT, ĐH KHTN HCM Các hệ thống thông minh nhân tạo ứng dụng struct XacSuatThuocTinh{ double xacSuatHinhDang[6]; double xacSuatBeMat[4]; double xacSuatMauSac[9]; double xacSuatVetTham[2]; double xacSuatMuiHuong[9]; double xacSuatBaoTu[9]; double xacSuatPhanBo[6]; double xacSuatMoiTruong[7]; }; NaiveBayes struct NaiveBayes{ double xacSuatKhongDoc; double xacSuatCoDoc; XacSuatThuocTinh lopKhongDoc; XacSuatThuocTinh lopCoDoc; }; Cài đặt 2.1 Đọc thông tin từ tập tin đầu vào void DocTapDuLieu(char* duongDan, TapDuLieu &d){ //1 Mở tập tin ifstream f; //2 Trong đọc chưa hết tập tin while(!f.eof()) { //2.1 Đọc dòng liệu f.getline( ); //2.2 Phân tách theo dấu phẩy, tạo nấm thêm vào tập liệu } } Khoa CNTT, ĐH KHTN HCM Các hệ thống thơng minh nhân tạo ứng dụng 2.2 Thuật tốn Nạve Bayes Tập liệu Mushroom có lớp khơng có đơc/ăn (e) có độc (p) Để cài đặt thuật tốn Nạve Bayes, cần cài đặt phương thức sau: 2.2.1 Tính xác suất cho lớp Xác suất cho biết khả loại nấm có độc hay khơng có độc Cơng thức tính (có làm trơn theo Laplace): 𝑆ố 𝑛ấ𝑚 𝑘ℎơ𝑛𝑔 độ𝑐 + 𝑃(𝑒) = 𝑇ổ𝑛𝑔 𝑠ố 𝑛ấ𝑚 + 𝑆ố 𝑛ấ𝑚 𝑐ó độ𝑐 + 𝑃(𝑝) = 𝑇ổ𝑛𝑔 𝑠ố 𝑛ấ𝑚 + double XacSuatKhôngDoc(const TapDuLieu &d){ double p = (d.soLuongAnDuoc + 1)/(d.duLieu.size()+2); } Sinh viên tự viết cho xác suất có độc 2.2.2 Tính xác suất cho giá trị thuộc tính Lặp cho lớp 𝐶, Lặp cho thuộc tính 𝑥 Lặp với giá trị thuộc tính 𝑥𝑘 Tính xác suất theo cơng thức sau 𝑚 = 𝑠ố 𝑚ẫ𝑢 𝑡ℎ𝑢ộ𝑐 𝑙ớ𝑝 𝐶, 𝑐ó 𝑔𝑖á 𝑡𝑟ị 𝑥 𝑡ạ𝑖 𝑡ℎ𝑢ộ𝑐 𝑡í𝑛ℎ 𝑝 𝑚+1 𝑃(𝑥|𝐶) = 𝑠ố 𝑚ẫ𝑢 𝑡ℎ𝑢ộ𝑐 𝑙ớ𝑝 𝐶 + 𝑘 Lưu giá trị vào đối tượng NaiveBayes, k tổng số khả x 2.2.3 Phân loại cho nấm Tính xác suất mẫu thuộc loại không độc theo công thức: 𝑛 𝑃(𝐶 = 𝑒|𝑥) = 𝑃(𝐶 = 𝑒) ∏ 𝑃(𝑥𝑘 |𝐶 = 𝑒) 𝑘=1 Tính xác suất mẫu thuộc loại có độc theo cơng thức 𝑛 𝑃(𝐶 = 𝑝|𝑥) = 𝑃(𝐶 = 𝑝) ∏ 𝑃(𝑥𝑘 |𝐶 = 𝑝) 𝑘=1 Nếu 𝑃(𝐶 = 𝑒|𝑥) > 𝑃(𝐶 = 𝑝|𝑥) nấm khơng có độc Ngược lại có độc Khoa CNTT, ĐH KHTN HCM ... xacSuatMuiHuong[9]; double xacSuatBaoTu[9]; double xacSuatPhanBo[6]; double xacSuatMoiTruong[7]; }; NaiveBayes struct NaiveBayes{ double xacSuatKhongDoc; double xacSuatCoDoc; XacSuatThuocTinh lopKhongDoc; XacSuatThuocTinh... thống thông minh nhân tạo ứng dụng 2.2 Thuật tốn Nạve Bayes Tập liệu Mushroom có lớp khơng có đơc/ăn (e) có độc (p) Để cài đặt thuật tốn Nạve Bayes, cần cài đặt phương thức sau: 2.2.1 Tính xác suất...