Kurva ROC
Termasuk bagian Pembelajaran Terawasi dalam perjalanan Machine Learning di Coddy. Pelajaran 25 dari 58.
Setiap threshold memiliki recall dan false alarm masing-masing. Kurva ROC menampilkan semuanya sekaligus:
Pada sumbu horizontal: tingkat positif palsu, proporsi pasien sehat yang ditandai. Pada sumbu vertikal: recall. Ambang batas yang lebih rendah bergerak menuju (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 adalah recall
ax.plot(fpr, tpr)
print(f"{roc_auc_score(y_test, proba):.3f}")Ini mencetak 0.914, yaitu AUC: luas di bawah kurva. Nilai 1 sempurna, sedangkan 0.5 seperti lempar koin. Kurva yang lebih tinggi menangkap lebih banyak dengan jumlah alarm palsu yang sama.
Tantangan
SedangKebun ceri menyalakan api penghangat untuk mencegah embun beku pada malam yang mungkin membeku. Kode awal melatih dua model embun beku, logistic dan knn, lalu menyiapkan grafik.
- Tulis
draw_roc(model, name): fungsi ini menggambar kurva ROC model padaax, dengan labelname, lalu mencetak AUC-nya seperti di bawah. - Panggil fungsi itu untuk kedua model, tambahkan garis diagonal putus-putus berlabel
coin tossdan legenda, lalu tampilkan grafik.
Untuk model tanah longsor:
logistic AUC: 0.869
k-NN AUC: 0.924Lalu Coddy menjelaskan grafikmu. Grafiknya terlihat seperti ini:
Coba sendiri
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
# Satu baris untuk setiap malam musim semi di kebun ceri: 1 pada frost berarti embun beku terbentuk sebelum fajar
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)
# Dua model prediksi embun beku
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")
# Tulis kodemu di bawah ini
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pembelajaran Terawasi
1Model Pertamamu
Belajar dari ContohData Latih dan Data UjiMelatih dan MemprediksiMenilai ModelRangkuman: Penyortir Benih4Regresi Logistik
Prediksi Ya atau TidakAmbang KeputusanBobot sebagai BuktiBeberapa KelasRangkuman: Filter Spam2Tetangga Terdekat
Cara k-NN MenentukanMemilih kBatas KeputusanPenskalaan untuk TetanggaRingkasan: Tetangga Wine5Mengukur Model Klasifikasi
Matriks KonfusiPresisi dan RecallSkor F1Kelas Tidak SeimbangKurva ROCRangkuman: Tes SkriningLatihan sendiri: Compiler Python online