1. Conceitos relacionados
Existem as seguintes 4 situações para resultados de testes de dados:
Verdadeiro Positivo (TP): Previsto como positivo, real também é positivo Falso
Positivo (FP): Previsto como positivo, real é negativo
Falso Negativo (FN): Previsto como negativo , real é positivo
Verdadeiro Negativo (TN): Previsto como negativo, real negativo
Precisão (P) : TP/(TP+FP)
Recuperar (R) : TP (TP + FN)
Pontuação F1 : 2 (P R)/(P+R
Protótipo f1_score:
sklearn.metrics.f1_score(y_true,
y_pred,
labels=None,
pos_label=1,
average=’binary’,
sample_weight=None)
Explicação detalhada dos parâmetros
1. y_true: Valores alvo verdadeiros (corretos).
2. y_pred: Rótulo de classificação do classificador Alvos estimados conforme retornados por um classificador.
3. média: [Nenhum, 'binário' (padrão), 'micro', 'macro', 'amostras', 'ponderado']
Este parâmetro é necessário para destinos multiclasse/multi-rótulo. O padrão é 'binário', ou seja, duas categorias
4. rótulos: rótulos de categoria, opcionais
2. Análise de exemplo
1. Dados
Dados reais: 1, 2, 3, 4, 5, 6, 7, 8, 9
Classe verdadeira: A, A, A, A, B, B, B, C, C
Classe prevista: A, A, B, C, B, B, C, B, C
Então o verdadeiro e falso positivo e negativo de cada categoria:
A B C Total
TP 2 2 1 5
FP 0 2 2 4
FN 2 1 1 4
2. Taxa de precisão, taxa de recall e pontuação F1 de cada categoria
Taxa de precisão da categoria A: PA = 2/(2+0)= 1
Taxa de recall da categoria A: RA = 2/(2+2)= 0,5
Pontuação F1 da categoria A: FA = 2*(1*0,5) /(1+0,5) = 0,667
Taxa de precisão da categoria B: PB = 2/(2+2) = 0,5
Taxa de recall da categoria B: RB = 2/(2+1) = 0,667
Pontuação F1 da categoria B: FB = 2*(0,5*0,667) /(0,5+0,667) = 0,572
Taxa de precisão da categoria C: PC = 1/(1+2) = 0,333
Taxa de recall da categoria C: RC = 1/(1+1) = 0,5
Pontuação F1 da categoria C: FC = 2*(0,333*0,5) /(0,333+0,5) = 0,39976
3. Pontuação F1
Pontuação F1 de todos os dados:
Existem dois métodos.
O primeiro método é calcular todos os TP, FP e FN nos dados e, em seguida, calcular a pontuação F1, que é micro; o segundo método
é calcular o TP, FP de cada categoria separadamente. FN, em seguida, calcule a pontuação F1 de cada classe e, em seguida, calcule a média da pontuação F, que é macro.
micro:
P = 5/(5+4) = 0,556
R = 5/(5+4) = 0,556
Pontuação F1 = 2*(0,556*0,556)/(0,556+0,556) = 0,556
macro:
pontuação F1 = (0,667+0,572+0,39976)/3 = 0,5462
4. Use sklearn para calcular a pontuação f1
1. pontuação_f1
Para usar a interface sklearn, use 1 para representar a categoria A, 2 para representar a categoria B e 3 para representar a categoria C. Então a
categoria verdadeira y_true: 1, 1, 1, 1, 2, 2, 2, 3, 3 a
categoria prevista y_pred: 1 , 1, 2, 3, 2, 2, 3, 2, 3
from sklearn.metrics import f1_score
y_true = [1, 1, 1, 1, 2, 2, 2, 3, 3]
y_pred = [1, 1, 2, 3, 2, 2, 3, 2, 3]
f1_micro = f1_score(y_true,y_pred,average='micro')
f1_macro = f1_score(y_true,y_pred,average='macro')
print('f1_micro: {0}'.format(f1_micro))
print('f1_macro: {0}'.format(f1_macro))
A saída é:
f1_micro: 0.5555555555555556
f1_macro: 0.546031746031746
Percebe-se que o resultado é igual ao cálculo manual
Por exemplo, Precision_recall_fscore_support
Você também pode usar o sklearn para calcular a precisão de recuperação de cada categoria, etc.
# 计算各个类别的准确率,召回率,与F1-score
from sklearn.metrics import precision_recall_fscore_support
y_true = [1, 1, 1, 1, 2, 2, 2, 3, 3]
y_pred = [1, 1, 2, 3, 2, 2, 3, 2, 3]
p_class, r_class, f_class, support_micro = precision_recall_fscore_support(y_true,y_pred,labels=[1,2,3])
print(p_class)
print(r_class)
print(f_class)
print(support_micro)
Resultado de saída:
[1. 0.5 0.33333333]
[0.5 0.66666667 0.5 ]
[0.66666667 0.57142857 0.4 ]
[4 3 2]
O mesmo que calculado manualmente.
Observação:
Precision_recall_fscore_support retorna a precisão, recall e pontuação f1 de cada categoria. Em cada indicador, a ordem de cada categoria é a mesma que a ordem dos rótulos dos parâmetros, por exemplo:
p_class = [1. 0,5 0,33333333]
rótulos=[1,2,3]
mas
A precisão da categoria 1 é 1
A precisão da categoria 2 é 0,5
A precisão da categoria 3 é 0,3333333