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ú[.]
Trang 1MÁY HỌC – NẠVE BAYES
1 Các cấu trúc dữ liệu cần dùng
Các cấu trúc dữ liệu cần sử dụng khi cài đặt thuật tốn Nạve Bayes để phân loại mẫu mới, bao gồm:
Mẫu dữ liệu: mỗi mẫu tương ứng với một loại nấm trong dữ liệu
Tập dữ liệu: bao gồm nhiều mẫu dữ liệu và số lượng mẫu trong mỗi lớp tương
ứng (ăn được hay cĩ độc
Giá trị xác suất các thuộc tính cho từng lớp
NaiveBayes: biểu diễn thuật tốn Nạve Bayes và lưu các giá trị thống kê cĩ được
từ dữ liệu
1.1 Mẫu dữ 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 như sau:
Mushroom m;
1.2 Tập dữ liệu
struct TapDuLieu{
vector<Mushroom> duLieu;
int soLuongCoDoc;
int soLuongAnDuoc;
};
Để sử dụng cấu truc trên, khai báo như sau:
TapDuLieu d;
Giá trị xác suất cho các giá trị các thuộc tính cho từng lớp
Trang 2struct 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;
};
2 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 khi đọc chưa hết tập tin
while(!f.eof())
{
//2.1 Đọc dòng dữ liệu
f.getline( );
//2.2 Phân tách theo dấu phẩy, tạo nấm và thêm vào tập dữ liệu
}
}
Trang 3Tập dữ liệu Mushroom cĩ 2 lớp là khơng cĩ đơc/ăn được (e) và cĩ độc (p) Để cài đặt thuật tốn Nạve Bayes, chúng ta cần cài đặt các phương thức sau:
2.2.1 Tính xác suất cho mỗi lớp
Xác suất này cho biết khả năng một loại nấm là cĩ độc hay khơng cĩ độc
Cơng thức tính (cĩ làm trơn theo Laplace):
𝑃(𝑒) = 𝑆ố 𝑛ấ𝑚 𝑘ℎơ𝑛𝑔 độ𝑐 + 1
𝑇ổ𝑛𝑔 𝑠ố 𝑛ấ𝑚 + 2 𝑃(𝑝) = 𝑆ố 𝑛ấ𝑚 𝑐ĩ độ𝑐 + 1
𝑇ổ𝑛𝑔 𝑠ố 𝑛ấ𝑚 + 2
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 các giá trị thuộc tính
Lặp cho mỗi lớp 𝐶,
Lặp cho mỗi thuộc tính 𝑥
Lặp với mỗi giá trị của 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 là tổng số các khả năng cĩ thể của x
2.2.3 Phân loại cho nấm mới
Tính xác suất mẫu mới thuộc loại khơng độc theo cơng thức:
𝑃(𝐶 = 𝑒|𝑥) = 𝑃(𝐶 = 𝑒) ∏ 𝑃(𝑥𝑘|𝐶 = 𝑒)
𝑛
𝑘=1 Tính xác suất mẫu mới thuộc về loại cĩ độc theo cơng thức
𝑃(𝐶 = 𝑝|𝑥) = 𝑃(𝐶 = 𝑝) ∏ 𝑃(𝑥𝑘|𝐶 = 𝑝)
𝑛
𝑘=1 Nếu 𝑃(𝐶 = 𝑒|𝑥) > 𝑃(𝐶 = 𝑝|𝑥) thì nấm khơng cĩ độc
Ngược lại là cĩ độc