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:
| temperatura | nastrój | motywacja | wietrznie |
| niska | szczęśliwy | wysoka | tak |
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.
Wyzwanie
ŚredniW 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):
passWszystkie lekcje w sekcji Wprowadzenie do uczenia maszynowego
Poćwicz samodzielnie: Kompilator Python online