Después de mucho trabajar pudimos hallar la contestación de este enigma que algunos lectores de este sitio han presentado. Si tienes algo que compartir puedes dejar tu información.
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
Compat alias para la migración
Ver Guía de migración para más detalles.
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
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
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
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
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. |
Te invitamos a sostener nuestra faena mostrando un comentario y valorándolo te lo agradecemos.