Các lượt nộp
    Danh sách bài
    Trang chủ
    Báo lỗi

    solution

    Đề bài: [Xác suất - Thống kê] Bộ phân loại Naive Bayes phát hiện thư rác

    Xây dựng một bộ phân loại thư rác (spam) theo mô hình Naive Bayes (Bernoulli). Cho xác suất tiên nghiệm một email là spam là π=P(spam)\pi = P(\text{spam})π=P(spam) (do đó P(ham)=1−πP(\text{ham}) = 1 - \piP(ham)=1−π). Có VVV từ trong từ điển; với từ thứ iii ta biết:

    • pispam=P(từ i xuaˆˊt hiện∣spam)p^{spam}_i = P(\text{từ } i \text{ xuất hiện} \mid \text{spam})pispam​=P(từ i xuaˆˊt hiện∣spam);
    • piham=P(từ i xuaˆˊt hiện∣ham)p^{ham}_i = P(\text{từ } i \text{ xuất hiện} \mid \text{ham})piham​=P(từ i xuaˆˊt hiện∣ham).

    Một email mới được biểu diễn bằng vector nhị phân x1,…,xVx_1, \dots, x_Vx1​,…,xV​ (xi=1x_i = 1xi​=1 nếu từ iii xuất hiện trong email, ngược lại xi=0x_i = 0xi​=0). Theo giả định "ngây thơ" (naive) về độc lập có điều kiện giữa các từ, ta có

    P(spam∣x)∝π∏i=1V(pispam)xi(1−pispam)1−xi,P(ham∣x)∝(1−π)∏i=1V(piham)xi(1−piham)1−xi.P(\text{spam} \mid x) \propto \pi \prod_{i=1}^{V} \big(p^{spam}_i\big)^{x_i} \big(1 - p^{spam}_i\big)^{1-x_i}, \qquad P(\text{ham} \mid x) \propto (1-\pi) \prod_{i=1}^{V} \big(p^{ham}_i\big)^{x_i} \big(1 - p^{ham}_i\big)^{1-x_i}.P(spam∣x)∝π∏i=1V​(pispam​)xi​(1−pispam​)1−xi​,P(ham∣x)∝(1−π)∏i=1V​(piham​)xi​(1−piham​)1−xi​.

    Hãy tính xác suất hậu nghiệm chuẩn hóa P(spam∣x)P(\text{spam} \mid x)P(spam∣x) (sau khi chia cho tổng hai vế) và đưa ra nhãn dự đoán: spam nếu P(spam∣x)≥0.5P(\text{spam} \mid x) \ge 0.5P(spam∣x)≥0.5, ngược lại ham.

    Gợi ý cài đặt: để tránh tràn số khi VVV lớn, nên cộng dồn theo log⁡\loglog rồi dùng kỹ thuật log-sum-exp khi chuẩn hóa, thay vì nhân trực tiếp nhiều số nhỏ.

    Ví dụ: π=0.4\pi = 0.4π=0.4, V=0V = 0V=0 (không có từ nào, chỉ dựa vào tiên nghiệm) ⇒\Rightarrow⇒ P(spam∣x)=0.4<0.5P(\text{spam}\mid x) = 0.4 < 0.5P(spam∣x)=0.4<0.5, in ra ham 0.400000.

    • Định dạng đầu vào:

      Dòng đầu tiên chứa số thực π\piπ và số nguyên VVV (0<π<10 < \pi < 10<π<1, 0≤V≤20000 \le V \le 20000≤V≤2000), cách nhau bởi khoảng trắng.

      VVV dòng tiếp theo, dòng thứ iii chứa hai số thực pispam pihamp^{spam}_i\ p^{ham}_ipispam​ piham​ (0<pispam<10 < p^{spam}_i < 10<pispam​<1, 0<piham<10 < p^{ham}_i < 10<piham​<1).

      Dòng cuối cùng (chỉ có nếu V>0V > 0V>0) chứa VVV số nguyên x1,…,xV∈{0,1}x_1, \dots, x_V \in \{0, 1\}x1​,…,xV​∈{0,1} — vector hiện diện từ của email cần phân loại.

    • Định dạng đầu ra:

      In ra trên một dòng, cách nhau bởi một khoảng trắng: nhãn dự đoán (spam hoặc ham) và xác suất hậu nghiệm P(spam∣x)P(\text{spam} \mid x)P(spam∣x) làm tròn tới đúng 6 chữ số thập phân. Ví dụ: spam 0.998321.

    Ví dụ:

    Đầu vào:

    0.4 0
    

    Đầu ra:

    ham 0.400000
    

    Đầu vào:

    0.5 0
    

    Đầu ra:

    spam 0.500000
    

    Đang tải editor...