Menu
CoddyTech
flag Ar iconالعربيةdown icon

الطريقة fit

الدرس 13 من 19 في دورة مقدمة في تعلم الآلة على Coddy.

إليك صيغة Naive Bayes:
<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 method بحيث تخزن الاحتمالات في self.probability_features و self.probability_target، تماماً كما فعلنا في الدرس السابق.

y_train هو المتغير المستهدف (target variable)، و X_train هو مجموعة بيانات الخصائص (features).

أيضاً، أكمل الـ get_classes_probability method. يجب أن تأخذ هذه الطريقة نقطة بيانات جديدة (مشابهة للمثال المقدم سابقاً) وتعيد الاحتمالات لكل فئة من فئات المتغير المستهدف (الـ p_yes و p_no).
يجب أن يكون المخرج بالتنسيق التالي (اعتماداً على القيم الموجودة في المتغير المستهدف y_train)

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

ضع في اعتبارك أن أسماء الخصائص (feature names) وأسماء السمات (attribute names) ليست ثابتة. فكل مجموعة بيانات لها خصائص مختلفة وأسماء مختلفة.

جرّب بنفسك

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 عبر الإنترنت