сравнить два массива, чтобы сделать точность прогноза KNN - PullRequest
0 голосов
/ 28 октября 2018

У меня есть два массива, из которых я должен найти точность своего прогноза.

predictions = [1, 0, 0, 1, 1, 1, 0, 1, 1, 0]

     y_test = [1, 0, 0, 1, 0, 1, 0, 1, 1, 1]

, поэтому в этом случае точность равна = (8/10) * 100 = 80%

Я написал метод для выполнения этой задачи.Вот мой код, но я не получаю точность 80% в этом случае.

def getAccuracy(y_test, predictions):
    correct = 0
    for x in range(len(y_test)):
        if y_test[x] is predictions[x]:
            correct += 1
    return (correct/len(y_test)) * 100.0

Спасибо за помощь.

Ответы [ 3 ]

0 голосов
/ 28 октября 2018

, если вы хотите взять 80.0 в качестве результата для вашего примера, он делает это.

0 голосов
/ 28 октября 2018

Ваш код должен работать, если числа в массивах находятся в определенном диапазоне, который не воссоздается интерпретатором Python.Это потому, что вы использовали is, который является проверкой личности, а не проверкой на равенство.Итак, вы проверяете адреса памяти, которые равны только для определенного диапазона чисел.Поэтому вместо этого используйте ==, и он всегда будет работать.

Для более Pythonic решения вы также можете взглянуть на список понимания:

assert len(predictions) == len(y_test), "Unequal arrays"
identity = sum([p == y for p, y in zip(predictions, y_test)]) / len(predictions) * 100
0 голосов
/ 28 октября 2018

Ваш код дает 80,0, как вы хотели, однако вы должны использовать == вместо is, см. Причину .

def getAccuracy(y_test, predictions):
   n = len(y_test) 
   correct = 0
   for x in range(n):
       if y_test[x] == predictions[x]:
           correct += 1
   return (correct/n) * 100.0


predictions = [1, 0, 0, 1, 1, 1, 0, 1, 1, 0]
y_test = [1, 0, 0, 1, 0, 1, 0, 1, 1, 1]

print(getAccuracy(y_test, predictions))
80.0

Вот реализация, использующая Numpy:

import numpy as np

n = len(y_test)
100*np.sum(np.isclose(predictions, y_test))/n

или если вы преобразуете свои списки в массивы, то

100*np.sum(predictions == y_test)/n
...