首页 > 解决方案 > 比较kNN中的多个数组

问题描述

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

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. 感谢您在这方面帮助我。

标签: pythonarrayspython-3.xknn

解决方案


对于二进制分类,您不必比较值,只需简单添加即可轻松完成:

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。

这是一个小技巧,可以大大提高计算精度。


推荐阅读