Оцените успех классификатора, сравнив возвращаемое логическое значение (1/0) с заданным значением в двумерном массиве - PullRequest
0 голосов
/ 26 марта 2019

У меня есть массив "D", который содержит собак и состояние их здоровья.Метод classifier () возвращает 1 или 0 и принимает одну строку 2D-массива в качестве входных данных.Я хочу сравнить результат классификатора со столбцом 13 двумерного массива. В идеальном случае классификатор всегда будет возвращать то же значение, которое указано в этом столбце.Теперь я пытаюсь вычислить общую скорость попадания классификатора, суммируя успехи и деля его на общее количество результатов.

До сих пор я разработал перечисление для цикла для последовательной передачи строк классификатору..

def accuracy(D, classifier):

for i, item in enumerate(D):

        if classifier(item)==D[i,13]
        #Compare result of classifier with actual value

            x+=1 #Increase x on a hit

acc=(x/D.length)
#Divide x by length of D to calculate hitrate eg. "0.5"; 100% would be "1"

return acc

Возможно, где-то произошла простая ошибка форматирования или у меня ошибка в логике.(Сейчас 2 дня в Python) Я думаю, что я не буду делать, если сравнить правильно.

1 Ответ

2 голосов
/ 26 марта 2019

Предполагая, что определены и D, и classifier, в вашем коде есть некоторые ошибки, которые все должны давать разумные сообщения об ошибках (кроме приведения типа с плавающей запятой, который может быть хитрым с питоном).

Вы оба пропускаете : в запросе if, а также пытаетесь получить доступ к массиву D, как D[i, 13], который не разрешен.2D-массивы доступны с другим набором [], например D[i][13].Однако, поскольку вы уже перечисляете двумерный массив, вы также можете использовать item[13] для получения значения.

Наконец, если вам нужно десятичное значение в конце, вам также необходимоприведите хотя бы одно из значений в число с плавающей точкой, например float(x)/D.length, в противном случае оно просто округлит его до 0 или 1.

Фиксированный код:

for i, item in enumerate(D):
    if classifier(item) == D[i][13]:
  # if classifier(item) == item[13]: # This should also work, you can use either.
        x += 1 #Increase x on a hit

acc = (float(x)/D.length)
# Divide x by length of D to calculate hitrate eg. "0.5"; 100% would be "1"
return acc
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...