Curva de compensación de errores de detección (DET)

En este ejemplo, comparamos las curvas de características operativas del receptor (ROC) y de compensación de errores de detección (DET) de diferentes algoritmos de clasificación para la misma tarea de clasificación.

Las curvas DET se suelen graficar en escala de desviación normal. Para conseguirlo, plot_det_curve transforma las tasas de error devueltas por det_curve y la escala del eje utilizando scipy.stats.norm.

El punto de este ejemplo es demostrar dos propiedades de las curvas DET, a saber:

  1. Puede ser más fácil evaluar visualmente el rendimiento global de los diferentes algoritmos de clasificación utilizando las curvas DET en lugar de las curvas ROC. Debido a la escala lineal utilizada para graficar las curvas ROC, los diferentes clasificadores normalmente sólo difieren en la esquina superior izquierda del gráfico y parecen similares en una gran parte del mismo. Por otro lado, porque las curvas DET representan líneas rectas en la escala de desviación normal. Como tales, tienden a distinguirse en su conjunto y el área de interés abarca una gran parte del gráfico.

  2. Las curvas DET ofrecen al usuario una información directa sobre la compensación del error de detección para ayudarle en el análisis del punto de funcionamiento. El usuario puede deducir directamente del gráfico de la curva DET a qué tasa de error falso-negativo mejorará cuando esté dispuesto a aceptar un aumento de la tasa de error falso-positivo (o viceversa).

Los gráficos de este ejemplo comparan las curvas ROC de la izquierda con las correspondientes curvas DET de la derecha. No hay ninguna razón particular por la que se hayan elegido estos clasificadores para el gráfico de ejemplo en lugar de otros clasificadores disponibles en scikit-learn.

Nota

Receiver Operating Characteristic (ROC) curves, Detection Error Tradeoff (DET) curves
import matplotlib.pyplot as plt

from sklearn.datasets import make_classification
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import plot_det_curve
from sklearn.metrics import plot_roc_curve
from sklearn.model_selection import train_test_split
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.svm import LinearSVC

N_SAMPLES = 1000

classifiers = {
    "Linear SVM": make_pipeline(StandardScaler(), LinearSVC(C=0.025)),
    "Random Forest": RandomForestClassifier(
        max_depth=5, n_estimators=10, max_features=1
    ),
}

X, y = make_classification(
    n_samples=N_SAMPLES, n_features=2, n_redundant=0, n_informative=2,
    random_state=1, n_clusters_per_class=1)

X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=.4, random_state=0)

# prepare plots
fig, [ax_roc, ax_det] = plt.subplots(1, 2, figsize=(11, 5))

for name, clf in classifiers.items():
    clf.fit(X_train, y_train)

    plot_roc_curve(clf, X_test, y_test, ax=ax_roc, name=name)
    plot_det_curve(clf, X_test, y_test, ax=ax_det, name=name)

ax_roc.set_title('Receiver Operating Characteristic (ROC) curves')
ax_det.set_title('Detection Error Tradeoff (DET) curves')

ax_roc.grid(linestyle='--')
ax_det.grid(linestyle='--')

plt.legend()
plt.show()

Tiempo total de ejecución del script: (0 minutos 0.264 segundos)

Galería generada por Sphinx-Gallery