56 votos

¿Cómo determinar el umbral óptimo para un clasificador y generar una curva ROC?

Digamos que tenemos un clasificador SVM, ¿cómo generamos la curva ROC? (Como teóricamente) (porque estamos generando TPR y FPR con cada uno de los umbrales). ¿Y cómo determinamos el umbral óptimo para este clasificador SVM?

25voto

Tom Puntos 168

Utiliza el clasificador SVM para clasificar un conjunto de ejemplos anotados, y se puede identificar "un punto" en el espacio ROC basado en una predicción de los ejemplos. Supongamos que el número de ejemplos es 200, primero cuente el número de ejemplos de los cuatro casos.

\begin \hline & \text {etiquetado como verdadero} & \text {etiquetado como falso} \\ \hline \text {predicho verdadero} &71& 28 \\ \hline \text {predicho falso} &57&44 \\ \hline \end {\i1}{\b1}

Luego calcula la TPR (Tasa de Verdaderos Positivos) y la FPR (Tasa de Falsos Positivos). $TPR = 71/ (71+57)=0.5547$ y $FPR=28/(28+44) = 0.3889$ En el espacio ROC, el eje X es FPR, y el eje Y es TPR. Así que el punto $(0.3889, 0.5547)$ se obtiene.

Para dibujar una curva ROC, sólo

  1. Ajustar algún valor umbral que controle el número de ejemplos etiquetados como verdadero o falso
    Por ejemplo, si la concentración de cierta proteína por encima de α% significa una enfermedad, los diferentes valores de α dan diferentes valores finales de TPR y FPR. Los valores umbral pueden determinarse simplemente de manera similar a la búsqueda en la cuadrícula; etiquetar los ejemplos de entrenamiento con diferentes valores umbral, entrenar los clasificadores con diferentes conjuntos de ejemplos etiquetados, ejecutar el clasificador en los datos de la prueba, calcular los valores de FPR y seleccionar los valores umbral que cubren los valores de FPR bajos (cerca de 0) y altos (cerca de 1), es decir, cerca de 0, 0,05, 0,1, ..., 0,95, 1

  2. Generar muchos conjuntos de ejemplos anotados

  3. Ejecute el clasificador en los conjuntos de ejemplos

  4. Calcula un punto (FPR, TPR) para cada uno de ellos

  5. Dibuja la curva ROC final

Algunos detalles se pueden comprobar en http://en.wikipedia.org/wiki/Receiver_operating_characteristic .

Además, estos dos enlaces son útiles sobre cómo determinar un umbral óptimo. Un método simple es tomar el que tiene la máxima suma de tasas positivas verdaderas y negativas falsas. Otros criterios más finos pueden incluir otras variables que impliquen umbrales diferentes, como los costos financieros, etc.
http://www.medicalbiostatistics.com/roccurve.pdf
http://www.kovcomp.co.uk/support/XL-Tut/life-ROC-curves-receiver-operating-characteristic.html

18voto

Ped Puntos 6

La elección de un umbral depende de la importancia del problema de clasificación de TPR y FPR. Por ejemplo, si su clasificador decidirá qué sospechosos criminales recibirán una sentencia de muerte, los falsos positivos son muy malos (¡los inocentes serán asesinados!). Por lo tanto, usted elegiría un umbral que produzca una FPR baja mientras mantiene una TPR razonable (de modo que usted realmente atrape a algunos verdaderos criminales). Si no hay ninguna preocupación externa sobre la TPR baja o la FPR alta, una opción es ponderarlas igualmente eligiendo el umbral que maximice $TPR-FPR$ .

16voto

bizarre1001 Puntos 93

Elige el punto más cercano a la esquina superior izquierda de tu espacio ROC. Ahora el umbral usado para generar este punto debería ser el óptimo.

4voto

Vicky Puntos 53

Una forma muy fácil de elegir un umbral es tomar la mediana de los valores predichos de los casos positivos para un conjunto de pruebas. Esto se convierte en tu umbral.

El umbral se aproxima relativamente al mismo umbral que se obtendría utilizando la curva de roc donde se superponen la tasa positiva verdadera (tpr) y la tasa positiva falsa (fpr). Esta cruz tpr (cruz) 1-fpr maximiza los verdaderos positivos mientras minimiza los falsos negativos.

4voto

Eric Hamel Puntos 11

Siguiendo el comentario de Will.

Este artículo (www0.cs.ucl.ac.uk/staff/W.Langdon/roc) tiene algunos puntos buenos bajo el título "Elección del punto de operación". Elegir el punto más cercano a la esquina superior izquierda de una curva ROC equivale a elegir el punto de operación de tal manera que TPR = TNR, es decir, los falsos positivos son igual de malos que los falsos negativos. - Will Nov 13 a las 15:57.

Usando la línea de iscostes del enlace www0.cs.ucl.ac.uk/staff/W.Langdon/roc. Usando estos conceptos:

alpha = costo_falso_positivo = costo de un falso positivo (falsa alarma)

beta = costo_falso_negativo = costo de perder un positivo (falso negativo)

p = proporción de casos positivos

Entonces el costo promedio esperado de la clasificación en el punto x,y en el espacio ROC es C = (1-p) alfa x + p beta (1-y).

Para encontrar el mejor umbral hay que minimizar la C, así que..:

best_threshold = argmin ( (1-p) alpha x + p beta (1-y) ).

Esto parece funcionar. Estoy abierto a sugerencias y observaciones.

Aquí está el código. Necesita tener umbrales binarios, fp_rate, recall. Aquí fp_rate y recall es de la forma (num_thresholds, 1) o (num_thresholds, num_classes).

def find_best_binary_auc_threshold(binary_thresholds,
                               fp_rate,
                               recall,
                               proportion_positive_case: float = 0.5,
                               cost_false_positive: float = 0.5,
                               cost_false_negative: float = 0.5,
                               argmin_axis: int = 0):
isocost_lines = cost_false_positive * (1 - proportion_positive_case) * fp_rate + cost_false_negative * proportion_positive_case * (1 - recall)
best_indexes = np.argmin(isocost_lines, axis=argmin_axis)
best_thresholds = binary_thresholds[best_indexes.tolist()]
return best_thresholds, best_indexes

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X