Метод fit
Урок 13 из 19 курса Введение в машинное обучение на Coddy.
Вот формула Наивного Байеса:<strong>P(Class|Feature) = P(Feature|Class) * P(Class) / P(Feature)</strong>
Мы уже вычислили <strong>P(Feature|Class)</strong> и <strong>P(Class)</strong> в предыдущем уроке.
Теперь, основываясь на математических принципах, мы можем упростить наши вычисления, опустив P(Feature). Например, если 5 > 3 и мы разделим обе части на 10 (чтобы получить 5/10 > 3/10), неравенство останется верным.
Следовательно, наша упрощенная формула принимает вид: P(Class|Feature) = P(Feature|Class) * P(Class).
Рассмотрим новую точку данных со следующими атрибутами:
| temperature | mood | motivation | windy |
| low | happy | high | yes |
Чтобы выполнить расчет для всех случаев, где play = yes, используйте формулу:
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)
Все эти данные уже сохранены в наших переменных probability_features и 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"]Теперь нам нужно сделать то же самое для play = no.
Получив обе вероятности, мы сравниваем их, чтобы определить наибольшую.
Если p_yes больше, чем p_no, мы классифицируем эту новую точку данных как yes; в противном случае мы классифицируем ее как no.
Задание
СреднеВ этом испытании завершите метод fit так, чтобы он сохранял вероятности в self.probability_features и self.probability_target, точно так же, как мы делали в предыдущем уроке.
y_train — это наша целевая переменная, а X_train — это наш набор данных признаков.
Также завершите метод get_classes_probability. Этот метод должен принимать новую точку данных (аналогично примеру, приведенному ранее) и возвращать вероятности для каждого класса целевой переменной (p_yes и p_no).
Вывод должен быть в следующем формате (в зависимости от значений в целевой переменной y_train)
classes_probabilities = {
"yes": 0.00,
"no": 0.00,
}Имейте в виду, что имена признаков и имена атрибутов не являются постоянными. Каждый набор данных имеет разные признаки и разные имена.
Попробуйте сами
class NaiveBayes:
class __init__(self):
pass
def get_classes_probability(self, X):
# X содержит датафрейм с одной строкой
# используйте self.classes, который был сохранен в методе fit
# напишите свой код ниже
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
# Скопируйте ваш код из предыдущего урока
# Добавьте self. к probability_features и probability_target
def predict(self, X_test):
passВсе уроки раздела Введение в машинное обучение
Потренируйтесь самостоятельно: Онлайн-компилятор Python