Naive Bayes هو مُصنّف احتمالي خطي. الفئة أو الصنف التي تتعلم الخوارزمية التنبؤ بها هي نتيجة إنشاء التوزيع الاحتمالي لجميع الأصناف التي يتم عرضها عليه، ثم تحديد الصنف الذي سيتم تعيينه لكل عينة من البيانات. وتنظر المصنفات الاحتمالية إلى توزيع الاحتمال الشرطي، أي احتمال تعيين صنف معين بمجموعة معينة من الميزات features.
هذه الخوارزمية غير مفضلة للاستخدام مع الصور الاحتمالية والاحتمال الشرطي يدرك ذلك جيداً.
لكن عموماً يمكنك استخدامها لكن ستعطي نتائج ضعيفة، كما سنرى..
الآن نعود لسؤالك "هل يمكنني استخدام نفس الخطوات مع الصور" نعم تقريباً ماعدا مرحلة تحضير البيانات، فهي تختلف من طبيعة بيانات إلى أخرى، و سأعطيكي الآن مثال لتطبيق هذه الخوارزمية مع مجموعة بيانات الأرقام المكتوبة بخط اليد handwritten dataset، حيث تحتوي هذه البيانات على 1797 صورة رمادية، كل صورة هي رقم من 0 إلى 9 مكتوبة بخط اليد وكل منها بأبعاد 8*8.
بدايةً سأقوم باستخدام خوارزمية Logistic Regression وأعرض لك النتائج، ثم سأستخدم خوارزمية بايز لأريكي الفرق الكبير بالدقة.
أولاً سنقوم باستيراد المكتبات اللازمة و سنقوم بتحميل البيانات:
# استيراد المكتبات التي سنحتاجها في هذ المثالfrom sklearn.datasets import load_digits
import numpy as np
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.linear_model importLogisticRegressio# تحميل الداتاسيت
digits = load_digits()# تمثلها بكسلات الصورة features يوجد لدينا 1797 صورة أبعادها 8*8 أي لدينا 64 print("Image Data Shape", digits.data.shape)#Print to show there are 1797 labels (integers from0–9)# Image Data Shape (1797, 64)# وبما أنه لدينا 1797 صورة فمن الطبيعي وجود 1797 تصنيف، حيث أن كل صورة تمثل رقم صحيح من 0 ل 9print("Label Data Shape", digits.target.shape)# Label Data Shape (1797,)
ملاحظات:
-يجب أن تكون البيانات (الصور) موضوعة في مصفوفة ثنائية الأبعاد، بحيث يمثل البعد الأول عدد العينات (الصور) والثاني يمثل البكسلات.
-الصور في مثالنا رمادية بأبعاد w*h*chaneels = 1*8*8 بينما في حالة الصور الملونة تكون w*h*3 (مثلاً 3*8*8) وفي هذه الحالة يجب وضع الصور أيضاً في مصفوفة ثنائية بعدها الأول هو عدد العينات والثاني هو البكسلات وهنا يكون (لو افترضنا 3*8*8 سيكون عدد البكسلات هو 8*8*3=192 أي يجب أن نجعل أبعاد المصفوفة (1797,192)).
سنقوم الآن بعرض بعض منها:
نقوم بتدريب المصنف على بيانات التدريب من خلال الدالة fit:
logisticRegr.fit(x_train, y_train)
الآن بعد تدريب النموذج يمكننا استخدامه لتوقع أي صورة من بيانات الاختبار، هنا سنقوم بتمرير أول صورة من بيانات الاختبار والتي تمثل العدد 2، لنرى إذا كان سيتنبأ بشكل صحيح:
logisticRegr.predict(x_test[0].reshape(1,-1))# أي أنها تمثل العدد 2# array([2])
كما تلاحظين الدقة هي 95 بالمئة، وهي دقة جيدة جداً لهذه المسألة.
الآن سنقوم بتجربة NB:
from sklearn.naive_bayes importGaussianNB
NB =GaussianNB()# تدريب المصنّف
NB.fit(x_train, y_train)
scoreNB = NB.score(x_test, y_test)print(scoreNB)# 0.8333333333333334
كما تلاحظين فإن الدقة ضعيفة بالنسبة لهذه المسألة 83%.
الآن سأترك لك عدة ملاحظات:
1. مع الصور يفضل دوماً استخدام الشبكات العصبية وتحديداً CNN. على سبيل المثال لو استخدمنا ال CNN هنا لكنت حصلت على دقة تصل إلى 99%.
2. خورازمية Logistic Reg أعطت نتائج أفضل بكثير من NB رغم أن كلا الخوارزميتين خطيتين لكن Logistic Reg لاتعتمد على الاحتمالات و على وجود أحداث (ميزات هنا) سابقة.
3.خورازمية Logistic Reg ليست أيضاً خورازمية مثالية للصور، لكنها تكون جيدة في بعض الحالات ولكن ليس بشكل عام فهي خوارزمية خطية أي أنها محدودة القدرة على ملائمة الأنواع المعقدة من الميزات إضافةً إلى أن تعقيدها الزمن كبير جداً في حال الصور الأكبر حجماً (صور بأبعاد تبدأ من 150*150 مثلاً) والداتاسيت الأكبر حجماً (تحتوي عدد أكبر من الصور ربما 25000 ألف صورة أو أكثر)، ستكون بطيئة للغاية وفي بعض الحالات قد تحتاج لأيام للانتهاء التدريب وفي حالات أخرى قد تصل لأشهر!.
بناء مصنف بالاعتماد على طرق تعلم الآلة بلغة البايثون باستخدام مكتبة Scikit-Learn
في الذكاء الاصطناعي
نشر
@Safa Marouf،
Naive Bayes هو مُصنّف احتمالي خطي. الفئة أو الصنف التي تتعلم الخوارزمية التنبؤ بها هي نتيجة إنشاء التوزيع الاحتمالي لجميع الأصناف التي يتم عرضها عليه، ثم تحديد الصنف الذي سيتم تعيينه لكل عينة من البيانات. وتنظر المصنفات الاحتمالية إلى توزيع الاحتمال الشرطي، أي احتمال تعيين صنف معين بمجموعة معينة من الميزات features.
هذه الخوارزمية غير مفضلة للاستخدام مع الصور الاحتمالية والاحتمال الشرطي يدرك ذلك جيداً.
لكن عموماً يمكنك استخدامها لكن ستعطي نتائج ضعيفة، كما سنرى..
الآن نعود لسؤالك "هل يمكنني استخدام نفس الخطوات مع الصور" نعم تقريباً ماعدا مرحلة تحضير البيانات، فهي تختلف من طبيعة بيانات إلى أخرى، و سأعطيكي الآن مثال لتطبيق هذه الخوارزمية مع مجموعة بيانات الأرقام المكتوبة بخط اليد handwritten dataset، حيث تحتوي هذه البيانات على 1797 صورة رمادية، كل صورة هي رقم من 0 إلى 9 مكتوبة بخط اليد وكل منها بأبعاد 8*8.
بدايةً سأقوم باستخدام خوارزمية Logistic Regression وأعرض لك النتائج، ثم سأستخدم خوارزمية بايز لأريكي الفرق الكبير بالدقة.
أولاً سنقوم باستيراد المكتبات اللازمة و سنقوم بتحميل البيانات:
ملاحظات:
-يجب أن تكون البيانات (الصور) موضوعة في مصفوفة ثنائية الأبعاد، بحيث يمثل البعد الأول عدد العينات (الصور) والثاني يمثل البكسلات.
-الصور في مثالنا رمادية بأبعاد w*h*chaneels = 1*8*8 بينما في حالة الصور الملونة تكون w*h*3 (مثلاً 3*8*8) وفي هذه الحالة يجب وضع الصور أيضاً في مصفوفة ثنائية بعدها الأول هو عدد العينات والثاني هو البكسلات وهنا يكون (لو افترضنا 3*8*8 سيكون عدد البكسلات هو 8*8*3=192 أي يجب أن نجعل أبعاد المصفوفة (1797,192)).
سنقوم الآن بعرض بعض منها:
الآن نقوم بتقسيم هذه البيانات إلى بيانات للتدريب وأخرى للاختبار:
نقوم بإنشاء كائن يمثل المصنف المطلوب:
نقوم بتدريب المصنف على بيانات التدريب من خلال الدالة fit:
الآن بعد تدريب النموذج يمكننا استخدامه لتوقع أي صورة من بيانات الاختبار، هنا سنقوم بتمرير أول صورة من بيانات الاختبار والتي تمثل العدد 2، لنرى إذا كان سيتنبأ بشكل صحيح:
الآن للحصول على دقة المصنف أو المودل الذي بنيناه:
كما تلاحظين الدقة هي 95 بالمئة، وهي دقة جيدة جداً لهذه المسألة.
الآن سنقوم بتجربة NB:
كما تلاحظين فإن الدقة ضعيفة بالنسبة لهذه المسألة 83%.
الآن سأترك لك عدة ملاحظات:
1. مع الصور يفضل دوماً استخدام الشبكات العصبية وتحديداً CNN. على سبيل المثال لو استخدمنا ال CNN هنا لكنت حصلت على دقة تصل إلى 99%.
2. خورازمية Logistic Reg أعطت نتائج أفضل بكثير من NB رغم أن كلا الخوارزميتين خطيتين لكن Logistic Reg لاتعتمد على الاحتمالات و على وجود أحداث (ميزات هنا) سابقة.
3.خورازمية Logistic Reg ليست أيضاً خورازمية مثالية للصور، لكنها تكون جيدة في بعض الحالات ولكن ليس بشكل عام فهي خوارزمية خطية أي أنها محدودة القدرة على ملائمة الأنواع المعقدة من الميزات إضافةً إلى أن تعقيدها الزمن كبير جداً في حال الصور الأكبر حجماً (صور بأبعاد تبدأ من 150*150 مثلاً) والداتاسيت الأكبر حجماً (تحتوي عدد أكبر من الصور ربما 25000 ألف صورة أو أكثر)، ستكون بطيئة للغاية وفي بعض الحالات قد تحتاج لأيام للانتهاء التدريب وفي حالات أخرى قد تصل لأشهر!.
باختصار صور = CNN وانسى أي شيئ آخر.