Thuật toán ID3 bị giới hạn bởi việc liên quan đến tập những giá trị rời rạc. Trong thuật toán C4.5 chúng ta sẽ mở rộng phạm vi hoạt của nó cho những thuộc tính có giá trị liên tục (giá trị số) để phù hợp với thế giới thực.
Bảng 2-3: Tập dữ liệu có giá trị liên tục
Quang cảnh Nhiệt độ Độ ẩm Gió Chơi tennis
Nắng Nóng 85 Nhẹ Không
Nắng Nóng 90 Mạnh Không
Âm u Nóng 78 Nhẹ Có
Mưa Ấm áp 96 Nhẹ Có
Mưa Mát 80 Nhẹ Có
Mưa Mát 70 Mạnh Không
Âm u Mát 65 Mạnh Có Nắng Ấm áp 95 Nhẹ Không Nắng Mát 70 Nhẹ Có Mưa Ấm áp 80 Nhẹ Có Nắng Ấm áp 70 Mạnh Có Âm u Ấm áp 90 Mạnh Có Âm u Nóng 75 Nhẹ Có
Mưa Ấm áp 80 Mạnh Không
Thuật toán C4.5 đưa ra định nghĩa những giá trị rời rạc mới để phân những giá trị liên tục thành những thuộc tính tượng trưng một lần nữa theo các quy tắc sau:
• Dựa trên một giá trị nếu muốn phân chia nhị phân. • Dựa trên vài giá trị nếu muốn có nhiều nhánh.
• Với mỗi giá trị tính các mẫu thuộc một lớp theo dạng A < v và A > v. • Cách chọn giá trị v hiệu quả:
o Chọn giá trị trung bình của từng cặp giá trị của thuộc tính để phân chia và tính chỉ số gia lượng thông tin.
o Chọn giá trị phân chia có chỉ số gia lượng thông tin cao nhất
Ví dụ: từ Bảng 2-3 ta tính gia lượng thông tin Gain(Sđộ ẩm, độ ẩm=67.5) như sau : Entropy(S) = - (9/14)log2(9/14) – (5/14)log2(5/14) = 0.940
EntropyĐộ ẩm =67.5(SĐộ ẩm) = (1/14)×Entropy(SĐộ ẩm≤67.5) + (13/14)×Entropy(SĐộ ẩm>67.5) = (1/14)(0) + (13/14)(-8/13)log2(8/13) – 5/13log2(5/13)) = 0.893
Gain(SĐộ ẩm, Độ ẩm=67.5) = 0.940 – 0.893 = 0.047 Tính tương tự cho các giá trị còn lại ta có bảng sau:
Độ ẩm 65 70 75 78 80 85 90 95 96 67.5 72.5 76.5 79 82.5 87.5 92.5 95.5 ≤ > ≤ > ≤ > ≤ > ≤ > ≤ > ≤ > ≤ > Có 1 8 3 6 4 5 5 4 7 2 3 2 8 1 8 1 Không 0 5 1 4 1 4 1 4 2 3 7 2 4 1 5 0 Gain 0.047 0.646 0.045 0.090 0.102 0.025 0.010 0.047
Như vậy ta có giá trị để phân chia là 72.5
2.4.3.2. Thuộc tính nhiều giá trị
Thuật toán ID3 bị giới hạn bởi việc liên quan đến những thuộc tính có nhiều giá trị, mà các giá trị này lại duy nhất. Khi đó, việc chia một tập dữ liệu thành thành quá nhiều các tập con dẫn đến số lượng các lớp tại mỗi nút giảm và do đó Entropy trên thuộc tính đó cũng giảm theo, nên gia lượng thông tin (Gain) sẽ cao hơn các thuộc tính khác. Vì vậy thuộc tính này sẽ được lựa chọn thường xuyên để tách, dẫn đến độ phân nhánh lớn, cây sẽ rất lớn và phức tạp.
Ví dụ : ta thêm thuộc tính “Ngày” vào Bảng 2-3 thì ta có:
Bảng 2-4: Bảng dữ liệu thời tiết về chơi tennis
Ngày Quang cảnh Nhiệt độ Độ ẩm Gió Chơi tennis
D1 Nắng Nóng 85 Nhẹ Không
D2 Nắng Nóng 90 Mạnh Không
D3 Âm u Nóng 78 Nhẹ Có
D4 Mưa Ấm áp 96 Nhẹ Có
D5 Mưa Mát 80 Nhẹ Có
D6 Mưa Mát 70 Mạnh Không
D7 Âm u Mát 65 Mạnh Có
D8 Nắng Ấm áp 95 Nhẹ Không
D10 Mưa Ấm áp 80 Nhẹ Có
D11 Nắng Ấm áp 70 Mạnh Có
D12 Âm u Ấm áp 90 Mạnh Có
D13 Âm u Nóng 75 Nhẹ Có
D14 Mưa Ấm áp 80 Mạnh Không
EntropyNgày(S) = × 14 1 Entropy(SD1) + × 14 1 Entropy(SD2) + … + × 14 1 Entropy(SD14) Entropy(SD1) = Entropy(SD2) = … = Entropy(SD14) = 0 → EntropyNgày(S) = 0 Gain(S, Ngày) = Entropy(S) - EntropyNgày(S) = 0.940
Lúc này, thuộc tính ngày có độ đo gia lượng thông tin cao nhất so với các thuộc tính khác trong tập dữ liệu. Nó sẽ được chọn làm thuộc tính phân tách.
Kết quả phép tách trên thuộc tính “Ngày”
Điều gì sai với thuộc tính “Ngày” ?
Thuộc tính “Ngày” có nhiều nhất những giá trị trong việc phân chia tập dữ liệu huấn luyện thành những tập nhỏ. Cũng chính vì điều này nó sẽ có thu thập thông tin rất cao liên quan đến tập dữ liệu huấn luyện. Tuy nhiên nó lại là một công cụ tiên đoán tồi của hàm mục tiêu.
Giải quyết vấn đề này như thế nào ?
Lựa chọn thuộc tính để phân tách theo nguyên tắc:
• Thuộc tính có tỉ lệ gia lượng thông tin (RatioGain) cao.
• Entropy của thuộc tính lớn hơn Entropy trung bình của tất cả các thuộc tính.
2.4.3.3. Thuộc tính thiếu giá trị
• Nếu giá trị của thuộc tính A bị mất trên một số bộ dữ liệu, hướng giải quyết sẽ thế nào ?. Giả sử rằng (x, C(x)) là một trong những tập huấn luyện trong S và giá trị A(x) là không được biết đến.
Ví dụ : Sử dụng Bảng 2-3 và thêm mẫu dữ liệu mới
Quang cảnh Nhiệt độ Độ ẩm Gió Chơi tennis
Nắng Nóng 85 Nhẹ Không
Nắng Nóng 90 Mạnh Không
… … … … …
Mưa Mát 70 ??? Không
TH1 : nếu Gió: [9 nhẹ, 5 mạnh]
→ Giá trị của thuộc tính “Gió” ở bản ghi thứ 15 sẽ là: Nhẹ TH2 : nếu Gió: [5 nhẹ, 9 mạnh]
→ Giá trị của thuộc tính “Gió” ở bản ghi thứ 15 sẽ là: Mạnh
2.3.4. Thuật toán C4.5
Dữ liệu vào: Tập dữ liệu E, tập danh sách thuộc tính, tập nhãn lớp
Dữ liệu ra: Mô hình cây quyết định
Tại hàm chính, gọi hàm đệ qui Tạocây() với ba tham số vào là tập dữ liệu E, tập danh sách thuộc tính của E và tập nhãn. Thuật toán làm việc bằng cách đệ qui chọn giá trị thuộc tính tốt nhất để chia, lưu ý là chọn giá trị của thuộc tính sao cho điều kiện chia tốt nhất (bước 7), tiếp tục tiến hành mở rộng nút con bằng cách gọi đệ qui cho đến khi điều kiện dừng (ở bước 1) được thỏa mãn. Dưới đây là phần chi tiết thuật toán. Tạocây(Tập dữ liệu E, tập danh sách thuộc tính F, tập nhãn lớp)
1 if điều_kiện_dừng(E,F) = đúng 2 nútlá = CreateNode() 3 nútlá.nhãnlớp=Phânlớp(E) 4 return nútlá 5 else 6 Nútgốc = CreateNode() 7 Nútgốc.điềukiệnkiểmtra = tìm_điểm_chia_tốt_nhất(E, F) 8 Đặt F = F \ {Nút chọn phân chia}
9 Đặt V = {v| v thoả điều kiện là phần phân chia xuất phát từ Nútgốc} 10 Lặp qua từng tập phân chia v ∈V
11 Đặt Ev = {e | Nútgốc.điềukiệnkiểmtra(e) = v và e ∈ E}
12 Nútcon = Tạocây(Ev, F, tập nhãn lớp) 13 Dừng lặp
14 End if
15 return nútgốc.
Gọi hàm Tạocây (E, tập danh sách thuộc tính của E, tập nhãn lớp).
Dòng đầu tiên sẽ kiểm tra điều kiện dừng, nếu được thỏa mãn nghĩa là đã đệ qui để tạo ra được đến nút lá. Điều kiện dừng chỉ xảy ra khi:
⇒ Tất cả các dòng trong tập dữ liệu E thuộc về cùng một lớp duy nhất (1).
⇒ Không có bất cứ dòng nào trong tập E, điều này có thể xảy ra khi tập con được tạo ở bước phân chia các tập con là rỗng (2).
⇒ Trong trường hợp (1) chỉ việc tiến hành tạo nút lá bằng hàm createNode() và tiến hành gán nhãn cho nút lá này bằng cách gán nhãn duy nhất cho thuộc tính nhãn của nút vừa được tạo này.
⇒ Trường hợp (2) sẽ trả về nút lá bằng rỗng và tiến hành gán nhãn cho nút cha là nhãn lớp xuất hiện nhiều nhất như sau:
⇒ Nhãn lớp = max (tổng của từng giá trị nhãn lớp riêng biệt trong E).
⇒ Hàm Phânlớp(E) thực hiện việc xác định nhãn cho một tập dữ liệu E, nó tự động xác định và trả về đúng giá trị nhãn cho cả hai trường hợp trên.
Dòng 3 và 4 xảy ra khi chỉ còn một thuộc tính trong nút cha (lưu ý nút cha là nút sau khi đã phân chia tạo ra tập dữ liệu D này). Nếu sau khi phân chia trên nút cha mà tập D không còn chứa thuộc tính để phân chia, trả về nút lá là giá trị nhãn xuất hiện nhiều nhất trong D.
Xét dòng 5, nếu thuật toán chưa thỏa mãn điều kiện để dừng, tiếp tục xét bằng cách tìm kiếm điểm chia tốt nhất. Để tìm điểm chia tốt nhất cần sử dụng một hàm đánh giá, kết quả của hàm này sẽ trả về thuộc tính được chọn tương ứng. Về các tiêu chuẩn đánh giá cũng như chọn điểm chia sẽ được giải thích rõ hơn trong các phần bên dưới.
Xét dòng 7 và 8, sau khi đã chọn được điểm chia tốt nhất, tiến hành phân chia tập D thành các tập con Di, cập nhật lại danh sách các thuộc tính.
Dòng 9 và 10: lặp qua danh sách các tập con Di và tiến hành gọi đệ qui hàm Tạocây() với tham số mới tương ứng.
Ví dụ minh hoạ thuật toán C4.5: xét Bảng 2-4 dữ liệu thời tiết về chơi tennis • Dữ liệu vào:
Tập dữ liệu thời tiết.
Tập nhãn lớp: Có – Không.
• Dữ liệu ra: Mô hình cây quyết định chơi tennis. Lần tạo cây đầu tiên
Tìm_điểm_chia_tốt_nhất(E, F) với E là Tập dữ liệu thời tiết và F là các thuộc tính: Ngày, Quang cảnh, Nhiệt độ, Độ ẩm, Gió.
Thuộc tính quyết định “Chơi Tennis” chỉ có hai giá trị là “Co” và “Khong”, như vậy có 9 bộ dữ liệu có nhãn lớp là giá trị “Co” và 5 bộ giá trị “Khong”. Tính: Entropy(S) = -(9/14)log2(9/14) – (5/14)log2(5/14) = 0.940
Độ đo RatioGain cho thuộc tính “Quang cảnh”(QC):
• Tập_giá_trị (Quang Cảnh)={Nắng, Âm u, Mưa}, khi đó:
Snắng (2co, 3khong) ⇒ Entropy(Snắng)= (5/14)(-(2/5)log2(2/5)-(3/5)log2(3/5))=0.347 SÂm u(4co, 0khong) ⇒ Entropy(SÂm u)= (4/14)(0) = 0
Smưa(3co, 2khong) ⇒ Entropy(Smưa)= (5/14)(-(3/5)log2(3/5)-(2/5)log2(2/5))=0.347 EntropyQC(S) =(5/14)×Entropy(SNắng)+(4/14)×Entropy(SÂmu)+(5/14)×Entropy(SMưa)
= 0.347 + 0 + 0.347 = 0.694
Gain(S, QC) = Entropy(S) – EntropyQC(S) = 0.940 – 0.694 = 0.246
SplitInfo(S, QC) = -(5/14)log2(5/14) - (4/14)log2(5/14) - (5/14)log2(5/14)=1.577 RatioGain (S, QC) = 0.246/1.577 = 0.156
Độ đo RatioGain cho thuộc tính “Gió”:
• Tập_giá_trị (Gió)={Mạnh, Nhẹ}, khi đó:
SMạnh(3co, 3khong) ⇒ Entropy(SMạnh)= (6/14)(-(3/6)log2(3/6)-(3/6)log2(3/6))=0.429 SNhẹ(6co, 2khong) ⇒ Entropy(SMạnh)=(8/14)(-(6/8)log2(6/8)-(2/8)log2(2/8))=0.464 EntropyGió(S) = (6/14)×Entroy(SMạnh) + (8/14)×Entropy(SNhẹ)
= 0.429 + 0.464 = 0.893
Gain(S, Gió) = Entropy(S) – EntropyGió(S) = 0.940 – 0.893 = 0.047 SplitInfo(S, Gió) = -(6/14)log2(6/14) – (8/14)log2(8/14) = 0.985 RatioGain(S, Gió) = 0.047/0.985 = 0.048
Độ đo RatioGain cho thuộc tính “Độ ẩm”:
• Tập_giá_trị (Độ ẩm)={≤72.5, >72.5}, khi đó:
S≤72.5(3co, 1khong) ⇒ Entropy(S≤72.5)= (4/14)(- (3/4)log2(3/4)-(1/4)log2(1/4))=0.231 S>72.5(6co, 4khong) ⇒ Entropy(S>72.5)=(10/14) (-(6/10)log2(6/10)-(4/10)log2(4/10))
EntropyĐộ ẩm(S) = (4/14)×Entropy(S<=72.5) + (10/14)×Entropy(S>72.5)= 0.925 Gain(S, Độ ẩm) = Entropy(S) - EntropyĐộ ẩm(S) = 0.940 – 0.925 = 0.015 SplitInfo(S, Độ ẩm) = -(4/14)log2(4/14) – (10/14)log2(10/14) = 0.863 RatioGain(S, Độ ẩm) = 0.015/0.863 = 0.017
Độ đo RatioGain cho thuộc tính “Nhiệt độ”(ND):
• Tập_giá_trị (Nhiệt Độ)={Nóng, Ấm áp, Mát}, khi đó:
SNóng(2co, 2Khong) ⇒ Entropy(SNóng) =(4/14)(-(2/4)log2(2/4)-(2/4)log2(2/4))=0.286 SẤm áp(4co, 2khong) ⇒ Entropy(SẤm áp)=(6/14)(-(4/6)log2(4/6)-(2/6)log2(2/6))=0.394 SMát(3co, 1khong) ⇒ Entropy(SMát) =(4/14) (-(3/4)log2(3/4)-(1/4)log2(1/4))=0.231 EntropyND(S) = (4/14)×Entropy(SNóng)+(6/14)×Entropy(SẤm áp)+ (4/14)×Entropy(SMát)
= 0.286 + 0.394 + 0.231 = 0.911
Gain(S, ND) = Entropy(S) - EntropyNhiệt độ(S) = 0.940 – 0.911 = 0.029
SplitInfo(S, ND) = -(4/14)log2(4/14)–(6/14)log2(6/14)–(4/14)log2(4/14)= 1.557 RatioGain(S, ND) = 0.028/1.557 = 0.019
Độ đo RatioGain cho thuộc tính “Ngày”:
EntropyNgày(S)= (1/14)×Entropy(SD1) +…+ (1/14)×Entropy(SD14) = 14×(1/14)×(0)= 0 Gain(S, Ngày) = Entropy(S) - EntropyNgày(S) = 0.940 – 0 = 0.940
SplitInfo(S, Ngày) = 14×(- (1/14)log2(1/14)) = 3.807 RatioGain(S, Ngày) = 0.940/3.807 = 0.246
Lựa chọn thuộc tính tốt nhất để phân chia: Tính Entropy trung bình của các thuộc tính:
(0.694 + 0.892 + 0.925 + 0.911 + 0)/5 = 0.684 Ta có: RatioGain(S, Quang cảnh) = 0.156
EntropyQuang cảnh(S) là 0.694 > 0.684
Thuộc tính được chọn để phân chia: Quang cảnh
Xét nhánh Quang cảnh “Nắng”:
SNắng(2co, 3khong)⇒ Entropy(SNắng)=-(2/5)log2(2/5)-(3/5)log2(3/5) = 0.971 Độ đo RatioGain cho thuộc tính “Nhiệt độ”(ND){Nóng, Ấm áp, Mát}:
SNóng(0co, 2khong) ⇒ Entropy(SNóng)= 0
SẤm áp(1co, 1khong) ⇒ Entropy(SẤm áp)=(2/5)(-(1/2)log2(1/2)-(1/2)log2(1/2))=0.4 SMát(1co, 0khong) ⇒ Entropy(SMát)=0
EntropyND(SNắng)=(2/5)×Entropy(SNóng) + (2/5)×Entropy(SẤm áp) + (1/5)×Entropy(SMát) = 0.4
Gain(SNắng, ND) = 0.971 – 0.400 = 0.571
SplitInfo(SNắng, ND) = - (2/5)log2(2/5) – (2/5)log2(2/5) – (1/5)log2(1/5)= 1.522 RatioGain(SNắng, ND) = 0.571/1.522 = 0.375
Độ đo RatioGain cho thuộc tính “Độ ẩm”: Chọn giá trị phân chia tốt nhất:
Entropy(SĐộ ẩm) = - (2/5)log2(2/5) – (3/5)log2(3/5) = 0.971
Độ ẩm 70 85 90 95 77.5 87.5 92.5 ≤ > ≤ > ≤ > Có 2 0 2 0 2 0 Không 0 3 1 2 2 1 Gain 0.971 0.420 0.171
EntropyĐộ ẩm(SNắng) = (2/5)×Entropy(S<=77.5) + (3/5)×Entropy(S>77.5)= 0 Gain(SNắng, Độ ẩm) = 0.971 – 0 = 0.971
SplitInfo(SNắng, Độ ẩm) = - (2/5)log2(2/5) – (3/5)log2(3/5) = 0.971 RatioGain(SNắng, Độ ẩm) = 0.971/0.971 = 1
Độ đo RatioGain của thuộc tính “Gió”{Nhẹ, Mạnh}:
SNhẹ(1co, 1khong) ⇒ Entropy(SNhẹ)=(2/5)(-(1/2)log2(1/2)-(1/2)log2(1/2))=0.4 SMạnh(1co, 2khong) ⇒ Entropy(SMạnh)=(3/5)(-(1/3)log2(1/3)-(2/3)log2(2/3))=0.551 EntropyGió(SNắng) = (2/5)×Entropy(SNhẹ) + (3/5)×Entropy(SMạnh)
= 0.4 + 0.551 = 0.951 Gain(SNắng, Gió) = 0.971 – 0.951 = 0.020
SplitInfomation(SNắng, Gió) = - (2/5)log2(2/5) – (3/5)log2(3/5) = 0.971 RatioGain(SNắng, Gió) = 0.020/0.971 = 0.021
SD1(0co, 1khong) ⇒ Entropy(SD1) = 0 SD2(0co, 1khong) ⇒ Entropy(SD2) = 0 SD8(0co, 1khong) ⇒ Entropy(SD8) = 0 SD9(1co, 0khong) ⇒ Entropy(SD9) = 0 SD11(1co, 0khong) ⇒ Entropy(SD11) = 0
EntropyNgày(SNắng) = (1/5)×Entropy(SD1) + (1/5)×Entropy(SD2) + (1/5)×Entropy(SD8) + (1/5)×Entropy(SD9) + (1/5)×Entropy(SD11) = 0
Gain(SNắng, Ngày) = 0.971 – 0 = 0.971
SplitInfomation(SNắng, Ngày) = 5×(-1/5×log2(1/5)) = 2.322 RatioGain(SNắng, Ngày) = 0.971/2.322 = 0.418
Thuộc tính được chọn để phân chia: Độ ẩm
Xét nhánh “Mưa”:
SMưa(3co, 2khong) ⇒ Entropy(SMưa) = -(3/5)log2(3/5)-(2/5)log2(2/5)=0.971 Độ đo RatioGain cho thuộc tính “Nhiệt độ” {Ấm áp, Mát}
SẤm áp(2co, 1khong) ⇒ Entropy(SẤm áp)=(3/5)(-(2/3)log2(2/3)-(1/3)log2(1/3))=0.551 SMát(1co, 1khong) ⇒ Entropy(SMát)=(2/5)(-(1/2)log2(1/2)-(1/2)log2(1/2))=0.4 EntropyNhiệt độ(SMưa) = (3/5)×Entropy(SẤm áp) + (2/5)×Entropy(SMát)
= 0.551 + 0.4 = 0.951 Gain(SMưa, Nhiệt độ) = 0.971 – 0.951 = 0.020
SplitInfo(SMưa, Nhiệt độ) = - (3/5)log2(3/5) – (2/5)log2(2/5) = 0.971 RatioGain(SMưa, Nhiệt độ) = 0.020/0.971 = 0.021
Độ đo RatioGain cho thuộc tính “Gió”{Nhẹ, Mạnh}:
SMạnh(0co, 2khong) ⇒ Entropy(SMạnh)= 0
EntropyGió(SMưa) = (3/5)×Entropy(SNhẹ) + (2/5)×Entropy(SMạnh) = 0 Gain(SMưa, Gió) = 0.971 – 0 = 0.971
SplitInfomation(SMưa, Gió) = - (3/5)log2(3/5) – (2/5)log2(2/5) = 0.971 RatioGain(SMưa, Gió) = 0.971/0.971 = 1
Độ đo RatioGain cho thuộc tính “Ngày” {D4, D5, D6, D10, D14}:
SD4(1co, 0khong) ⇒ Entropy(SD4) =0 SD5(1co, 0khong) ⇒ Entropy(SD5) = 0 SD6(0co, 1khong) ⇒ Entropy(SD6) = 0 SD10(1co, 0khong) ⇒ Entropy(SD10) = 0 SD14(0co, 1khong) ⇒ Entropy(SD14) = 0
EntropyNgày(SMưa) = (1/14)×Entropy(SD4) + (1/14)×Entropy(SD5) + (1/14) ×
Entropy(SD6) +(1/14)×Entropy(SD10)+ (1/14)×Entropy(SD14) = 0 Gain(SMưa, Ngày) = 0.971 – 0 = 0.971
SplitInfomation(SMưa, Ngày) = 5×(-1/5×log2(1/5)) = 2.322 RatioGain(SMưa, Ngày) = 0.971/2.322 = 0.418
Thuộc tính được chọn để phân chia: Gió
Hình 2-6 : Cây quyết định xây dựng theo thuật toán C4.5 Xây dựng luật từ cây quyết định:
Luật 1: if (Quang cảnh = Nắng) and (Độ ẩm ≤ 77.5) then Chơi tennis = Có
Luật 2: if (Quang cảnh = Nắng) and (Độ ẩm < 77.5) then Chơi tennis = Không
Luật 3: if (Quang cảnh = Âm u) then Chơi tennis = Có
Luật 4: if (Quang cảnh = Mưa) and (Gió = Nhẹ) then Chơi tennis = Có
2.4. Phương pháp phân lớp Naïve Bayesian
2.4.1. Giới thiệu
Các phương pháp học Bayes thích hợp với nghiên cứu máy học trong phân lớp vì các thuật toán Bayes tính toán các khả năng cụ thể đối với các giả định chẳng hạn như bộ phân lớp Naïve Bayes là một trong các cách tiếp cận thực tế nhất đối với các kiểu học chắc chắn. Michie et al. (1994) đã đưa ra một nghiên cứu chi tiết việc so sánh giữa bộ phân lớp Naïve Bayes với các thuật toán máy học khác trong đó có cả các thuật toán học theo cây quyết định và mạng nơron. Các nhà nghiên cứu đã chỉ ra rằng bộ phân lớp Naïve Bayes là một thuật toán tương đối mạnh và có thể so sánh với các thuật toán khác trong nhiều trường hợp và trong một số trường hợp nó còn cho kết quả tốt hơn. Trong phần này chúng tôi sẽ trình bày bộ phân lớp Naïve Bayes theo sau phần giới thiệu lý thuyết Bayes.
Các phương pháp Bayes rất quan trọng đối với nghiên cứu về máy học (đặc biệt trong vấn đề phân lớp) là chúng cung cấp cho chúng ta sự am hiểu đầy ý nghĩa về các thuật toán máy học nhưng không xử lý theo xác suất tường minh.
2.4.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 A khi biết sự kiện liên quan B đã xảy ra. Xác suất này được ký hiệu là P(A|B), và đọc là "xác suất của A nếu có B". Đại lượng này được gọi xác suất có điều kiện vì nó được rút ra từ giá trị được cho của B hoặc phụ thuộc vào giá trị đó.
Theo định lý Bayes, xác suất xảy ra A khi biết B sẽ phụ thuộc vào 3 yếu tố: P(A): Xác suất xảy ra A của riêng nó, không quan tâm đến bất kỳ thông tin nào về
B.
P(B): Xác suất xảy ra B của riêng nó, không quan tâm đến A. Đạ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 A đang muốn biết.
P(B|A): Xác suất xảy ra B khi biết A xảy ra và đọc là "xác suất của B nếu có A". Đại lượng này gọi là khả năng (likelihood) xảy ra B khi biết A đã xảy ra.
Khi biết ba đại lượng trên, xác suất của A khi biết B cho bởi công thức: ) ( ) ( ) | ( ) | ( B P A P A B P B A P = Từ đó dẫn tới:
) ( ) | ( ) ( ) ( ) | (A B P B P A B P B A P A P = ∩ =
Khi có n giả thuyết thì
) ( ) / ( ) ( ) | ( ) / ( 1 i n i i i i i A P A B P A P A B P B A P × × = ∑ =
2.4.3. Phân lớp Naïve Bayes (NBC)
Phân lớp Naïve Bayes[6] ra đời giúp cho việc tính đơn giản hơn dựa trên việc ứng dụng lý thuyết Bayes. Tính toán các xác suất đó với giả thiết là các thuộc tính độc lập với nhau (không phụ thuộc nhau).
• Mỗi mẫu được biểu diễn bằng X=(x1,x2,…,xn) với các thuộc tính A1, A2, …, An. • Các lớp C1, C2,…,Cm. cho trước mẫu chưa biết X. NBC gán X vào Ci nếu P(Ci|
X)>P(Cj|X) với 1 ≤ j ≤ m, j ≠ i (theo định lý Bayes). • Phân lớp Naïve Bayes giả định độc lập thuộc tính:
) C | P(x ) C | P(X n i 1 k k i ∏ = =
• Nếu thuộc tính thứ i là rời rạc thì P(Xi|C) được ước lượng bởi tần số liên quan của các mẫu có giá trị Xi cho thuộc tính thứ i trong C.
• Nếu thuộc tính thứ i là liên tục thì P(Xi|C) được ước lượng thông qua một hàm mật độ Gaussian : 2 i C 2 i C k i i i 2σ ) μ (x C C C k i k e 2 1 ) σ , μ , g(x ) C | P(x − − = = πσ
• Để phân lớp mẫu chưa biết X, ta tính P(X|Ci)P(Ci) cho từng Ci. Mẫu X gán vào lớp