Error al usar sklearn.metrics: ValueError: el objetivo es multiclase pero promedio = 'binario'.

使用sklearn.metrics时报错:ValueError: el objetivo es multiclase pero promedio = 'binario'. Elija otra configuración promedio, una de [Ninguna, 'micro', 'macro', 'ponderada'].

resolver:

from sklearn.metrics import f1_score, recall_score, precision_score

# 对于多分类任务
f1 = f1_score(gt_label_list, pd_score_list)
recall = recall_score(gt_label_list, pd_score_list)
precision = precision_score(gt_label_list, pd_score_list)
# 改为
f1 = f1_score(gt_label_list, pd_score_list, average='macro')
recall = recall_score(gt_label_list, pd_score_list, average='macro')
precision = precision_score(gt_label_list, pd_score_list, average='macro')

La puntuación F1 se puede interpretar como el promedio armónico de Precisión y Recuperación, donde la puntuación F1 alcanza el mejor valor en 1 y el peor valor en 0. La fórmula para calcular la puntuación F1 es:

F1 = 2 * (precisión * recuperación) / (precisión + recuperación)

En el caso de multiclase y multietiqueta, la puntuación F1 es el valor promedio de F1 para cada clase, y su peso depende de averagelos parámetros (la recuperación y la precisión son similares).

promedio {'micro', 'macro', 'muestras', 'ponderado', 'binario'} o Ninguno, predeterminado='binario'

  • 'binary': adecuado para la clasificación binaria
  • 'micro': el indicador se calcula globalmente contando el número total de verdaderos positivos, falsos negativos y falsos positivos;
  • 'macro': calcula las métricas para cada etiqueta y encuentra su promedio no ponderado, independientemente del desequilibrio de la etiqueta;
  • 'weighted': calcule las métricas para cada etiqueta y encuentre su promedio, ponderado por el número de instancias reales de cada etiqueta, teniendo en cuenta el desequilibrio de las etiquetas; puede causar que el F-score no esté entre la precisión y el recuerdo;
  • 'samples': Calcule el índice de cada instancia y encuentre su valor promedio. A diferencia de precision_score, solo es significativo en la clasificación de etiquetas múltiples;
# Example
>>> 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...
>>> # multilabel classification
>>> y_true = [[0, 0, 0], [1, 1, 1], [0, 1, 1]]
>>> y_pred = [[0, 0, 0], [1, 1, 1], [1, 1, 0]]
>>> f1_score(y_true, y_pred, average=None)
array([0.66666667, 1.        , 0.66666667])

Referencia:

Documentación oficial de sklearn.metrics.f1_score: sklearn.metrics.f1_score — documentación de scikit-learn 1.2.2

Supongo que te gusta

Origin blog.csdn.net/daydayup858/article/details/130111894
Recomendado
Clasificación