Phân loại Bayes ngây thơ Gaussian với Log-Likelihood Vectorized
log P(c | x) propto log P(c) + Σj=1D [ -12 log(2pi sigmac, j2) - (xj - muc, j)22sigmac, j2 ]
Tiến độ của tôi ở bài này
Điểm và code bạn nộp được lưu vào tài khoản sau khi chấm bài.
Đang tải điểm của bạn…
Kiến thức và chủ đề
Kiến thức tiên quyết: gaussian distribution, log likelihood, bayes theorem.
Nội dung đề bài
Mục tiêu kiến thức
- Áp dụng giả định độc lập có điều kiện của Naive Bayes: P(x | c) = Πj P(xj | c).
- Sử dụng hàm log-likelihood để phòng ngừa hiện tượng số thực quá bé (Numerical Underflow):
log P(c | x) propto log P(c) + Σj=1D [ -12 log(2pi sigmac, j2) - (xj - muc, j)22sigmac, j2 ]
- Sử dụng hệ số làm mượt phương sai var_smoothing để đảm bảo mẫu số luôn > 0.
Mô tả bài toán
Cài đặt lớp GaussianNaiveBayesScratch(var_smoothing=1e-9):
- fit(self, X: np.ndarray, y: np.ndarray) -> self:
- X: mảng 2D kích thước (N, D). y: mảng 1D nhãn nguyên kích thước (N,).
- Kiểm tra hợp lệ: X 2D, y 1D, cùng số dòng, N > 0. Nếu sai, raise ValueError.
- Tìm danh sách các lớp duy nhất classes.
- Với mỗi lớp c:
- Xác suất tiên nghiệm P(c) = NcN.
- Vector kỳ vọng mu_c kích thước (D,): trung bình của các mẫu thuộc lớp c.
- Vector phương sai sigmac2 kích thước (D,): phương sai (ddof=0) cộng với varsmoothing.
- predict(self, X: np.ndarray) -> np.ndarray:
- Tính log xác suất hậu nghiệm cho từng lớp c theo công thức vector hóa.
- Gán nhãn cho mỗi mẫu bằng argmax_c log P(c | x). Nếu có hai lớp cùng điểm, chọn nhãn có giá trị số nhỏ hơn.
- Trả về mảng 1D kiểu nguyên.
Input
- Các tham số truyền vào hàm/lớp GaussianNaiveBayesScratch hoặc dữ liệu đầu vào theo định dạng mô tả.
Output
- Kết quả trả về của hàm/lớp GaussianNaiveBayesScratch hoặc dữ liệu in ra màn hình theo đúng đặc tả.
Ràng buộc
- Thời gian chạy tối đa: 1000ms.
- Giới hạn bộ nhớ: 256MB.
- Dữ liệu đầu vào tuân thủ đúng kiểu dữ liệu và miền giá trị được mô tả.
Ví dụ 1
Input
GaussianNaiveBayesScratch(X=[[-2.0, -2.0], [-1.9, -2.1], [3.0, 3.0], [3.1, 2.9]], y=[0, 0, 1, 1], X_test=[[-2.5, -2.5], [3.5, 3.5]])
Output
[0, 1]
Giải thích
Hàm được gọi với các tham số mẫu trên và trả về kết quả chính xác theo yêu cầu.
Ví dụ 2
Input
GaussianNaiveBayesScratch(X=[[1.0]], y=[])
Output
True
Giải thích
Hàm được gọi với bộ tham số thứ hai và trả về kết quả tương ứng theo thiết kế.
Gợi ý và lời giải chỉ mở sau khi bạn bấm Nộp bài. Giáo viên và quản trị viên mở được ngay.
Góp ý & báo lỗi bài tập
Đề bài chưa rõ, test có vấn đề hay bạn có ý tưởng giúp bài tốt hơn? Gửi cho đội ngũ AI Empire nhé — mỗi góp ý đều được đọc.
