تمرين - تصور مخرجات النموذج
في هذه الوحدة، ستقوم باستيراد Matplotlib إلى دفتر الملاحظات الذي كنت تعمل به، وتُكوِّن دفتر الملاحظات لدعم إخراج مضمن لـ Matplotlib.
التحول مرة أخرى إلى Azure notebook الذي قمت بإنشائه في المقطع السابق. إذا قمت بإغلاق دفتر الملاحظات، يمكنك تسجيل الدخول مرة أخرى إلى مدخل Microsoft Azure Notebooks، افتح دفتر ملاحظاتك، واستخدم Cell ->Run All لإعادة تشغيل جميع الخلايا في دفتر الملاحظات بعد فتحه.
نفذ العبارات التالية في خلية جديدة في نهاية دفتر الملاحظات. تجاهل أية رسائل تحذير يتم عرضها، والتي تتعلق بالتخزين المؤقت للخط:
%matplotlib inline import matplotlib.pyplot as plt import seaborn as sns sns.set()العبارة الأولى هي واحدة من العديد من الأوامر السحرية التي يدعمها نواة Python التي حددتها عند إنشاء دفتر الملاحظات. وهو يمكن Jupyter من عرض إخراج Matplotlib في دفتر ملاحظات دون إجراء مكالمات متكررة لإظهارها. ويجب أن تظهر قبل أي مراجع إلى Matplotlib نفسه. العبارة النهائية تكوين Seaborn لتحسين الإخراج من Matplotlib.
لمشاهدة Matplotlib في العمل، قم بتنفيذ التعليمات البرمجية التالية في خلية جديدة لرسم منحنى ROC لنموذج التعلم الآلي الذي أنشأته في المختبر السابق:
from sklearn.metrics import roc_curve fpr, tpr, _ = roc_curve(test_y, probabilities[:, 1]) plt.plot(fpr, tpr) plt.plot([0, 1], [0, 1], color='grey', lw=1, linestyle='--') plt.xlabel('False Positive Rate') plt.ylabel('True Positive Rate')تأكد من أنك تشاهد المخرجات التالية:
منحنى ROC الذي تم إنشاؤه باستخدام Matplotlib
يمثل الخط المنقط في منتصف الرسم البياني فرصة 50-50 للحصول على إجابة صحيحة. يمثل المنحنى الأزرق دقة النموذج الخاص بك. الأهم من ذلك، حقيقة أن هذا المخطط البياني يظهر في المطلق موضحاً أنه يمكنك استخدام Matplotlib في دفتر ملاحظات Jupyter.
يعد سبب قيامك ببناء نموذج للتعلم الآلي هو التوقع بما إذا كانت الرحلة ستصل في الوقت المحدد أو متأخرة. في هذا التمرين، ستقوم بكتابة دالة Python التي تستدعي نموذج التعلم الآلي الذي قمت ببنائه في المعمل السابق لحساب احتمالية أن تكون الرحلة في الوقت المحدد. ثم عليك استخدام الدالة لتحليل عدة رحلات.
أدخل تعريف الدالة التالية في خلية جديدة، ثم قم بتشغيل الخلية.
def predict_delay(departure_date_time, origin, destination): from datetime import datetime try: departure_date_time_parsed = datetime.strptime(departure_date_time, '%d/%m/%Y %H:%M:%S') except ValueError as e: return 'Error parsing date/time - {}'.format(e) month = departure_date_time_parsed.month day = departure_date_time_parsed.day day_of_week = departure_date_time_parsed.isoweekday() hour = departure_date_time_parsed.hour origin = origin.upper() destination = destination.upper() input = [{'MONTH': month, 'DAY': day, 'DAY_OF_WEEK': day_of_week, 'CRS_DEP_TIME': hour, 'ORIGIN_ATL': 1 if origin == 'ATL' else 0, 'ORIGIN_DTW': 1 if origin == 'DTW' else 0, 'ORIGIN_JFK': 1 if origin == 'JFK' else 0, 'ORIGIN_MSP': 1 if origin == 'MSP' else 0, 'ORIGIN_SEA': 1 if origin == 'SEA' else 0, 'DEST_ATL': 1 if destination == 'ATL' else 0, 'DEST_DTW': 1 if destination == 'DTW' else 0, 'DEST_JFK': 1 if destination == 'JFK' else 0, 'DEST_MSP': 1 if destination == 'MSP' else 0, 'DEST_SEA': 1 if destination == 'SEA' else 0 }] return model.predict_proba(pd.DataFrame(input))[0][0]تؤخذ هذه الدالة كمدخلات للتاريخ والوقت، والتعليمة البرمجية للمطار الأصلي، والتعليمة البرمجية لمطار الوجهة، وتقوم بإرجاع قيمة بين 0.0 و1.0 موضحة احتمالية أن تصل الرحلة إلى وجهتها في الوقت المحدد. ويُستخدم نموذج التعلم الآلي الذي بنيته في المعمل السابق لحساب الاحتمال. واستدعاء النموذج، فإنه يمرر DataFrame يحتوي على قيم الإدخال إلى
predict_proba. يطابق هيكل الـ DataFrame تمامًا هيكل ال DataFrame الذي استخدمناه سابقًا.إشعار
يستخدم إدخال التاريخ إلى الدالة
predict_delayتنسيقdd/mm/yearالتاريخ الدولي .استخدم التعليمة البرمجية أدناه لحساب احتمالية وصول رحلة في الوقت المحدد من New York إلى Atlanta مساء يوم 1 أكتوبر. السنة التي تدخلها غير ذات صلة؛ لأنها غير مستخدمة من قبل النموذج.
predict_delay('1/10/2018 21:45:00', 'JFK', 'ATL')تأكد من أن المخرجات تُظهر أن احتمال الوصول في الوقت المحدد هو 60٪:
التنبؤ بما إذا كانت الرحلة ستصل في الوقت المحدد
قم بتعديل التعليمة البرمجية؛ لحساب احتمالية وصول نفس الرحلة في الوقت المحدد في يوم لاحق:
predict_delay('2/10/2018 21:45:00', 'JFK', 'ATL')ما مدى احتمال وصول هذه الرحلة في الوقت المحدد؟ إذا كانت خطط السفر الخاصة بك مرنة، هل تفكر في تأجيل رحلتك ليوم واحد؟
الآن قم بتعديل التعليمة البرمجية لحساب احتمال أن رحلة صباحية في نفس اليوم من Atlanta إلى Seattle ستصل في الوقت المحدد:
predict_delay('2/10/2018 10:00:00', 'ATL', 'SEA')هل من المحتمل أن تصل هذه الرحلة في الوقت المحدد؟
لديك الآن طريقة سهلة للتوقع، مع تعليمة برمجية من سطر واحد، بما إذا كان من المحتمل أن تكون الرحلة في الوقت المحدد أو متأخرة. لا تتردد في تجربة تواريخ، وأوقات، وأصول، ووجهات أخرى. ولكن خذ في الاعتبار أن النتائج هي ذات مغزى فقط لرموز المطار ATL، وDTW، وJFK، وMSP، وSEA؛ لأن تلك هي رموز المطار التي تم فقط تدريب النموذج معها.
نفذ التعليمة البرمجية التالية لرسم احتمال الوصول في الوقت المحدد لرحلة مسائية من JFK إلى ATL على مدى عدد من الأيام:
import numpy as np labels = ('Oct 1', 'Oct 2', 'Oct 3', 'Oct 4', 'Oct 5', 'Oct 6', 'Oct 7') values = (predict_delay('1/10/2018 21:45:00', 'JFK', 'ATL'), predict_delay('2/10/2018 21:45:00', 'JFK', 'ATL'), predict_delay('3/10/2018 21:45:00', 'JFK', 'ATL'), predict_delay('4/10/2018 21:45:00', 'JFK', 'ATL'), predict_delay('5/10/2018 21:45:00', 'JFK', 'ATL'), predict_delay('6/10/2018 21:45:00', 'JFK', 'ATL'), predict_delay('7/10/2018 21:45:00', 'JFK', 'ATL')) alabels = np.arange(len(labels)) plt.bar(alabels, values, align='center', alpha=0.5) plt.xticks(alabels, labels) plt.ylabel('Probability of On-Time Arrival') plt.ylim((0.0, 1.0))تأكد من أن المخرجات تبدو كما يلي:
احتمال الوصول في الوقت المحدد لمجموعة من التواريخ
قم بتعديل التعليمة البرمجية؛ لإنتاج مخطط بياني مماثل للرحلات التي تغادر JFK إلى MSP في 1:00 مساءً. في الفترة من 10 أبريل إلى 16 أبريل. كيف تكون المخرجات مقارنةً بالمخرجات في الخطوة السابقة؟
قم بكتابة تعليمة برمجية بنفسك لعمل رسم بياني لاحتمالية الرحلات التي تغادر SEA إلى ATL في الساعات 9:00 صباحاً، وظهراً، و3:00 مساءً، و6:00 مساءً، و9:00 مساءً بتاريخ 30 يناير والتي تصل في الموعد المحدد. تأكد من أن المخرجات تطابق هذا:
احتمال الوصول في الوقت المحدد لمجموعة من الأوقات
إذا كنت جديداً على Matplotlib، وتود أن تعرف المزيد عنه، فستجد برنامجاً تعليمياً ممتازاً حوله في https://www.labri.fr/perso/nrougier/teaching/matplotlib/. هناك أكثر بكثير عن Matplotlib مما هو موضح هنا، وهذا يُعد أحد الأسباب التي تجعله شائعاً جداً في مجتمع Python.