يعتمد المصنف بايز الساذج (Naive Bayes classifier) على نظرية بايز مع افتراضات الاستقلال بين المتنبئين. من السهل بناء نموذج بايز ساذج، بدون تنبؤ البارامترات المکررة المعقدة مما يجعله مفيدًا بشكل خاص لمجموعات البيانات الكبيرة جدًا. على الرغم من بساطته، غالبًا ما يعمل المصنف بايز الساذج (Naive Bayesian) جيدًا بشكل مدهش ويستخدم على نطاق واسع لأنه غالبًا ما يتفوق على طرق التصنيف الأكثر تعقيدًا.

الخوارزمية

توفر نظرية بايز طريقة لحساب الاحتمال اللاحق P (c|x) من P (c) و P (x) و P (x|c). يفترض مصنف بايز الساذج أن تأثير مقدار المتنبئ (x) على فئة معينة (c) مستقل عن مقادیر المتنبئين الآخرين. هذا الافتراض يسمى الاستقلال الشرطي الفئوی.

المصنف بایز الساذج
  • احتمال اللاحق للفئة (الهدف) معطى المتنبئ (الخصیصة).
  • P (c) هو الاحتمال السابق للفئة.
  • و P (x|c) هو الاحتمال وهو احتمال توقع فئة معينة.
    • وأيضًا، P (x) هو الاحتمال السابق للتنبؤ.

بناء مصنف بايز الساذج في Scikit-Learn

تحميل البيانات

بمجرد استيراد المكتبات، فإن خطوتنا التالية هي تحميل البيانات المخزنة في مستودع GitHub المرتبط هنا. يمكنك تنزيل البيانات والاحتفاظ بها في مجلدك المحلي. بعد ذلك، يمكننا استخدام طريقة read_csv الخاصة بـ Pandas لتحميل البيانات في Pandas dataframe df، كما هو موضح أدناه:

import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import GaussianNB
from sklearn.metrics import accuracy_score
import matplotlib.pyplot as plt
import seaborn as sns
df = pd.read_csv('Naive-Bayes-Classifier-Data.csv')

أيضًا، في لقطة البيانات أدناه، لاحظ أن إطار البيانات يحتوي على عمودين، x و y. هنا، x هي الخصیصة و y الصیغة. سوف نخمن y باستخدام x كمتغير مستقل.

المصنف بایز الساذج

المعالجة المسبقة للبيانات

قبل تغذية البيانات إلى نموذج مصنف بایز الساذج، نحتاج إلى القيام ببعض المعالجة المسبقة.

هنا، سننشئ متغيري x و y عن طريق أخذهما من مجموعة البيانات واستخدام وظيفة train_test_split في scikit-learn لتقسيم البيانات إلى مجموعات تدريب واختبار.

لاحظ أن حجم الاختبار 0.25 يشير إلى أننا استخدمنا 25 بلمئه من البيانات للاختبار. يضمن random_state إمكانية التكاثر. فی الاخراج train_test_split، نحصل على مقادیر x_train و x_test و y_train و y_test.

x = df.drop("diabetes", axis=1)
y = df["diabetes"]
x_train, x_test, y_train, y_test = train_test_split(x, y , test_size=0.25, random_state=42)

تدريب النموذج

سنستخدم x_train و y_train، اللذين تم الحصول عليهما أعلاه، لتدريب نموذج المصنف بایز الساذج لدينا. نحن نستخدم طريقة الملاءمة ونمرر البارامترات كما هو موضح أدناه.

 لاحظ أن ناتج هذه الخلية يصف بعض البارامترات مثل priors و var_smoothing للنموذج. كل هذه البارامترات قابلة للتهيئة، ولك مطلق الحرية في ضبطها لتلائم متطلباتك.

model = GaussianNB()
model.fit(x_train, y_train)

التنبؤ

بمجرد تدريب النموذج، يصبح جاهزًا لعمل تنبؤات. يمكننا استخدام طريقة التنبؤ في النموذج وتمرير x_test كبارامتر للحصول على الناتج كـ y_pred.

لاحظ أن ناتج التنبؤ عبارة عن مجموعة من الأرقام الحقيقية المقابلة لمصفوفة الإدخال.

y_pred = model.predict(x_test)
print(y_pred)

سيكون الإخراج على النحو التالي:

[1 1 1 0 0 0 1 0 0 1 0 0 0 0 0 1 1 1 1 0 0 1 1 0 0 0 1 1 0 0 0 1 0 1 0 1 1
 0 0 0 1 0 0 0 0 0 1 1 1 1 0 1 0 1 1 1 1 1 1 1 0 1 1 1 0 1 1 0 1 1 0 0 0 0
 1 1 0 0 1 1 0 0 0 0 0 0 0 1 0 1 0 0 1 0 1 1 0 1 1 1 1 1 1 0 0 1 1 0 1 0 1
 0 1 0 0 1 0 0 1 1 1 0 0 0 0 1 1 0 1 1 1 0 0 0 1 1 1 1 0 1 1 0 1 1 1 1 0 0
 1 1 0 1 0 0 1 1 1 0 0 1 1 1 0 1 1 1 0 0 1 1 1 0 1 0 0 1 0 1 1 1 1 1 0 0 0
 1 1 1 0 1 1 1 1 0 0 1 0 0 0 0 1 1 1 1 0 1 1 1 0 0 1 1 1 1 1 1 1 1 0 0 1 1
 0 0 1 1 1 1 0 0 1 0 0 1 0 1 1 0 1 0 1 0 1 0 1 0 0 0 0]

تقييم النموذج

أخيرًا، نحتاج إلى التحقق لمعرفة مدى جودة أداء نموذجنا في بيانات الاختبار. لهذا، نقوم بتقييم نموذجنا من خلال إيجاد درجة الدقة التي ينتجها النموذج.

accuracy = accuracy_score(y_test, y_pred)*100
print(accuracy)

و هنا سيكون الإخراج على النحو التالي:

92.7710843373494

المصادر:

المصدر الاول

المصدر الثانی

منشور ذات صلة

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

السلة