Curvas ROC
Parte de la sección Aprendizaje supervisado del Journey de Machine Learning de Coddy. Lección 25 de 58.
Cada umbral tiene su propia exhaustividad y sus propias falsas alarmas. La curva ROC las muestra todas a la vez:
En horizontal: la tasa de falsos positivos, la proporción de pacientes sanos señalados. En vertical: la recuperación. Los umbrales más bajos se acercan a (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 es la sensibilidad
ax.plot(fpr, tpr)
print(f"{roc_auc_score(y_test, proba):.3f}")Esto imprime 0.914, el AUC: el área bajo la curva. 1 es perfecto; 0.5, como lanzar una moneda. Una curva más alta detecta más casos con la misma cantidad de falsas alarmas.
Desafío
IntermedioUna granja de cerezos enciende hogueras contra las heladas en las noches en que puede helar. El código inicial entrena dos modelos de heladas, logistic y knn, y prepara el gráfico.
- Escribe
draw_roc(model, name): dibuja la curva ROC del modelo enax, etiquetada conname, e imprime su AUC como se muestra abajo. - Llámala para ambos modelos, añade una diagonal discontinua etiquetada
coin tossy una leyenda, y luego muestra el gráfico.
Para los modelos de deslizamientos de tierra:
logistic AUC: 0.869
k-NN AUC: 0.924Después Coddy describe tu gráfico. El suyo se ve así:
Pruébalo tú mismo
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
# Una fila por cada noche de primavera en una finca de cerezos: 1 en frost significa que se formó escarcha antes del amanecer
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)
# Dos modelos para predecir heladas
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")
# Escribe tu código a continuación
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Aprendizaje supervisado
1Tu primer modelo
Aprender de ejemplosConjuntos de entrenamiento y pruebaAjustar y predecirEvaluar un modeloRepaso: clasificador de semillas4Regresión logística
Predicciones de sí o noEl umbral de decisiónLos pesos como evidenciaVarias clasesRepaso: filtro de spam2Vecinos más cercanos
Cómo decide k-NNCómo elegir kFronteras de decisiónEscalado para los vecinosRepaso: vecinos del vino5Medición de clasificadores
La matriz de confusiónPrecisión y exhaustividadLa puntuación F1Clases desequilibradasCurvas ROCRepaso: prueba de detección8Validación cruzada
Validación K-FoldComparación justa de modelosBúsqueda en cuadrículaRepaso: reparaciones de monopatines11Proyecto: especies de pingüinos
Conoce a los pingüinosPrepara los datosElige un modeloAjusta el modelo ganadorPublica el modelo3Regresión lineal
Predicción de númerosVarias característicasMedición de erroresGráficos de residuosRepaso: alquiler de bicicletas6Árboles de decisión
Los árboles hacen preguntasLeer un árbolProfundidad del árbolImportancia de las característicasRepaso: decisiones de préstamosPractica por tu cuenta: Compilador de Python online