比较 kNN 中的多个数组

Compare multiple array in kNN

我正在尝试针对不同的 k 值获取我的 kNN 的准确性。数组 A 是三个不同的 k 值的结果。我想将 A 中的每个原始数据与 B 和 return 进行比较,每个原始数据的精度值。这是我的代码,

import numpy as np

A = [[1, 0, 0, 1, 1, 1, 1, 1, 1, 0], [1, 0, 0, 1, 1, 1, 0, 1, 0, 0], [1, 0, 0, 0, 1, 1, 0, 1, 1, 1]]
B = [1, 0, 0, 1, 0, 1, 0, 1, 1, 1] 

predictions = np.array(A)
y_test = np.array(B)


def getAccuracy(y_test, predictions):
    correct = 0
    w = []
    for i in range(predictions.shape[0]): # I want to compare for each raw in A with B
        for x in range(len(y_test)):
            if y_test[x] == predictions[i,x]:
                correct += 1
                acc = (correct/len(y_test)) * 100.0
        return acc


    return w.append(acc)

test = getAccuracy(y_test, predictions)
print(test)

但我得到的输出是 0.0。感谢您在这方面帮助我。

对于二元分类,您不必比较值,通过简单的加法即可轻松完成:

A = [[1, 0, 0, 1, 1, 1, 1, 1, 1, 0], [1, 0, 0, 1, 1, 1, 0, 1, 0, 0], [1, 0, 0, 0, 1, 1, 
0, 1, 1, 1]]
B = [1, 0, 0, 1, 0, 1, 0, 1, 1, 1] 

predictions = np.array(A)
y_test = np.array(B)

for c in A:
    acc = sum([((x*y)+(x-1)*(y-1)) for x,y in zip(c,B)])/len(B)
    print(acc)
>>>0.7
>>>0.7
>>>0.8

所以为什么 ((x*y)+(x-1)*(y-1)) 有效。 好吧,如果你尝试这四种情况:(0,0),(0,1),(1,0),(1,1) 你会发现对于 类 不同的情况,总和的每一部分都等于 0 而对于 类相等,只有总和的一部分不等于 0 而等于 1。因此对于每一步,如果 类 相等,则为 1,否则为 0。

这是一个小技巧,大大加快了计算精度的速度。