sklearn.metrics.precision_recall_fscore_support

sklearn.metrics.precision_recall_fscore_support()

Calcula precisión, exhaustividad, valor F y el soporte para cada clase.

La precisión es la relación tp / (tp + fp) donde tp es el número de verdaderos positivos y fp el número de falsos positivos. La precisión es intuitivamente la capacidad del clasificador de no etiquetar como positiva una muestra que es negativa.

La exhaustividad es la relación tp / (tp + fn) donde tp es el número de verdaderos positivos y fn el número de falsos negativos. La exhaustividad es, intuitivamente, la capacidad del clasificador para encontrar todas las muestras positivas.

El valor F-beta puede interpretarse como una media ponderada armónica de la precisión y exhaustividad, donde un valor F-beta alcanza su mejor valor a 1 y la peor valor a 0.

El valor F-beta pondera más la exhaustividad que la precisión por un factor de beta. beta == 1,0 significa que la exhaustividad y la precisión tienen la misma importancia.

El soporte es el número de ocurrencias de cada clase en y_true.

Si pos_label es None y en la clasificación binaria, esta función devuelve la precisión promedio, exhaustivodad y valor F si average es uno de 'micro', 'macro', 'weighted' o 'samples'.

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.

betaflotante, default=1.0

La fuerza de la exhaustividad frente a la precisión en el valor F.

labelsarray-like, default=None

El conjunto de etiquetas a incluir cuando average != 'binary', y su orden si average 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 en y_true y y_pred se utilizan en orden ordenado.

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{“binary”, “micro”, “macro”, “samples”,”weighted”}, default=None

Si es None, los valores para cada clase son devueltos. 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).

warn_fortupla o conjunto, para uso interno

Esto determina qué advertencias se harán en el caso de que esta función se utilice para devolver sólo una de sus métricas.

sample_weightarray-like de forma (n_samples,), default=None

Ponderaciones de muestra.

zero_division«warn», 0 o 1, default=»warn»
Establece el valor a devolver cuando hay una división cero:
  • exhaustividad: cuando no hay etiquetas positivas

  • precisión: cuando no hay predicciones positivas

  • valor f: ambos

Si se establece en «warn», esto actúa como 0, pero también se levantan las advertencias.

Devuelve
precisionflotante (si el promedio no es None) o arreglo de flotantes, forma = [n_unique_labels]
recallflotante (si el promedio no es None) o arreglo de flotantes, forma = [n_unique_labels]
fbeta_scoreflotante (si el promedio no es None) o arreglo de flotantes, forma = [n_unique_labels]
NotesNone (si el promedio no es None) o arreglo de enteros, forma = [n_unique_labels]

El número de ocurrencias de cada etiqueta en y_true.

Notas

Cuando true positive + false positive == 0, la precisión es indefinida. Cuando true 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, y UndefinedMetricWarning se levantará. Este comportamiento puede ser modificado con zero_division.

Referencias

1

Entrada de Wikipedia para la precisión y exhaustividad.

2

Entrada de Wikipedia para la valor F1.

3

Discriminative Methods for Multi-labeled Classification Advances in Knowledge Discovery and Data Mining (2004), pp. 22-30 by Shantanu Godbole, Sunita Sarawagi.

Ejemplos

>>> import numpy as np
>>> from sklearn.metrics import precision_recall_fscore_support
>>> y_true = np.array(['cat', 'dog', 'pig', 'cat', 'dog', 'pig'])
>>> y_pred = np.array(['cat', 'pig', 'dog', 'cat', 'cat', 'dog'])
>>> precision_recall_fscore_support(y_true, y_pred, average='macro')
(0.22..., 0.33..., 0.26..., None)
>>> precision_recall_fscore_support(y_true, y_pred, average='micro')
(0.33..., 0.33..., 0.33..., None)
>>> precision_recall_fscore_support(y_true, y_pred, average='weighted')
(0.22..., 0.33..., 0.26..., None)

Es posible calcular precisiones por etiqueta, exhaustividad, valor F1 y soportes en lugar de promedio:

>>> precision_recall_fscore_support(y_true, y_pred, average=None,
... labels=['pig', 'dog', 'cat'])
(array([0.        , 0.        , 0.66...]),
 array([0., 0., 1.]), array([0. , 0. , 0.8]),
 array([2, 2, 2]))