فهم خوازمية مصنف Naive Bayes مع مثال عملي في Python

تعتبر خوارمية Naive Bayes تقنية تصنيف تعتمد على نظرية بايز مع فرض الاستقلال بين المتنبئين predictors. بعبارة أخرى ، يفترض مصنف Naive Bayes أن وجود ميزة معينة في فئة لا علاقة لها بوجود أي ميزة أخرى. على سبيل المثال ، يمكن اعتبار الفاكهة على أنها تفاحة إذا كانت حمراء ودائرية وقطرها حوالي 3 بوصات. حتى إذا كانت هذه الميزات تعتمد على بعضها البعض أو على وجود ميزات أخرى ، فإن مصنف Naive Bayes سوف يأخذ بعين الاعتبار كل هذه الخصائص للمساهمة بشكل مستقل في تنبؤ احتمال أن تكون هذه الفاكهة تفاحة.

تعتبر خوارمية Naive Bayes سهلة الانشاء ومفيد بشكل خاص لمجموعات البيانات الكبيرة جدًا. إلى جانب البساطة ، من المعروف أن Naive Bayes تفوق في الأداء حتى على طرق التصنيف الأخرى المعقدة للغاية.

توفر نظرية Bayes طريقة لحساب الاحتمال اللاحق P (c | x) من P (c) و P (x) و P (x | c). انظر إلى المعادلة أدناه:

Bayes_rule

حيث

P (c | x) هو الاحتمال اللاحق للفئة  Posterior Probability of class (الهدف target) للمتنبئ المعطى (السمة attribute).

P (c) هو الاحتمال السابق للفئة Prior probability of class.
P (x | c) هو الاحتمال وهو احتمال توقع فئة معينة.
P (x) هو الاحتمال السابق للتنبؤ.

لفهم طريقة عمل هذه الخوارزمية لنرى المثال التالي

أدناه لدينا مجموعة بيانات تدريبية training data للطقس ومتغير الهدف target المقابل “يلعب”. الآن ، نحتاج إلى تصنيف ما إذا كان اللاعبون سيلعبون أم لا بناءً على حالة الطقس. دعنا نتبع الخطوات التالية لتنفيذها.

الخطوة 1: تحويل مجموعة البيانات إلى جدول تكراري.

الخطوة 2: قم بإنشاء جدول الاحتمالية من خلال إيجاد الاحتمالات الثالية مثلا احتمال ان يكون الجوء غائم = 0.29 واحتمال إمكانية اللعب = 0.64.

الخطوة 3: استخدم معادلة Naive Bayesian لحساب الاحتمال اللاحق لكل فئة. الفئة ذات القيمة الأعلى ل الاحتمال اللاحق هي نتيجة التنبؤ.

Bayes_4

المسألة: اللاعبون سيلعبون إذا كان الطقس مشمسًا ، هل هذه العبارة صحيحة؟

يمكننا حلها باستخدام الطريقة التي تمت مناقشتها أعلاه ، لذلك ف

P(Yes | Sunny) = P( Sunny | Yes) * P(Yes) / P (Sunny)

هنا لدينا

P (Sunny |Yes) = 3/9 = 0.33, P(Sunny) = 5/14 = 0.36, P( Yes)= 9/14 = 0.64

اذن

P (Yes | Sunny) = 0.33 * 0.64 / 0.36 = 0.60 ، وهو احتمال ذو قيمة نوعا ما عالية.

تستخدم خوارزمية Naive Bayes طريقة مماثلة للتنبؤ باحتمالية فئة مختلفة بناءً على سمات مختلفة. تُستخدم هذه الخوارزمية في الغالب في تصنيف النص ومع مسائل وجود فئات متعددة.

أنواع خوارزمية مصنف Naive Bayes

 

هناك عدة أنواع من خوارزمية مصنف Naive Bayes

  • (GNB) Gaussian Naive Bayes: تطبق خوارزمية GNB لحل مسائل التصنيف. مع إفتراض أن يكون احتمال الميزات features يساوي Gaussian:

Naive Bayes Classifier. What is a classifier? | by Rohith Gandhi | Towards Data Science

يتم تقدير المعلمات الاضافية Sigma و Mu باستخدام أقصى احتمال maximum likelihood.

  • (MNB) Multinomial Naive Bayes: تطبق خوارزمية MNB مع البيانات الموزعة متعددة الحدود ، وهي واحدة من متغيري Naive Bayes الكلاسيكيين المستخدمين في تصنيف النص (حيث يتم تمثيل البيانات عادةً على أنها عدد متجهات الكلمات ، على الرغم من أن متجهات tf-idf معروفة أيضًا بأنها تعمل جيدًا في التطبيق العملي) .

 

  • (CNB) Complement Naive Bayes: تعتبر خوارزمية CNB  تطويرا لخوارزمية MNB متعددة الحدود التي تناسب بشكل خاص مجموعات البيانات غير المتوازنة. على وجه التحديد ، تستخدم خوارزمية CNB العمليات الإحصائيات من مكمل كل فئة لحساب أوزان النموذج. يُظهر مخترعو CNB من الناحية التجريبية أن تقديرات المعلمات لـ CNB أكثر استقرارًا من تلك الخاصة بـ MNB. علاوة على ذلك ، تتفوق خوارزمية CNB بانتظام على أداء MNB (غالبًا بهامش كبير) في مهام تصنيف النص.

 

  • (BNB) Bernoulli Naive Bayes:  تطبق خوارزمية BNB لتدريب و تصنيف البيانات التي يتم توزيعها وفقًا لتوزيع برنولي متعددة المتغيرات ؛ على سبيل المثال ، قد تكون هناك ميزات متعددة ولكن يُفترض أن تكون كل منها متغيرًا ثنائي القيمة (برنولي ، منطقي). لذلك ، تتطلب هذه الفئة أن يتم تمثيل العينات كمتجهات ميزات ثنائية القيمة ؛ إذا تم استقبال أي نوع آخر من البيانات ، فقد يقوم BernoulliNB بترميز مدخلاته ( اعتمادًا على معامل الترميز الثنائي ).

 

  • (CNB) Categorical Naive Bayes: تطبق خوارزمية CNB على البيانات الموزعة بشكل فئوي. وهي تفترض أن لكل ميزة موصوفة في الفهرس توزيعها الفئوي الخاص بها.

 

مثال عملي لخوازمية Naive Bayes

 

هذا كود خوازمية مصنف Gaussian Naive Bayes في بايثون لتصنيف زهرة  Iris

>>> from sklearn.datasets import load_iris
>>> from sklearn.model_selection import train_test_split
>>> from sklearn.naive_bayes import GaussianNB
>>> X, y = load_iris(return_X_y=True)
>>> X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.5, random_state=0)
>>> gnb = GaussianNB()
>>> y_pred = gnb.fit(X_train, y_train).predict(X_test)
>>> print("Number of mislabeled points out of a total %d points : %d"
...       % (X_test.shape[0], (y_test != y_pred).sum()))
Number of mislabeled points out of a total 75 points : 4
Share on facebook
فاسبوك
Share on twitter
تويتر
Share on linkedin
لينكد إن
Share on whatsapp
واتساب

اترك تعليقاً

المشاركات الاخيرة

أحدث التعليقات

أفحص بحثك بالمجان

رفع الملف