Menu
CoddyTech

Метод 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).

Рассмотрим новую точку данных со следующими атрибутами:
 

temperaturemoodmotivationwindy
lowhappyhighyes

Чтобы выполнить расчет для всех случаев, где 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.

challenge icon

Задание

Средне

В этом испытании завершите метод 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