الطريقة 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).
ضع في اعتبارك نقطة بيانات جديدة بالسمات التالية:
| temperature | mood | motivation | windy |
| low | happy | high | yes |
للحساب لجميع الحالات التي يكون فيها 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.
التحدي
متوسطفي هذا التحدي، أكمل الـ 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 عبر الإنترنت