Accuracy, precision, recall and f-score - это показатели качества системы в машинных системах обучения. Это зависит от матрицы путаницы True/False Positives/Negatives.Расчет точности, повторного вызова и F-оценки за один проход - python
Учитывая бинарная задача классификации, я попытался следующие, чтобы получить функцию, которая возвращает точность, точность, напомним, и диафрагменное оценка:
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
Но, похоже, я избыточно петельные через набор данных 4 чтобы получить True/False Positives/Negatives.
Также кратное try-excepts
, чтобы поймать ZeroDivisionError
, является немного избыточным.
Итак, что такое pythonic способ получить подсчеты True/False Positive/Negatives без нескольких циклов через набор данных?
Как я могу pythonically поймать ZeroDivisionError
без нескольких попыток-исключений?
Я мог бы также сделать следующее сосчитать True/False позитивы/негативы в одной петле, но есть альтернативный способ без мультипликатора 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
Прохладный !!!! Я никогда не думал о подсчете кортежей для вычисления точности/отзыва. – alvas
@alvas Я вижу, что вы открыли щедрость, но на самом деле не изменили вопрос; есть ли проблема с моим ответом? – jonrsharpe
@ jonsharpe, я хотел посмотреть, какие другие решения могут возникнуть у людей. В настоящее время у вас есть лучший ответ, скорее всего, щедрость пойдет к вам или, по крайней мере, галочка ответа пойдет вам =) – alvas