منحنيات ROC
جزء من قسم التعلّم الخاضع للإشراف في رحلة Machine Learning على Coddy. الدرس 25 من 58.
تمنح كل عتبة قيمة استدعاء خاصة بها وعددًا خاصًا بها من الإنذارات الكاذبة. يُظهر منحنى ROC جميعها في آنٍ واحد:
أفقيًا: معدل الإيجابيات الكاذبة، نسبة المرضى الأصحاء الذين تم تصنيفهم على أنهم مرضى. رأسيًا: الاستدعاء. تؤدي العتبات المنخفضة إلى الاقتراب من (1, 1).
from sklearn.metrics import roc_curve, roc_auc_score
proba = model.predict_proba(X_test)[:, 1]
fpr, tpr, thresholds = roc_curve(y_test, proba) # tpr هو الاسترجاع
ax.plot(fpr, tpr)
print(f"{roc_auc_score(y_test, proba):.3f}")يطبع هذا 0.914، وهي AUC: المساحة تحت المنحنى. القيمة 1 مثالية، أما 0.5 فتعادل رمية قطعة نقدية. يلتقط المنحنى الأعلى عددًا أكبر من الحالات عند العدد نفسه من الإنذارات الكاذبة.
التحدي
متوسطتُشعل مزرعة كرز نيرانًا للتدفئة من الصقيع في الليالي التي قد يحدث فيها تجمّد. يدرّب الكود التمهيدي نموذجين للصقيع، logistic وknn، ويُعدّ المخطط.
- اكتب
draw_roc(model, name): ترسم منحنى ROC للنموذج علىax، مع تسميةname، وتطبع قيمة AUC الخاصة به كما يلي. - استدعِها لكلا النموذجين، وأضف خطًا قطريًا متقطعًا بتسمية
coin tossووسيلة إيضاح، ثم اعرض المخطط.
لنماذج الانهيارات الأرضية:
logistic AUC: 0.869
k-NN AUC: 0.924بعد ذلك، يصف Coddy مخططك. يبدو مخططهم هكذا:
جرّب بنفسك
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import roc_curve, roc_auc_score
# صف واحد لكل ليلة ربيعية في مزرعة كرز: القيمة 1 في frost تعني أن الصقيع تشكّل قبل الفجر
nights = pd.read_csv("frost.csv")
features = ["temp_6pm_c", "humidity_pct", "wind_kmh", "cloud_pct"]
X_train, X_test, y_train, y_test = train_test_split(
nights[features], nights["frost"], test_size=0.25, random_state=0, stratify=nights["frost"])
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)
# نموذجان للتنبؤ بالصقيع
logistic = LogisticRegression(max_iter=1000)
logistic.fit(X_train, y_train)
knn = KNeighborsClassifier(n_neighbors=5)
knn.fit(X_train, y_train)
fig, ax = plt.subplots()
ax.set_title("Frost Warnings")
ax.set_xlabel("False positive rate")
ax.set_ylabel("Recall")
# اكتب الكود الخاص بك أدناه
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس التعلّم الخاضع للإشراف
5قياس أداء المصنّفات
مصفوفة الالتباسالدقة والاستدعاءدرجة F1الفئات غير المتوازنةمنحنيات ROCمراجعة: اختبار الفحصتدرّب بنفسك: مترجم Python عبر الإنترنت