Phương thức fit
Bài học 13 trên 19 trong khóa học Giới thiệu về học máy của Coddy.
Đây là công thức Naive Bayes:<strong>P(Class|Feature) = P(Feature|Class) * P(Class) / P(Feature)</strong>
Mình đã tính <strong>P(Feature|Class)</strong> và <strong>P(Class)</strong> trong bài học trước.
Giờ đây, dựa trên các nguyên tắc toán học, chúng ta có thể đơn giản hóa phép tính bằng cách bỏ qua P(Feature). Ví dụ, nếu 5 > 3 và ta chia cả hai vế cho 10 (để có 5/10 > 3/10), bất đẳng thức vẫn đúng.
Vì vậy, công thức rút gọn là: P(Class|Feature) = P(Feature|Class) * P(Class).
Xét một điểm dữ liệu mới có các thuộc tính sau:
| temperature | mood | motivation | windy |
| low | happy | high | yes |
Để tính cho tất cả các trường hợp play = yes, hãy dùng công thức:
P(temperature=<strong>low</strong>|play=Yes) * P(mood= <strong>happy</strong>|play=Yes) * P(motivation= <strong>high</strong>|play=Yes) * P(windy=<strong>yes</strong>|play=Yes) * p(play=yes)
Tất cả dữ liệu này đã được lưu trong các biến probability_features và probability_target:
p_yes = probability_features["temperature"]["low"]["yes"] *
probability_features["mood"]["happy"]["yes"] *
probability_features["motivation"]["high"]["yes"] *
probability_features["windy"]["yes"]["yes"] *
probability_target["yes"]Giờ chúng ta cần làm tương tự với play = no.
Sau khi có được cả hai xác suất, chúng ta so sánh chúng để xác định xác suất nào lớn hơn.
Nếu p_yes lớn hơn p_no, chúng ta phân loại điểm dữ liệu mới này là yes; nếu không, chúng ta phân loại nó là no.
Thử thách
Trung bìnhTrong thử thách này, hãy hoàn thành phương thức fit để lưu các xác suất vào self.probability_features và self.probability_target, giống như trong bài học trước.
y_train là biến mục tiêu, còn X_train là tập dữ liệu gồm các đặc trưng.
Đồng thời, hãy hoàn thành phương thức get_classes_probability. Phương thức này cần nhận một điểm dữ liệu mới (tương tự ví dụ đã cho trước đó) và trả về xác suất cho từng lớp của biến mục tiêu (p_yes và p_no).
Đầu ra cần có định dạng sau (tùy theo các giá trị trong biến mục tiêu y_train)
classes_probabilities = {
"yes": 0.00,
"no": 0.00,
}Lưu ý rằng tên đặc trưng và tên thuộc tính không cố định. Mỗi tập dữ liệu có các đặc trưng và tên khác nhau.
Tự làm thử
class NaiveBayes:
class __init__(self):
pass
def get_classes_probability(self, X):
# X chứa một bảng dữ liệu chỉ có một hàng
# Dùng self.classes đã lưu trong phương thức (method) fit
# Viết code của bạn bên dưới
classes_probabilities = {}
# --------------------------
return classes_probabilities
def fit(self, X_train, y_train):
self.probability_features = {}
self.probability_target = {}
target_variable = "target"
df = X_train.copy()
df[target_variable] = y_train
# Sao chép code của bạn từ bài học trước
# Thêm self. vào probability_features và probability_target
def predict(self, X_test):
passTất cả bài học trong Giới thiệu về học máy
Tự luyện tập: Trình biên dịch Python online