Ver fuente en GitHub

Calcula el AUC (área bajo la curva) aproximada mediante una suma de Riemann.

Hereda de: Metric, Layer, Module

Ver alias

Alias ​​principales

tf.metrics.AUC

Compat alias para la migración

Ver Guía de migración para más detalles.

tf.compat.v1.keras.metrics.AUC

tf.keras.metrics.AUC(
    num_thresholds=200, curve='ROC',
    summation_method='interpolation', name=None, dtype=None,
    thresholds=None, multi_label=False, label_weights=None)

Esta métrica crea cuatro variables locales, true_positives, true_negatives, false_positives y false_negatives que se utilizan para calcular el AUC. Para discretizar la curva AUC, se utiliza un conjunto de umbrales espaciados linealmente para calcular pares de valores de recuperación y precisión. Por lo tanto, el área bajo la curva ROC se calcula utilizando la altura de los valores de recuperación por el false tasa positiva, mientras que el área bajo la curva PR se calcula utilizando la altura de los valores de precisión por la recuperación.

Este valor se devuelve finalmente como auc, una operación idempotente que calcula el área bajo una curva discretizada de precisión versus valores de recuperación (calculados usando las variables antes mencionadas). los num_thresholds La variable controla el grado de discretización con un mayor número de umbrales que se aproximan más al true AUC. La calidad de la aproximación puede variar drásticamente dependiendo de num_thresholds. los thresholds El parámetro se puede utilizar para especificar manualmente los umbrales que dividen las predicciones de manera más uniforme.

Para mejores resultados, predictions debe distribuirse aproximadamente uniformemente en el rango [0, 1] y no alcanzó su punto máximo alrededor de 0 o 1. La calidad de la aproximación AUC puede ser mala si este no es el caso. Configuración summation_method a “minoritario” o “mayoritario” puede ayudar a cuantificar el error en la aproximación al proporcionar una estimación del límite inferior o superior del AUC.

Si sample_weight es None, los pesos predeterminados son 1. Utilice sample_weight de 0 para enmascarar los valores.

Args
num_thresholds (Opcional) El valor predeterminado es 200. El número de umbrales que se utilizarán al discretizar la curva roc. Los valores deben ser> 1.
curve (Opcional) Especifica el nombre de la curva que se calculará, ‘ROC’ [default] o ‘PR’ para la curva Precision-Recall.
summation_method (Opcional) Especifica el Método de suma de Riemann usó. ‘interpolación’ (predeterminado) aplica un esquema de suma de punto medio para ROC. Para PR-AUC, interpola (true/false) positivos pero no la proporción que es precisión (ver Davis & Goadrich 2006 para más detalles); ‘minoring’ aplica la suma izquierda para intervalos crecientes y la suma derecha para intervalos decrecientes; “especialización” hace lo contrario.
name (Opcional) string nombre de la instancia de métrica.
dtype (Opcional) tipo de datos del resultado de la métrica.
thresholds (Opcional) Una lista de valores de punto flotante para usar como umbrales para discretizar la curva. Si está configurado, el num_thresholds el parámetro se ignora. Los valores deben estar en [0, 1]. Los umbrales de punto final iguales a -epsilon, 1 + épsilon para un valor de épsilon positivo pequeño se incluirán automáticamente con estos para manejar correctamente predicciones iguales a exactamente 0 o 1.
multi_label booleano que indica si los datos de múltiples etiquetas deben tratarse como tales, en el que el AUC se calcula por separado para cada etiqueta y luego se promedia entre las etiquetas, o (cuando es Falso) si los datos deben compactarse en una sola etiqueta antes del cálculo del AUC. En el último caso, cuando los datos de varias etiquetas se pasan a AUC, cada par etiqueta-predicción se trata como un punto de datos individual. Debe establecerse en False para datos de varias clases.
label_weights lista (opcional), arrayo tensor de ponderaciones no negativas que se utiliza para calcular las AUC de datos de varias etiquetas. Cuando multi_label es Verdadero, las ponderaciones se aplican a las AUC de etiquetas individuales cuando se promedian para producir las AUC de etiquetas múltiples. Cuando es Falso, se utilizan para ponderar las predicciones de etiquetas individuales al calcular la matriz de confusión en los datos aplanados. Tenga en cuenta que esto es diferente a class_weights en que class_weights pondera el ejemplo dependiendo del valor de su etiqueta, mientras que label_weights depende solo del índice de esa etiqueta antes del aplanamiento; por lo tanto label_weights no debe utilizarse para datos de varias clases.

Uso independiente:

m = tf.keras.metrics.AUC(num_thresholds=3)
m.update_state([0,0,1,1],[0,0.5,0.3,0.9])# threshold values are [0 - 1e-7, 0.5, 1 + 1e-7]# tp = [2, 1, 0], fp = [2, 0, 0], fn = [0, 1, 2], tn = [0, 2, 2]# recall = [1, 0.5, 0], fp_rate = [1, 0, 0]# auc = ((((1+0.5)/2)*(1-0))+ (((0.5+0)/2)*(0-0))) = 0.75
m.result().numpy()0.75
m.reset_states()
m.update_state([0,0,1,1],[0,0.5,0.3,0.9],
               sample_weight=[1,0,0,1])
m.result().numpy()1.0

Uso con compile() API:

model.compile(optimizer='sgd', loss='mse', metrics=[tf.keras.metrics.AUC()])
Atributos
thresholds Los umbrales utilizados para evaluar el AUC.

Métodos

interpolate_pr_auc

Ver fuente

interpolate_pr_auc()

Fórmula de interpolación inspirada en la sección 4 de Davis & Goadrich 2006.

https://www.biostat.wisc.edu/~page/rocpr.pdf

Tenga en cuenta que aquí derivamos y usamos una fórmula cerrada que no está presente en el documento de la siguiente manera:

Precisión = TP / (TP + FP) = TP / P

Modelando todo TP (true positivo), FP (false positivo) y su suma P = TP + FP (predicho positivo) como variando linealmente dentro de cada intervalo [A, B] entre umbrales sucesivos, obtenemos

Pendiente de precisión = dTP / dP = (TP_B – TP_A) / (P_B – P_A) = (TP – TP_A) / (P – P_A) Precisión = (TP_A + pendiente * (P – P_A)) / P

El área dentro del intervalo es (pendiente / total_pos_weight) veces

int_A ^ B Precision.dP = int_A ^ B (TP_A + pendiente * (P – P_A)) * dP / P int_A ^ B Precision.dP = int_A ^ B pendiente * dP + intersección * dP / PAG

donde intersección = TP_A – pendiente * P_A = TP_B – pendiente * P_B, resultando en

int_A ^ B Precision.dP = TP_B – TP_A + intercepción * log (P_B / P_A)

Recuperando el factor (pendiente / total_pos_weight) que dejaríamos de lado, obtenemos

Pendiente * [dTP + intercept * log(P_B / P_A)] / total_pos_weight

donde dTP == TP_B – TP_A.

Tenga en cuenta que cuando P_A == 0 el cálculo anterior se simplifica en

int_A ^ B Precision.dTP = int_A ^ B pendiente * dTP = pendiente * (TP_B – TP_A)

que es realmente equivalente a imputar precisión constante en todo el primer cubo que tiene> 0 true positivos.

Devoluciones
pr_auc una aproximación del área bajo la curva PR.

reset_states

Ver fuente

reset_states()

Restablece todas las variables de estado métricas.

Esta función se llama entre épocas / pasos, cuando se evalúa una métrica durante el entrenamiento.

result

Ver fuente

result()

Calcula y devuelve el tensor de valor métrico.

El cálculo de resultados es una operación idempotente que simplemente calcula el valor de la métrica usando las variables de estado.

update_state

Ver fuente

update_state(
    y_true, y_pred, sample_weight=None)

Acumula estadísticas de matriz de confusión.

Args
y_true Los valores de la verdad fundamental.
y_pred Los valores predichos.
sample_weight Ponderación opcional de cada ejemplo. El valor predeterminado es 1. Puede ser un Tensor cuyo rango es 0, o el mismo rango que y_true, y debe poder transmitirse a y_true.
Devoluciones
Actualizar op.