Menu
CoddyTech

עקומות 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 כתומה עם מעט פינות, שתיהן גבוהות בהרבה מאלכסון מקווקו ירוק של הטלת מטבע, עם מקרא

נסו בעצמכם

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 אונליין