Menu
Coddy logo textTech

מתודת 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 מכיל dataframe עם שורה אחת
        # השתמשו ב-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 אונליין