البرمجة

تقييم أداء تصنيف الفئات المتعددة

عندما تعمل على تصنيف البيانات إلى فئات متعددة، يصبح حساب مقاييس الأداء مثل ROC-AUC والدقة والتحليل الإحصائي لها أمرًا أكثر تعقيدًا نسبيًا مقارنة بتصنيف البيانات إلى فئتين فقط. لحل هذه المشكلة، يمكنك تطبيق بعض الخطوات الإضافية والتغييرات على الكود الخاص بك.

أولاً، يتطلب حساب مقياس AUC لفئات متعددة التعامل مع مصفوفة الاحتمالات المتوقعة بشكل صحيح. بدلاً من استخدام قيمة الاحتمالات لفئة واحدة فقط (مثل [:,1] في حالة فئتين)، يجب عليك استخدام جميع الاحتمالات لكل فئة. وبعد ذلك، يمكنك استخدام المتوسط المرجح (weighted average) بواسطة المعامل average="weighted" لحساب AUC بالشكل الصحيح.

ومن الجدير بالذكر أنه عند التعامل مع تصنيف متعدد الفئات، يجب أيضًا تغيير الطريقة التي يتم فيها استخدام دالة roc_auc_score لتحسين تناسبها مع تصنيف البيانات متعددة الفئات. في هذه الحالة، يمكنك استخدام معامل multi_class وتعيينه إلى ovr (وهو الافتراضي) أو ovo (one-vs-one) وفقًا لتفضيلاتك.

لمعالجة الخطأ الذي تواجهه، يبدو أن الشكل الحالي لفئات الاختبار ليس متوافقًا مع الوظيفة roc_auc_score، حيث يتوقع استخدامه مع فئات ثنائية القيمة فقط.

للتغلب على هذا الخطأ، يمكنك تحويل تسميات الفئات إلى ترميز متوافق مع متطلبات roc_auc_score، وذلك باستخدام دالة LabelEncoder مثلاً. هذا سيقوم بتحويل التسميات إلى ترميزات رقمية.

وبعد ذلك، يمكنك استخدام هذه الترميزات كفئات الاختبار في roc_auc_score، ومن ثم يمكنك استخدام المعامل average="weighted" لحساب متوسط AUC بشكل صحيح لفئات متعددة.

لاحظ أنه يجب أيضًا تحديد متوسط معين للـ AUC، والذي يمكن أن يكون “micro”، “macro”، “weighted” أو “samples”، حيث يعتمد على الحالة الخاصة بك والتي تعكس ماهية تصنيفك ومتطلبات التقدير.

المزيد من المعلومات

بالطبع، دعنا نكمل المقال بمزيد من التفصيل حول كيفية تنفيذ الخطوات المذكورة لحساب مقاييس الأداء لتصنيف الفئات متعددة باستخدام مكتبة scikit-learn.

لحل مشكلة تحويل تسميات الفئات إلى ترميزات رقمية متوافقة مع متطلبات roc_auc_score، يمكننا استخدام دالة LabelEncoder كما ذكرنا. دعنا نرى كيف يمكن تنفيذ ذلك:

python
from sklearn.preprocessing import LabelEncoder # تحويل تسميات الفئات إلى ترميزات رقمية label_encoder = LabelEncoder() train_class_encoded = label_encoder.fit_transform(train_class) test_class_encoded = label_encoder.transform(test_class)

بعد ذلك، يمكننا استخدام الترميزات المتوافقة كفئات الاختبار في roc_auc_score، واستخدام المعامل average="weighted" لحساب متوسط AUC بشكل صحيح لفئات متعددة:

python
from sklearn.metrics import roc_auc_score # حساب AUC auc = roc_auc_score(test_class_encoded, predictions_proba, average="weighted")

وبالتالي، يتم حساب AUC بشكل صحيح لتصنيف الفئات المتعددة.

بالنسبة للمعامل multi_class في دالة roc_auc_score، يمكن تعيينه إلى “ovr” أو “ovo” وفقًا لتفضيلاتك. إذا كنت تفضل أسلوب one-vs-rest (ovr)، يتم حساب AUC بالنسبة لكل فئة مقابل باقي الفئات. بينما يتم استخدام one-vs-one (ovo) لحساب AUC بين كل زوج من الفئات. يمكنك تعيين هذا المعامل وفقًا للطريقة التي تفضلها لتقدير الأداء.

بهذه الطريقة، يمكنك حساب مقاييس الأداء مثل ROC-AUC، والدقة، والاستدعاء (recall)، والدقة (precision) بشكل صحيح لتصنيف الفئات متعددة باستخدام مكتبة scikit-learn. وباستخدام الإجراءات الواردة أعلاه، ستتمكن من تحسين أداء نموذجك وتقديم تقارير دقيقة حول كفاءته في التصنيف.

مقالات ذات صلة

زر الذهاب إلى الأعلى
إغلاق

أنت تستخدم إضافة Adblock

يرجى تعطيل مانع الإعلانات حيث أن موقعنا غير مزعج ولا بأس من عرض الأعلانات لك فهي تعتبر كمصدر دخل لنا و دعم مقدم منك لنا لنستمر في تقديم المحتوى المناسب و المفيد لك فلا تبخل بدعمنا عزيزي الزائر