Menu
CoddyTech
flag Ar iconالعربيةdown icon

منحنيات ROC

جزء من قسم التعلّم الخاضع للإشراف في رحلة Machine Learning على Coddy. الدرس 25 من 58.

تمنح كل عتبة قيمة استدعاء خاصة بها وعددًا خاصًا بها من الإنذارات الكاذبة. يُظهر منحنى ROC جميعها في آنٍ واحد:

منحنى أزرق متدرج يصعد من الزاوية السفلية اليسرى إلى الزاوية العلوية اليمنى، أعلى بكثير من خط قطري رمادي متقطع يمثل رمية عملة. تشير النقاط البرتقالية إلى العتبات 0.8 و0.5 و0.2، وتتحرك إلى الأعلى واليمين. المنطقة الواقعة تحته مظللة: AUC = 0.914

أفقيًا: معدل الإيجابيات الكاذبة، نسبة المرضى الأصحاء الذين تم تصنيفهم على أنهم مرضى. رأسيًا: الاستدعاء. تؤدي العتبات المنخفضة إلى الاقتراب من (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 فتعادل رمية قطعة نقدية. يلتقط المنحنى الأعلى عددًا أكبر من الحالات عند العدد نفسه من الإنذارات الكاذبة.

challenge icon

التحدي

متوسط

تُشعل مزرعة كرز نيرانًا للتدفئة من الصقيع في الليالي التي قد يحدث فيها تجمّد. يدرّب الكود التمهيدي نموذجين للصقيع، logistic وknn، ويُعدّ المخطط.

  1. اكتب draw_roc(model, name): ترسم منحنى ROC للنموذج على ax، مع تسمية name، وتطبع قيمة AUC الخاصة به كما يلي.
  2. استدعِها لكلا النموذجين، وأضف خطًا قطريًا متقطعًا بتسمية coin toss ووسيلة إيضاح، ثم اعرض المخطط.

لنماذج الانهيارات الأرضية:

logistic AUC: 0.869
k-NN AUC: 0.924

بعد ذلك، يصف Coddy مخططك. يبدو مخططهم هكذا:

منحنيات ROC بعنوان تحذيرات الانهيارات الأرضية: منحنى logistic أزرق متدرج ومنحنى k-NN برتقالي ذو زوايا قليلة، وكلاهما أعلى بكثير من الخط القطري المتقطع الأخضر المسمى coin toss، مع وسيلة إيضاح

جرّب بنفسك

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")

# اكتب الكود الخاص بك أدناه
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس التعلّم الخاضع للإشراف

تدرّب بنفسك: مترجم Python عبر الإنترنت