فيديو

جدول المحتويات:

Anonim

إذا كنت مرتبكًا بشأن مصفوفة الارتباك ، فأتمنى أن يساعدك هذا المنشور في فهمها! قراءة سعيدة.

سنستخدم مجموعة بيانات مصادقة مذكرات UCI Bank لإزالة الغموض عن الارتباك وراء مصفوفة الارتباك. سنقوم بتوقع وتقييم نموذجنا ، وعلى طول الطريق تطوير فهمنا المفاهيمي. كما سيتم توفير الروابط لمزيد من القراءة حيثما كان ذلك مطلوبًا.

فهم البيانات

تحتوي Dataset على خصائص الصورة المحولة للمويجات التي تبلغ 400 × 400 بكسل من BankNote ، ويمكن العثور عليها هنا. يوصى للقارئ بتنزيل مجموعة البيانات ومتابعتها. لمزيد من المرجع ، يمكنك العثور على Kaggle Notebook هنا.

#Skinging استيراد المكتبات الضرورية
# قراءة ملف البيانات
df = pd.read_csv ('../ input / BankNote_Authentication.csv')
df.head (5)

# للتحقق مما إذا كانت البيانات متوازنة بالتساوي بين الفئات المستهدفة
مدافع 'الطبقة'. value_counts ()

بناء النموذج

تقسيم البيانات إلى مجموعة تدريب واختبار ، Train هو الذي سنقوم بتدريب نموذجنا وسيتم إجراء التقييم على مجموعة الاختبار ، ونحن نتخطى مجموعة التحقق من الصحة هنا من أجل البساطة ونقص البيانات الكافية. بشكل عام ، يتم تقسيم البيانات إلى ثلاث مجموعات تدريب واختبار والتحقق ، اقرأ المزيد هنا.

#Defining الميزات والمتغير الهدف
y = df 'class' # هدف مستهدف نريد التنبؤ به
X = df.drop (أعمدة = 'class') # مجموعة من الميزات المطلوبة ، وفي هذه الحالة جميعها

#Splitting البيانات في القطار ومجموعة الاختبار
X_train ، X_test ، y_train ، y_test = train_test_split (X، y، test_size = 0.25، random_state = 42)

بعد ذلك ، سنقوم بعمل نموذج انحداري لوجستي بسيط لتوقعاتنا.

#Picticting باستخدام الانحدار اللوجستي للتصنيف الثنائي
من sklearn.linear_model استيراد LogisticRegression
LR = LogisticRegression ()
LR.fit (X_train، y_train) # تركيب النموذج
y_pred = LR.predict (X_test) #تنبؤ

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

دعنا نرسم مصفوفة الارتباك الأكثر إرباكاً؟ Just Kidding ، يتيح لك مصفوفة ارتباك بسيطة (وثائق Scikit-Learn المستخدمة في الكود أدناه).

# تقييم النموذج - ارسم مصفوفة الارتباك
def plot_confusion_matrix (سم ، الطبقات ،
تطبيع = خطأ،
title = 'مصفوفة الارتباك' ،
CMAP = plt.cm.Blues):
'''
تقوم هذه الوظيفة بطباعة ورسم مصفوفة الارتباك.
يمكن تطبيق التطبيع عن طريق ضبط `تطبيع = صحيح`.
'''
إذا تطبيع:
cm = cm.astype ('float') / cm.sum (محور = 1) : ، np.newaxis
طباعة ("مصفوفة الارتباك العادية")
آخر:
طباعة ("مصفوفة الارتباك ، بدون التطبيع")
طباعة (سم)
plt.imshow (cm ، الاستيفاء = 'الأقرب' ، cmap = cmap)
plt.title (العنوان)
plt.colorbar ()
tick_marks = np.arange (len (classes))
plt.xticks (tick_marks ، الطبقات ، التدوير = 45)
plt.yticks (tick_marks ، الطبقات)
fmt = '.2f' إذا تطبيع آخر 'd'
العتبة = cm.max () / 2.
لأني ، ي في itertools.product (النطاق (سم. شكل 0) ، النطاق (سم. شكل 1)):
plt.text (j، i، format (cm i، j، fmt)،
horizontalalignment = "مركز"،
color = "white" if cm i، j> العتبة "أسود")
plt.ylabel ("التسمية الحقيقية")
plt.xlabel ('التصنيف المتوقع')
plt.tight_layout ()

# حساب مصفوفة الارتباك
cnf_matrix = confusion_matrix (y_test ، y_pred)
np.set_printoptions (الدقة = 2)
# ارسم مصفوفة الارتباك غير الطبيعية
plt.figure ()
plot_confusion_matrix (cnf_matrix، classes = 'Forged'، 'Authorized'،
title = 'مصفوفة الارتباك ، بدون التطبيع')

#extracting true_positives، false_positives، true_negatives، false_negatives
tn ، fp ، fn ، tp = confusion_matrix (y_test ، y_pred) .ravel ()
طباعة ("السلبيات الحقيقية:" ، تينيسي)
طباعة ("ايجابيات كاذبة:" ، fp)
طباعة ("السلبيات الكاذبة:" ، fn)
طباعة ("الإيجابيات الحقيقية:" ، tp)

ما مدى دقة نموذجنا؟

#صحة
الدقة = (tn + tp) * 100 / (tp + tn + fp + fn)
طباعة ("الدقة {: 0.2f}٪:" ، التنسيق (الدقة))

هل الدقة مهمة؟

ليس دائمًا ، فقد لا يكون المقياس الصحيح في بعض الأحيان ، خاصةً إذا كانت الفئة المستهدفة غير متوازنة (البيانات مائلة). بعد ذلك ، يمكنك التفكير في مقاييس إضافية مثل Precision و Recall و F score (المقياس المجمع) ، ولكن قبل الغوص يتيح لك التراجع وفهم المصطلحات التي تشكل الأساس لهذه.

بعض الشروط الأساسية

صحيح إيجابي - التصنيف الذي تم التنبؤ به إيجابي (في السيناريو الخاص بنا ، الأوراق النقدية البنكية الموثوقة) والإيجابي (أي ينتمي إلى فئة "معتمدة" الإيجابية).

سلبي حقيقي - التصنيف الذي تم التنبؤ به سالبًا (في السيناريو الخاص بنا ، الأوراق النقدية المزورة) وهو سالب (أي ينتمي إلى فئة سالب "مزورة").

إيجابية كاذبة - التصنيف الذي تم التنبؤ به على أنه إيجابي ، ولكنه سلبي بالفعل ، أو بعبارة بسيطة ، تنبأ "الملاحظة" خطأً بأنها "أصلية" من قبل "نموذجنا" ، ولكن "مزورة" بالفعل. في اختبار الفرضيات ، يُعرف أيضًا باسم خطأ النوع 1 أو الرفض الخاطئ للفرضية الصفرية ، راجع هذا لقراءة المزيد حول اختبار الفرضيات.

السلبيات الكاذبة - التصنيفات التي تم التنبؤ بها على أنها سلبية ، ولكنها في الحقيقة إيجابية (ملاحظة حجية متوقعة باسم مزورة). وكما هو معروف خطأ النوع 2 ، مما يؤدي إلى فشل في رفض فرضية لاغية.

الآن ، دعونا نلقي نظرة على معظم مقاييس التقييم الشائعة التي يجب أن يعرفها كل ممارس للتعلم الآلي!

مقاييس تتجاوز الدقة

الاحكام

إنها "الدقة" ، قدرة النموذج على إرجاع الحالات ذات الصلة فقط. إذا كان بيان حالة / مشكلة الاستخدام الخاص بك يتضمن تقليل المواقف الخاطئة إلى الحد الأدنى ، أي في السيناريو الحالي إذا كنت لا ترغب في تصنيف الملاحظات المزورة على أنها أصلية حسب النموذج ، فإن الدقة هي شيء تحتاجه.

#الاحكام
الدقة = tp / (tp + fp)
طباعة ("الدقة {: 0.2f}". التنسيق (الدقة))

اعد الاتصال

إنها "اكتمال" ، قدرة النموذج على تحديد جميع الحالات ذات الصلة ، معدل إيجابي حقيقي ، ويعرف أيضًا باسم الحساسية. في السيناريو الحالي ، إذا كان تركيزك هو الحصول على أقل السلبيات الخاطئة ، بمعنى أنك لا تصادق على الحواشي الأصلية بشكل خاطئ على أنها "مزورة" ، فيمكن أن تتذكر عملية الإنقاذ.

#اعد الاتصال
استرجع = tp / (tp + fn)
طباعة ("Recall {: 0.2f}". التنسيق (Recall))

F1 التدبير

متوسط ​​متناسق من Precision & Recall ، يستخدم للإشارة إلى وجود توازن بين Precision & Recall يوفر كل أوزان متساوية ، يتراوح من 0 إلى 1. تصل F1 Score إلى أفضل قيمة لها عند 1 (الدقة الكاملة والاستدعاء) والأسوأ عند 0 ، اقرأ المزيد هنا .

# F1 النتيجة
f1 = (2 * الدقة * الاستدعاء) / (الدقة + الاستدعاء)
طباعة ("F1 Score {: 0.2f}". التنسيق (f1))

F- بيتا التدبير

هذا هو الشكل العام للقياس F - يتم استخدام Beta 0.5 & 2 عادةً كقياسات ، ويشير 0.5 إلى الميل نحو الدقة في حين أن 2 يحبذ استدعاء ، مما يعطيها ضعف الوزن مقارنة بالدقة.

# F- بيتا حساب النتيجة
def fbeta (الدقة ، الاستدعاء ، النسخة التجريبية):
عودة ((1 + أسير حرب (تجريبية ، 2)) * الدقة * استدعاء) / (الأسرى (تجريبية ، 2) * الدقة + استدعاء)

f2 = fbeta (الدقة ، التذكير ، 2)
f0_5 = fbeta (الدقة ، التذكير ، 0.5)
طباعة ("F2 {: 0.2f}". التنسيق (f2))
طباعة (" nF0.5 {: 0.2f}". التنسيق (f0_5))

النوعية

يشار إليها أيضًا باسم "المعدل السلبي الحقيقي" (نسبة السلبيات الفعلية التي تم تحديدها بشكل صحيح) ، أي المزيد من السلبيات الحقيقية ، حيث تحتفظ البيانات بخصوصية أعلى.

#النوعية
الخصوصية = tn / (tn + fp)
طباعة ("Specificity {: 0.2f}". التنسيق (Specificity))

ROC (منحنى خاصية تشغيل المستقبل)

مؤامرة "معدل إيجابي حقيقي" (الحساسية / التذكير) مقابل "معدل إيجابي كاذب" (1-خصوصية) في عتبات تصنيف مختلفة.

تقيس المنطقة الواقعة تحت منحنى ROC (المنطقة الزمنية الجامعة) المنطقة بأكملها ثنائية الأبعاد أسفل المنحنى. إنه مقياس لمدى تميز المعلمة بين مجموعتين تشخيصيتين. يستخدم غالبًا كمقياس لجودة نماذج التصنيف.

يحتوي المصنف العشوائي على منطقة أسفل منحنى 0.5 ، بينما تساوي AUC لمصنف مثالي 1.

#ROC
استيراد scikitplot كما skplt # لجعل الأمور سهلة
y_pred_proba = LR.predict_proba (X_test)
skplt.metrics.plot_roc_curve (y_test، y_pred_proba)
plt.show ()

استنتاج

نظرًا لأن المشكلة التي تم تحديدها لتوضيح استخدام مصفوفة الارتباك والمقاييس ذات الصلة كانت بسيطة ، فقد وجدت كل قيمة في المستوى الأعلى (98٪ أو أعلى) سواء كانت الدقة أو الاستدعاء أو الدقة ؛ عادةً ما لن يكون هذا هو الحال ، وسوف تحتاج إلى معرفة المجال بالبيانات للاختيار من بينها مقياس واحد أو آخر (غالبًا ما يكون مزيجًا من المقاييس).

على سبيل المثال: إذا كان الأمر يتعلق بالعثور على "البريد العشوائي في صندوق البريد الخاص بك" ، دقة عالية سيكون لنموذجك أهمية كبيرة (حيث لا ترغب في تصنيف لحم الخنزير كرسالة غير مرغوب فيها) ، فسيخبرنا عن نسبة الرسائل التي صنّفناها كرسائل غير مرغوب فيها ، كانت في الواقع رسائل غير مرغوب فيها. نسبة الإيجابيات الحقيقية (الكلمات المصنفة كرسائل غير مرغوب فيها ، والتي تعتبر بالفعل رسائل غير مرغوب فيها) لجميع الإيجابيات (جميع الكلمات مصنفة على أنها بريد مزعج ، بصرف النظر عما إذا كان ذلك هو التصنيف الصحيح). بينما في كشف الاحتيال قد ترغب اعد الاتصال لتكون أعلى ، بحيث يمكنك تصنيف / تحديد الاحتيالات بشكل صحيح حتى لو فاتتك تصنيف بعض النشاط غير الاحتيالي على أنه احتيال ، فهذا لن يسبب أي ضرر كبير.

موصى به اختيار المحرر