sklearn.metrics
.f1_score¶
- sklearn.metrics.f1_score()¶
Calcula la puntuación F1, también conocida como puntuación F equilibrada o medición F.
La puntuación F1 puede ser interpretada como un promedio ponderado de la precisión y la exhaustividad, donde un puntaje F1 alcanza su mejor valor en 1 y su peor puntuación en 0. La contribución relativa de la precisión y exhaustividad al puntaje F1 son iguales. La formula para el puntaje F1 es:
F1 = 2 * (precision * recall) / (precision + recall)
En el caso multiclase y multietiqueta, este es el promedio del puntaje F1 de cada clase con ponderado dependiendo del parámetro
average
.Más información en el Manual de usuario.
- Parámetros
- y_truearray-like 1d, o arreglo indicador de etiqueta / matriz dispersa
Valores objetivo reales (correctos).
- y_predarray-like 1d, o arreglo indicador de etiqueta / matriz dispersa
Objetivos estimados devueltos por un clasificador.
- labelsarray-like default=None
El conjunto de etiquetas a incluir cuando
average != 'binary'
, y su orden siaverage is None
. Las etiquetas presentes en los datos pueden ser excluidas, por ejemplo para calcular un promedio de varias clases ignorando una clase negativa mayoritaria, mientras que las etiquetas no presentes en los datos resultarán en 0 componentes en una macro media. Para objetivos multietiqueta, las etiquetas son índices de columnas. Por defecto, todas las etiquetas eny_true
yy_pred
se utilizan en orden ordenado.Distinto en la versión 0.17: Se ha mejorado el parámetro
labels
para problemas multiclase.- pos_labelcadena o entero, default=1
La clase a reportar si
average='binary'
y los datos son binarios. Si los datos son multiclase o multietiqueta, esto será ignorado; configurandolabels=[pos_label]
yaverage != 'binary'
sólo reportará valores para esa etiqueta.- average{“micro”, “macro”, “samples”, “weighted”, “binary”} o None default=”binary”
Este parámetro es requerido para objetivos multiclase/multietiqueta. Si es
None
, los valores para cada clase son retornadas. De lo contrario, esto determina el tipo de promedio realizado en los datos:'binary'
:Solo reporta resultados para la clase especificada por
pos_label
. Esto es aplicable sólo si los objetivos (y_{true,pred}
) son binarios.'micro'
:Calcula las métricas globalmente contando los verdaderos positivos, falsos negativos y falsos positivos.
'macro'
:Calcula las métricas para cada etiqueta y encuentra su media no ponderada. Esto no tiene en cuenta el desequilibrio de la etiqueta.
'weighted'
:Calcula las métricas para cada etiqueta y encuentra su promedio ponderado por soporte (el número de instancias verdaderas para cada etiqueta). Esto altera “macro” para explicar el desequilibrio de la etiqueta; puede dar lugar a un valor F que no esté entre la precisión y la exhaustividad.
'samples'
:Calcula las métricas para cada caso, y encuentra su promedio (solo tiene sentido para la clasificación multietiqueta donde esto difiere de
accuracy_score
).
- sample_weightarray-like de forma (n_samples,), default=None
Ponderados de muestras.
- zero_division«warn», 0 o 1, default=»warn»
Establece el valor a regresar cuando hay una división cero, es decir, cuando todas las predicciones y etiquetas son negativas. Si se establece en «warn», esto actúa como 0, pero las advertencias también son levantadas.
- Devuelve
- f1_scoreflotante o arreglo de flotantes, forma = [n_unique_labels]
Puntaje F1 de la clase positiva en la clasificación binaria o promediado ponderado del puntaje F1 de cada clase para la tarea multiclase.
Notas
Cuando
true positive + false positive == 0
, la precisión es indefinida. Cuandotrue positive + false negative == 0
, la exhaustividad no está definida. En tales casos, por defecto la métrica se establecerá en 0, al igual que valor F, yUndefinedMetricWarning
se levantará. Este comportamiento puede ser modificado conzero_division
.Referencias
Ejemplos
>>> from sklearn.metrics import f1_score >>> y_true = [0, 1, 2, 0, 1, 2] >>> y_pred = [0, 2, 1, 0, 0, 1] >>> f1_score(y_true, y_pred, average='macro') 0.26... >>> f1_score(y_true, y_pred, average='micro') 0.33... >>> f1_score(y_true, y_pred, average='weighted') 0.26... >>> f1_score(y_true, y_pred, average=None) array([0.8, 0. , 0. ]) >>> y_true = [0, 0, 0, 0, 0, 0] >>> y_pred = [0, 0, 0, 0, 0, 0] >>> f1_score(y_true, y_pred, zero_division=1) 1.0...