اذهب إلى المحتوى
  • 0

معيار ROC و AUC وتطبيقهما باستخدام مكتبة scikit-learn

Meezo ML

السؤال

Recommended Posts

  • 2


ROC&AUC Score
ROC (Receiver Operating Characteristics)curve
AUC (Area Under The Curve)
ROC&AUC Score: هو معيار لقياس كفاءة نماذج التصنيف.
للفهم جيداً يجب أن يكون لديك معرفة حول Recall(Sensitivity) و Precision(Specificity) وقد أشرت لهما سابقاً في هذا الرابط:
https://academy.hsoub.com/questions/15466-حساب-ال-precision-و- recall-باستخدام-مكتبة-scikit-learn/
في الصورة المرفقة رسم بياني يعبر عن ROC&AUC ، بحيث :
أولاً:
<<TPR (True Positive Rate) or Recall or Sensitivity>>
يمثل المحور العمودي، ويساوي إلى TP/(TP+FN) ويعبر عن ال Recall أي ال Sensitivity.

ثانياً:
<<FPR(False Positive Rate)>>
 ويساوي إلى FP/(FP+TN) أي أنه متمم ال Specificity أي : FPR=1-Specificity.
ثالثاً:
ROC: يمثل المنحنى الاحتمالي الذي يعبر عن العلاقة بين المحورين.
رابعاً:
AUC هو المساحة تحت المنحنى ويعبر عن درجة قدرة النموذج على الفصل بين الفئات Classes. ستلاحظ في الأكواد التالية أن زيادة المساحة تحت المنحني تشير إلى أداء أقوى للنموذج.
60bf7f77364b6_AUCRUC.png.b68eae5daa63aa666422683d3987d1f3.png
مناقشة القيم أو قراءة القيم:
كلما كانت درجة  AUC أكبر كلما كان النموذج أفضل علماً أن أعلى قيمة لها 1 وأقل قيمة 0.
في حال كانت قيمة AUC=1 فهذا يعني أن النموذج قادر على الفصل بين الClasses بنسبة 100%.  الكود رقم 1 يعبر عن هذه الحالة.
AUC=0.5 فهذا يعني أن النموذج غير قادر على الفصل بين ال Classes اطلاقاً وهي حالة سيئة، وفيه يكون النموذج غير قادر على إعطاء قرار، أي مثلا في مهمة تصنيف صور القطط والكلاب تشير قيمة 0.5 لل AUC إلى أن النموذج سيقف حائراً أمام أي صورة أي كأن يقول أن هذه الصورة هي 50% كلب و 50% قط. الكود رقم 2 يعبر عن هذه الحالة.
AUC=0 فهذا يعني أن النموذج يتنبأ بشكل عكسي بالقيم أي يتموقع أن الأصناف الإيجابية سلبية والعكس بالعكس أي يقول عن القط كلب والكلب قط وبكل ثقة. الكود رقم 3 يعبر عن هذه الحالة.
الشكل العام للتابع الذي يقوم بحساب ROC في Sklearn:

sklearn.metrics.roc_curve(y_true, y_score)

الوسيطين الأول والثاني يعبران عن القيم الحقيقية والمتوقعة على التوالي.
يرد التابع 3 قيم fpr و tpr والعتبة وسنستخدم هذه القيم لحساب درجة AUC.
الشكل العام للتابع الذي يقوم بحساب AUC في Sklearn:

sklearn.metrics.auc(fpr, tpr)

قم بتجريب الأكواد التالية لتحصل على الخرج وترى الفروقات:
# الكود 1

############################# Case 1 ########################################
# استيراد المكتبات اللازمة
from sklearn.metrics import roc_curve
from sklearn.metrics import auc
import matplotlib.pyplot as plt
import numpy as np
# بفرض لدي القيم الحقيقية والمتوقعة التالية 
y =      np.array([1 ,    1 ,   0 ,   1,   1]) 
y_pred = np.array([0.99 ,0.02 ,0.01, 0.99,0.999])   #لاحظ  نسبة التطابق 

fpr, tpr, threshold = roc_curve(y,y_pred) 
print('TPR'+str(tpr)+'\n'+'FPR'+str(fpr)+'\n'+'threshold'+str(threshold)) # طباعة قيم الخرج

# لرسم المنحنى
plt.plot(fpr, tpr)
plt.title('ROC curve')
plt.xlabel('False Positive Rate (1 - Specificity)')
plt.ylabel('True Positive Rate (Sensitivity)')
plt.grid(True)

AUC = auc(fpr, tpr)     	# حساب قيمة AUC
print('AUC Value  : ', AUC) # طباعة القيمة


#الكود 2

############################# Case 2 ########################################
# استيراد المكتبات اللازمة
from sklearn.metrics import roc_curve
from sklearn.metrics import auc
import matplotlib.pyplot as plt
import numpy as np
# بفرض لدي القيم الحقيقية والمتوقعة التالية 
y =      np.array([0 ,1 ,0 ,1,0]) 
y_pred = np.array([0.5 ,0.5 ,0.5, 0.5, 0.5])   # لاحظ أننا غيرنا القيم

fpr, tpr, threshold = roc_curve(y,y_pred)
print('TPR'+str(tpr)+'\n'+'FPR'+str(fpr)+'\n'+'threshold'+str(threshold))
plt.plot(fpr, tpr)
plt.title('ROC curve')
plt.xlabel('False Positive Rate (1 - Specificity)')
plt.ylabel('True Positive Rate (Sensitivity)')
plt.grid(True)

AUC = auc(fpr, tpr)
print('AUC Value  : ', AUC)

# الكود 3

############################# Case 3 ########################################
# استيراد المكتبات اللازمة
from sklearn.metrics import roc_curve
from sklearn.metrics import auc
import matplotlib.pyplot as plt
import numpy as np
# بفرض لدي القيم الحقيقية والمتوقعة التالية 
y = np.array([0 ,1 ,0 ,0,0]) 
y_pred = np.array([0.9 ,0.1 ,0.9, 0.9, 0.9])  

fpr, tpr, threshold = roc_curve(y,y_pred)
print('TPR'+str(tpr)+'\n'+'FPR'+str(fpr)+'\n'+'threshold'+str(threshold))
plt.plot(fpr, tpr)
plt.title('ROC curve')
plt.xlabel('False Positive Rate (1 - Specificity)')
plt.ylabel('True Positive Rate (Sensitivity)')
plt.grid(True)

AUC = auc(fpr, tpr)
print('AUC Value  : ', AUC)

 

تم التعديل في بواسطة Ali Haidar Ahmad
رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...