точность оценки не соответствует формуле метрики - PullRequest
0 голосов
/ 30 декабря 2018

Как вручную рассчитать оценки на основе этой матрицы путаницы?

enter image description here

Какой должна быть точность оценки в этом случае?tp / (tp + fp) переводится как 99% (102/103).Правильно?Но точность оценки составляет всего 98,36%.Если следующие оценки верны, почему точность не совпадает?(Оценка точности верна на уровне 94,73% (162/171)

enter image description here

Я получил этот пример от:

https://towardsdatascience.com/grid-search-for-model-tuning-3319b259367e


Обновление:

Каким должен быть порядок меток, если я хочу получить выходные данные, показанные на этом рисунке?

enter image description here

Ответы [ 2 ]

0 голосов
/ 30 декабря 2018

Из блога, который вы упомянули,

enter image description here

Вы можете видеть, что истинные положительные стороны (положительные значения обычно представлены как 1)четвертый квадрант.Я понимаю, что в примере с общей матрицей путаницы в качестве первого квадранта были бы настоящие позитивы, но в блоге все наоборот.

Следовательно, расчет точности будет 60/61 = 0,9836.

0 голосов
/ 30 декабря 2018

Проблема в том, что TP и FP в вашей матрице смешения поменялись местами.

Как описано в этом примере двоичной классификации, метки интерпретируются следующим образом:

истинный отрицательный expected=0, predicted=0

истинный положительный expected=1, predicted=1

ложный отрицательный expected=1, predicted=0

ложное срабатывание expected=0, predicted=1

Для вашего примера это будет:

##              TN       TP       FN       FP
expected =  [0]*102 + [1]*60 + [1]*8 + [0]*1
predicted = [0]*102 + [1]*60 + [0]*8 + [1]*1 

print ("precision " + '{:.16f}'.format(precision_score(expected, predicted)))
print ("recall    " + '{:.16f}'.format(recall_score(expected, predicted)))
print ("accuracy  " + '{:.16f}'.format(accuracy_score(expected, predicted)))

precision 0.9836065573770492
recall    0.8823529411764706
accuracy  0.9473684210526315

Таким образом, меры соответствуют ожидаемым.

Матрица задокументирована здесь

По определению матрица путаницы такова, что равна числу наблюдений, о которых известно, чтогруппа, но предсказано быть в группе.Таким образом, в бинарной классификации количество истинных отрицательных значений равно C 0,0, ложных отрицательных значений равно C 1,0, истинных положительных значений C 1,1 равно, а ложных положительных значений равно C 0,1.

Thisприводит к следующему результату:

results = confusion_matrix(expected, predicted)
print('TN ' ,results[0][0])
print('TP ' ,results[1][1])
print('FN ' ,results[1][0])
print('FP ' ,results[0][1])
print(results)


TN  102
TP  60
FN  8
FP  1
[[102   1]
 [  8  60]]

Таким образом, меры снова в порядке, только позиция в матрице путаницы не является обычной с TP вверху слева.

Средство правовой защитытак же просто, как вручную поменять местами TP и TN

(results[0][0],results[1][1]) = (results[1][1],results[0][0])
print(results)

[[ 60   1]
 [  8 102]]
...