עקומות 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")
# כתבו את הקוד שלכם למטה
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה למידה מונחית
תרגלו בעצמכם: קומפיילר Python אונליין