python - 比较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
. 感谢您在这方面帮助我。
解决方案
对于二进制分类,您不必比较值,只需简单添加即可轻松完成:
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。
这是一个小技巧,可以大大提高计算精度。
推荐阅读
- javascript - Why is this template not working correctly?
- r - XGBoost 的折叠规范不正确
- azure - 使用来自不同订阅的 Azure AD 的 Azure 应用服务
- c - 试图从标准中理解有符号整数转换规则
- react-native - 简单的 ExpoKit 项目不能在 iOS 或 Android 上运行
- c# - 有没有办法绘制内存成本较低的轨迹?
- cuda - CUDA,复制到共享内存会显着增加使用的寄存器数量
- android - Android -> 音频视频与主视频声音合并,保持音频较低的音量
- android - 我的代码在改造 android 中给出了 403 响应,尽管 url 在邮递员中工作正常
- javascript - 我的 JavaScript 源代码在错误的备份中丢失,试图理解 if 语句