sklearn.metrics.fbeta_score

sklearn.metrics.fbeta_score()

Calcula la puntuación F-beta.

La puntuación de F-beta es la media armónica ponderada de precisión y exhaustividad, alcanzando su valor óptimo a 1 y su peor valor a 0.

El parámetro beta determina el ponderado de la exhaustividad en la puntuación combinada. beta < 1 da más peso a la precisión, mientras que beta > 1 prefiere exhaustividad (beta -> 0 considera sólo la precisión, beta -> +inf solo la exhaustividad).

Más información en el Manual de usuario.

Parámetros
y_truearray-like 1d o arreglo de indicadores de etiqueta / matriz dispersa

Valores objetivo reales (correctos).

y_predarray-like 1d o arreglo de indicadores de etiqueta / matriz dispersa

Objetivos estimados devueltos por un clasificador.

betaflotante

Determina el ponderado de exhaustividad en el puntaje combinado.

labelsarray-like, default=None

El conjunto de etiquetas a incluir cuando average != 'binary', y su orden si average es 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 en y_true y y_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 de caracteres 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; configurando labels=[pos_label] y average != '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.

Salida
fbeta_scoreflotante (si el promedio no es None) o arreglo de flotantes, forma = [n_unique_labels]

Puntaje f-beta de la clase positiva en la clasificación binaria o promediado ponderado del puntaje F-beta de cada clase para la tarea multiclase.

Notas

Cuando true positive + false positive == 0 o true positive + false negative == 0, f-score devuelve 0 y aumenta UndefinedMetricWarning. Este comportamiento puede ser modificado con zero_division.

Referencias

1

R. Baeza-Yates and B. Ribeiro-Neto (2011). Modern Information Retrieval. Addison Wesley, pp. 327-328.

2

Entrada de Wikipedia para el valor F1.

Ejemplos

>>> from sklearn.metrics import fbeta_score
>>> y_true = [0, 1, 2, 0, 1, 2]
>>> y_pred = [0, 2, 1, 0, 0, 1]
>>> fbeta_score(y_true, y_pred, average='macro', beta=0.5)
0.23...
>>> fbeta_score(y_true, y_pred, average='micro', beta=0.5)
0.33...
>>> fbeta_score(y_true, y_pred, average='weighted', beta=0.5)
0.23...
>>> fbeta_score(y_true, y_pred, average=None, beta=0.5)
array([0.71..., 0.        , 0.        ])