Accuracy, precision, recall and f-score sono misure di una qualità del sistema nei sistemi di apprendimento automatico. Dipende da una matrice di confusione di Veri/falsi positivi/negativi.Calcolo della precisione, richiamo e F-score in un passaggio - python
Dato un compito classificazione binaria, ho provato quanto segue per ottenere una funzione che restituisce accuratezza, precisione, richiamo e F-score:
gold = [1] + [0] * 9
predicted = [1] * 10
def evaluation(gold, predicted):
true_pos = sum(1 for p,g in zip(predicted, gold) if p==1 and g==1)
true_neg = sum(1 for p,g in zip(predicted, gold) if p==0 and g==0)
false_pos = sum(1 for p,g in zip(predicted, gold) if p==1 and g==0)
false_neg = sum(1 for p,g in zip(predicted, gold) if p==0 and g==1)
try:
recall = true_pos/float(true_pos + false_neg)
except:
recall = 0
try:
precision = true_pos/float(true_pos + false_pos)
except:
precision = 0
try:
fscore = 2*precision*recall/(precision + recall)
except:
fscore = 0
try:
accuracy = (true_pos + true_neg)/float(len(gold))
except:
accuracy = 0
return accuracy, precision, recall, fscore
ma sembra che ho ridondante in loop con il set di dati 4 volte per ottenere i veri/falsi positivi/negativi.
Anche il multiplo try-excepts
per catturare lo ZeroDivisionError
è un po 'ridondante.
Quindi qual è il modo pitone per ottenere i conteggi dei Veri/falsi positivi/negativi senza loop multipli attraverso il set di dati?
Come faccio a catturare Pythonic lo ZeroDivisionError
senza i molteplici errori di prova?
Potrei anche fare quanto segue per contare le Vero/Falso positivi/negativi in un loop, ma c'è un modo alternativo senza il multiplo if
?:
for p,g in zip(predicted, gold):
if p==1 and g==1:
true_pos+=1
if p==0 and g==0:
true_neg+=1
if p==1 and g==0:
false_pos+=1
if p==0 and g==1:
false_neg+=1
Cool !!!! Non ho mai pensato di contare le tuple per il calcolo di precisione/richiamo. – alvas
@alvas Vedo che hai aperto una taglia, ma in realtà non ho cambiato la domanda; c'è un problema con la mia risposta? – jonrsharpe
@jonsharpe, volevo vedere quali altre soluzioni le persone possono trovare. Al momento, hai la risposta migliore, molto probabilmente la taglia verrà indirizzata a te o almeno il segno di spunta della risposta verrà inviato a te =) – alvas