Menu
Coddy logo textTech

metoda fit

Lekcja 13 z 19 w kursie Wprowadzenie do uczenia maszynowego w Coddy.

Oto wzór naiwnego klasyfikatora Bayesa:
<strong>P(Class|Feature) = P(Feature|Class) * P(Class) / P(Feature)</strong>

W poprzedniej lekcji obliczyliśmy już <strong>P(Feature|Class)</strong> i <strong>P(Class)</strong>.

Teraz, na podstawie zasad matematycznych, możemy uprościć obliczenia, pomijając P(Feature). Na przykład, jeśli 5 > 3 i podzielimy obie strony przez 10 (aby otrzymać 5/10 > 3/10), nierówność pozostaje prawdziwa.

Dlatego uproszczony wzór ma postać: P(Class|Feature) = P(Feature|Class) * P(Class).

Rozważmy nowy punkt danych o następujących atrybutach:
 

temperaturanastrójmotywacjawietrznie
niskaszczęśliwywysokatak

Aby obliczyć wynik dla wszystkich przypadków, w których play = yes, użyj wzoru:

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)

Wszystkie te dane są już zapisane w naszych zmiennych probability_features i 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"]

Teraz musimy zrobić to samo dla play = no.

Po uzyskaniu obu prawdopodobieństw porównujemy je, aby ustalić, które z nich jest większe.

Jeśli p_yes jest większe niż p_no, klasyfikujemy ten nowy punkt danych jako yes; w przeciwnym razie klasyfikujemy go jako no.

challenge icon

Wyzwanie

Średni

W tym wyzwaniu uzupełnij metodę fit, aby zapisywała prawdopodobieństwa w self.probability_features i self.probability_target, tak jak w poprzedniej lekcji.

y_train to nasza zmienna docelowa, a X_train to nasz zbiór danych zawierający cechy.

Uzupełnij również metodę get_classes_probability. Ta metoda powinna przyjmować nowy punkt danych (podobny do przykładu przedstawionego wcześniej) i zwracać prawdopodobieństwa dla każdej klasy zmiennej docelowej (p_yes i p_no).
Wynik powinien mieć następujący format (zależnie od wartości zmiennej docelowej y_train)

classes_probabilities = {
    "yes": 0.00,
    "no": 0.00, 
}

Pamiętaj, że nazwy cech i atrybutów nie są stałe. Każdy zbiór danych ma inne cechy i inne nazwy.

Spróbuj swoich sił

class NaiveBayes:
    class __init__(self):
        pass
    
    def get_classes_probability(self, X):
        # X zawiera ramkę danych z jednym wierszem
        # użyj self.classes zapisanego w metodzie fit
        # napisz swój kod poniżej
        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
        # Skopiuj swój kod z poprzedniej lekcji
        # Dodaj self. do probability_features i probability_target
        
    
    def predict(self, X_test):
        pass

Wszystkie lekcje w sekcji Wprowadzenie do uczenia maszynowego

Poćwicz samodzielnie: Kompilator Python online